UPD. Выяснил, что проблема ни в сайте, ни в аяксе, ги в моем php коде. Это баг woocommerce. Он не умеет сортировать товары с одинаковой ценой. Он выдает их все время в разном порядке, и, если, они приходятся на разные страницы, то будут повторы.
Всем привет. Столкнулся с такой проблемой. Написал "бесконечный скролл" для woocommerce, но есть неприятная проблема с тем, что некоторые посты могут повториться два раза, может немного нарушиться порядок, и я абсолютно не могу понять почему. Когда-то давно столкнулся ровно с такой же проблемой на другом сайте, но там это было не критично. Там последний товар на одной странице совпадал с первым товаром на следующей.
вот мой текущий код
//Здесь отбор по катсомной таксономии (если задана)
add_action( 'pre_get_posts', 'product_cat_modify_query' );
function product_cat_modify_query( $query ) {
if ( ! is_admin() && $query->is_main_query() && is_product_category() ) {
if (isset($_GET['brand'])) {
$brandquery = array (
'taxonomy' => 'product_brand',
'field' => 'slug',
'terms' => $_GET['brand']
);
$tax_query = get_query_var('tax_query');
$tax_query[] = $brandquery;
$query->set('tax_query', $tax_query);
}
}
}
//Сам ajax экшн
add_action('wp_ajax_load_more_products', 'load_more_products');
add_action('wp_ajax_nopriv_load_more_products', 'load_more_products');
function load_more_products() {
check_ajax_referer( 'qwkugf(Yoaywre9q=530fusefh9295@Tfgw3t*%*=', 'security' );
$page = $_POST['page'];
$terms = $_POST['terms'];
$tax = $_POST['tax'];
$brand = isset($_POST['brand']) ? $_POST['brand'] : null ;
$woo_query = new WC_Query();
$order_args = $woo_query->get_catalog_ordering_args();
$return_html = '';
$args = array(
'post_type' => 'product',
'posts_per_page' => bodymania_woocommerce_products_per_page(),
'paged' => $page,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => $tax,
'terms' => explode(',',$terms)
)
)
);
$args = array_merge($args, $order_args);
if ($brand) {
$args['tax_query'][] = array(
'taxonomy' => 'product_brand',
'field' => 'slug',
'terms' => $brand
);
}
$return_products = new WP_Query($args);
if ($return_products->have_posts()) {
$max_pages = $return_products->max_num_pages;
ob_start();
while ($return_products->have_posts()) {
$return_products->the_post();
wc_get_template_part( 'content', 'product' );
}
wp_reset_postdata();
$return_html .= ob_get_contents();
ob_end_clean();
if ($page < $max_pages) {
$next_page = $page + 1;
$return_html .= '<a id="loadMoreProducts" href="#" data-page="'. $next_page .'" data-terms="'. $terms .'" data-tax="' . $tax . '">LOAD MORE</a>';
}
}
echo $return_html;
wp_die();
}
Получается часто такое
-------------------------------------------------------------------------------------------------------------------
Причем, после каждого обновления страницы, порядок товаров каждый раз меняется.
Общее количество товаров выводится суммарно такое же как забито в БД, но из-за того, что некоторые товары повторяются, в итоге, выводятся не все товары.
UPD. Так. выяснил, что проблема с товарами с одинаковой ценой. Они все время выдаются в произвольном порядке. Т.е. есть 4 товара с ценой 100, 1 выводится на текущей странице, 3 должны попасть на следующую. Вот на следующей странице выводятся три товара с ценой 100, но каждый раз в разном порядке, и один из них может быть тем, что был на предыдущей странице.