Поддержка Проблемы и решения WP_Query() — ломается пагинация

  • Делаю выборку товаров при помощи WP_Query() в связке с аякс — нужно отфильтровать товары в каталоге при активном чекбоксе — одна выборка/при неактивном — другая выборка. Но я сталкиваюсь с проблемой — у меня не работает корректно пагинация. Из-за аякса в урл подтягивается /wp-admin/admin-ajax.php/page/2/ — и соответственно ссылка нерабочая. Помогите, пожалуйста — как сформировать пагинацию верно в данном случае?

    Мои функции:

    //Аякс - Только новинки
    function add_script_test() {?>
    	<script type="text/javascript"> 
            jQuery(document).ready(function ($) { // кликнули на кнопку
                $('#newest').change(function () { 
    		if($('#newest').is(":checked")) { 
                    $.ajax({
                        url: '/wp-admin/admin-ajax.php', // сделали запрос 
                        type: "POST", // указали метод
                        data: { // передаем параметры отправляемого запроса
                            action: 'my_ajax_action', // вызываем хук который обработает наш ajax запрос
                            strID:$("input:checkbox").attr("id"), 
    						strState:"1" , // передаем параметры из кнопки 
                        },
    
                        success: function (data) {// получаем результат в переменной data
                                    $('.products').html(data); // выводим результат в новый див 
    
                        }
    					}); 
                  
    				} else { 
                    $.ajax({
                        url: '/wp-admin/admin-ajax.php', // сделали запрос 
                        type: "POST", // указали метод
                        data: { // передаем параметры отправляемого запроса
                            action: 'my_ajax_action', // вызываем хук который обработает наш ajax запрос
                            strID:$("input:checkbox").attr("id"), 
    						strState:"0" , // передаем параметры из кнопки 
                        },
    
                        success: function (data) {// получаем результат в переменной data
                                    $('.products').html(data); // выводим результат в контейнер с продуктами 
    
                        }
    		}); 
                    } 
    	     }); 
                });    
        </script>
    <?}
    add_action( 'wp_footer', 'add_script_test' );
    
    // Выводим новинки или все товары
    add_action("wp_ajax_my_ajax_action", "k_ajax_my_ajax_action");
    add_action("wp_ajax_nopriv_my_ajax_action", "k_ajax_my_ajax_action");
    
    function k_ajax_my_ajax_action(){ // функция которая вызывается
    
      if ($_POST['strState']==1) {// проверяем Выбраны ли Новинки
        global $post, $wp_query;
        $args = array(
       'post_type' => 'product',
       'orderby' => 'date',
       'order' => 'DESC',
       'posts_per_page' => 2,	
       'paged' => get_query_var( 'page' ),
       );
        // Set the query
        $products = new WP_Query( $args );
        // Standard loop
    
         if ( $products->have_posts() ) :
            while ( $products->have_posts() ) : $products->the_post();
            // Your new HTML markup goes here
    
    		wc_get_template_part( 'content', 'product' );
                                   
            endwhile;
    	 
    wp_reset_postdata();
    
    //Пагинация	
        $temp_query = $wp_query;
        $wp_query   = null;
        $wp_query   = $products;
    
        the_posts_pagination();
    
        // Reset main query object.
        $wp_query = null;
        $wp_query = $temp_query;
    	  
    	  
        endif;       
    
      }else { // Если выбраны не новинки, выводим все товары
     global $post, $wp_query;
     $args = array(
       'post_type' => 'product',
       'orderby' => 'date',
       'order' => 'DESC',
       'posts_per_page' => 9,
       'paged' => get_query_var( 'page' ),
       );
        // Set the query
        $products = new WP_Query( $args );
        // Standard loop
        // 
         if ( $products->have_posts() ) :
            while ( $products->have_posts() ) : $products->the_post();
            // Your new HTML markup goes here
            // 
    
    		wc_get_template_part( 'content', 'product' );
                                   
            endwhile;
    
            endif;
    	  
    
    	wp_reset_postdata();
    
        //Пагинация  
        $temp_query = $wp_query;
        $wp_query   = null;
        $wp_query   = $products;
    
        the_posts_pagination();
    
        // Reset main query object.
        $wp_query = null;
        $wp_query = $temp_query;
      } 
    
      wp_die();
     }
Просмотр 1 ответа (всего 1)
  • 1. Можно попробовать использовать paginate_links

    и заменить /wp-admin/admin-ajax.php на адрес страницы.

    2. Переписать функцию paginate_links, передавая ей адрес страницы

    3. Опять же переписать функцию paginate_links и сделать не ссылками, а радиокнопками. Тогда можно будет листать страницы без перезагрузки. Только нужно будет обработчик и код javascript.

Просмотр 1 ответа (всего 1)