WooCommerce - AJAX -Load funktionieren mehr nicht, wenn die Ajax -Filterung in zwei oder mehr Kategorien filtertPhp

PHP-Programmierer chatten hier
Anonymous
 WooCommerce - AJAX -Load funktionieren mehr nicht, wenn die Ajax -Filterung in zwei oder mehr Kategorien filtert

Post by Anonymous »

Ich habe einen Code für WooCommerce -Produktlisten mit AJAX -Load mehr durch Scroll- und Ajax -Filter nach Kategorie erstellt - alles funktioniert großartig, aber es gibt einen Fall, wenn dies nicht der Fall ist. Nur auf der Hauptgeschäftsseite, wenn ich zwei oder mehr Kategorien im Filter auswähle, nachdem ich den ersten Produktsatz erstellt habe, und versuche, nach unten zu scrollen, um zu laden, erhalte ich nichts weiter - sie sende eine Ajax -Anfrage und erhält kein Ergebnis - dieselbe Aktion auf der Kategorieliste funktioniert großartig. Die Filterung nach einzelnen Kategorien funktioniert auf beiden Seiten hervorragend. Im Folgenden finden Sie den von Ajax Load mehr Anfrage genannten PHP -Code. Vielleicht können Sie mir dabei helfen. Nach zwei Tagen habe ich keine Ahnung mehr, wie ich das beheben kann. < /P>

Code: Select all

function mev_load_more_products() {
$args = json_decode(stripslashes($_POST['query']), true);
$args['paged'] = $_POST['page'] + 1;
$args['post_status'] = 'publish';
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
get_template_part('woocommerce/content', 'product');
}
}
die();
}
add_action('wp_ajax_load_more_products', 'mev_load_more_products');
add_action('wp_ajax_nopriv_load_more_products', 'mev_load_more_products');
< /code>
Und dies ist JS -Code -Sendeanforderung an diese Aktion: < /p>
let currentPage = catalog_params.current_page;
let queryVars = catalog_params.query_vars;
const productList = $('.catalog-page-list');
$(window).scroll(function () {
if ($(document).scrollTop() > ($(document).height() - 2000)) {
let data = {
'action' : 'load_more_products',
'query' : queryVars,
'page' : currentPage
};
$.ajax({
url: woocommerce_params.ajax_url,
data: data,
method: 'POST',
success: function(data) {
if (data) {
productList.find('.product-card:last-of-type').after(data);
currentPage++;
}
}
});
}
});
< /code>
Dies ist die Liste der JS -Code -Filterprodukte unter Verwendung von Daten aus Formular: < /p>
const defaultQueryVars = catalog_params.query_vars;
let formData = $('#catalog-filters').serializeArray();
let filterData = {
'action' : 'filter_products',
'filters' : {},
'query' : defaultQueryVars
};
formData.forEach(item => {
if (item.name.endsWith('[]')) {
if (!filterData.filters[item.name]) {
filterData.filters[item.name] = [];
}
filterData.filters[item.name].push(item.value);
} else {
filterData.filters[item.name] = item.value;
}
});

$.ajax({
url: woocommerce_params.ajax_url,
data: filterData,
method: 'POST',
success: function(data) {
productList.html(data.html);
currentPage = 1;
queryVars = data.query_vars;
}
});
< /code>
und Aktion zur Filterung: < /p>
function mev_filter_products() {
$args = json_decode(stripslashes($_POST['query']), true);
$args['paged'] = 1;
if (isset($_POST['filters'])) {
$filters = $_POST['filters'];
if (!isset($args['tax_query'])) {
$args['tax_query'] = [];
}
if (isset($filters['category'])) {
$args['tax_query'][] = [
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $filters['category'],
'operator' => 'IN',
];
}
}
$query = new WP_Query($args);
ob_start();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
get_template_part('woocommerce/content', 'product');
}
}
$html = ob_get_clean();
ob_end_clean();
wp_send_json([
'query_vars' => json_encode($query->query_vars),
'html' => $html,
]);
die();
}
add_action('wp_ajax_filter_products', 'mev_filter_products');
add_action('wp_ajax_nopriv_filter_products', 'mev_filter_products');
< /code>
Wie ich bereits erwähnt habe, funktioniert alles großartig, wenn ich die Seite der Produktkategorie öffne.  Für die Hauptgeschäftsseite funktioniert jedoch nur, wenn ich nicht zwei Kategorien in Filtern auswähle.wp_register_script('kp-product-catalog', get_template_directory_uri() . '/js/product-catalog.js', ['jquery', 'woocommerce'], time(), true );
if (is_shop() || is_product_category() || is_product_tag() || is_tax('seria') || is_tax('product_brand')) {
global $wp_query;
wp_localize_script( 'kp-product-catalog', 'catalog_params', array(
'query_vars' => json_encode($wp_query->query_vars),
'current_page' => get_query_var('paged') ? get_query_var('paged') : 1,
));
wp_enqueue_script('kp-product-catalog');
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post