Количество постов и нумерация страниц в запросе продукта ajax Woocommerce - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь заставить работать пользовательскую функцию ajax.Цель этой функции - запросить продукт woocommerce с помощью ajax и отобразить результат на странице магазина.

Для этого у меня есть список для отображения выбранного количества товара на странице: enter image description here

После этого, когда я нажимаю, я загружаю Ajax-запрос с помощью этой функции JS:

var $content = $('#data-posts');
    var $loader = $('#displaycount');
    var cat = localStorage.getItem('ShopProductCategorySlug');
    var ppp = 2;
    var offset = $('#data-posts').find('.product').length;
    $loader.on( 'click',  'li', load_ajax_posts );
    urlboutique = 'http://showcase.pierregagliardi.com/Remy/boutiques';
    function load_ajax_posts() {
        if (!($loader.hasClass('post_loading_loader') || $loader.hasClass('post_no_more_posts'))) {
            ppp = $(this).data('numpost');
            localStorage.setItem('ShopNumPost', ppp);
            $('#displaycount li').removeClass("current");
            $(this).addClass("current");
    $.ajax({
        type: 'POST',
        dataType: 'html',
        url: ajaxnumpost.ajaxurl,
        data: {
            'cat': cat,
            'ppp': ppp,
            'offset': offset,
            'action': 'ajax_numpost'
        },
        beforeSend : function () {
            $("html,body").animate({ scrollTop: $('#main').offset().top - offset }, "slow");

        $("#data-posts").hide("normal");
        $('#shop-container').prepend( "<div id='pagination-loader'></div>" );
        $( "#pagination-loader" ).show();
        },
        success: function (data) {
            console.log(data);
            var $this   = $(this),
                urls        = window.location.href,
                title   = $this.attr('title') || null;
                console.log(location.pathname);
            var $data = $(data);
            if ($data.length) {
                $( "#pagination-loader" ).remove();
                $("#data-posts").replaceWith($data.find("#data-posts"));


                    var grid = localStorage.getItem('ShopdisplayGrid');
                    if(grid != null){
                        $('#displaygrid li').removeClass('current');
                        localStorage.setItem('ShopdisplayGrid', grid);

                        $(".products .row > div").hide();
                        $(".products .row > div").removeClass().addClass('pl-sm-4s pr-sm-4s pt-4s pb-4s p-0s ' + BsCol);
                        $(".products .row > div").fadeIn(1000);
                        $('#displaygrid li[data-grid="'+grid+'"]').addClass('current');
                    }

            } else {
                $( "#pagination-loader" ).remove();

            }
        },
        error : function (jqXHR, textStatus, errorThrown) {
            $loader.html($.parseJSON(jqXHR.responseText) + ' :: ' + textStatus + ' :: ' + errorThrown);
            console.log(jqXHR);
        },
    });
}
offset += ppp;
return false;}

, чтобы вызвать это действие php:

add_action( 'wp_ajax_nopriv_ajax_numpost', 'my_ajax_numpost' );
add_action( 'wp_ajax_ajax_numpost', 'my_ajax_numpost' );
function my_ajax_numpost() {
    $ppp     = (isset($_POST['ppp'])) ? $_POST['ppp'] : 3;
    $cat     = (isset($_POST['cat'])) ? $_POST['cat'] : 0;
    $offset  = (isset($_POST['offset'])) ? $_POST['offset'] : 0;
    $tax     = 'product_cat';
    $paged   = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
if ($cat == 'all') :
    $tax_qry[] = [
        'taxonomy' => $tax,
        'field'    => 'slug',
        'terms'    => $cat,
        'operator'  => 'NOT IN'
    ];
else :
    $tax_qry[] = [
        'taxonomy' => $tax,
        'field'    => 'slug',
        'terms'    => $cat,
    ];
endif;
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => $ppp,
        'cat'            => $cat,
        'paged'          => $paged,
        'tax_query'      => $tax_qry
    );
    $loop = new WP_Query($args);
    if ($loop -> have_posts()) :
        do_action( 'woocommerce_before_shop_loop' );
        woocommerce_product_loop_start();
        woocommerce_product_subcategories(); 
        while ($loop -> have_posts()) :
            $loop -> the_post();
            do_action( 'woocommerce_shop_loop' );
            wc_get_template_part( 'content', 'product' ); 
        endwhile;
        do_action( 'woocommerce_after_shop_loop' );
    endif;
    do_action( 'woocommerce_after_main_content' );
    do_action( 'woocommerce_pagination' ); 
    echo $loop->max_num_pages;
    echo $paged;
    echo $offset;
    wp_reset_postdata();
    wp_die();}

Я получил хорошийрезультат возвращается в моем js-запросе, но нумерация страниц не обновляется.

EG: если у меня есть 5 продуктов, которые я хочу отображать по 3 на страницу, это показывает, что страница 2 разбита на страницы без проблем.
Если затем я нажимаю на15, чтобы отобразить 15 продуктов на странице, в моей разбивке по страницам всегда отображаются 2 ссылки на страницы, а не только одна или никакая ссылка на страницы.
Любые изменения не обновят ссылку на страницы.

Как я могу обновить или заставить Woocommerce обновить нумерацию страниц?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...