При фильтрации по типу поста не работает разбиение на страницы - PullRequest
0 голосов
/ 11 марта 2020

Привет всем, я работаю над WordPress с Timber (для поддержки веток). Я создал пользовательский тип записи под названием gift и специальную таксономию gift_type. Я также создаю виджет для фильтрации gitfs по баллам (все подарки имеют настраиваемое поле баллов). Я создал страницу архива для этого пользовательского типа:

<?php 
get_header('shop');// Get content width and sidebar position
$content_class = "content-class";
?>
<div class="site-content <?php echo esc_attr( $content_class ); ?>" role="main" id="gifts_main_container">
    <?php       
        global $paged;
        if (!isset($paged) || !$paged){
            $paged = 1;
        }
        $args = array(
                'posts_per_page' => get_field('gifts_per_page','option'),
                'post_type' => 'gift', 
                'paged' => $paged,                             
                'tax_query' => array(
                    array(
                        'taxonomy' => 'gift_type',
                        'field' => 'term_id',
                        'terms' => get_queried_object_id(),
                        'include_children' => false
                    )
                )
        );

        require_once(dirname(__FILE__).'/partials/partial-archive-gifts.php');
    ?>

</div>
<?php 
get_sidebar();
dynamic_sidebar( 'mg-widgets-area' );
get_footer();
?>

Я сделал частичный архив подарков. php, чтобы поделиться шаблоном между виджетом фильтра и стандартной страницей архива. Это содержимое

<?php 

    Timber::$dirname = '../templates';
    $context = Timber::context();   
    $context['posts'] = Timber::get_posts($args);
    $context['pagination'] = Timber::get_pagination($context['posts']);
    if(isset($min) && $min !== null) {
        $context['min'] = $min;
    }

    if(isset($max) && $max !== null) {
        $context['max'] = $max;
    }

    if(isset($show_filters_controls) && $show_filters_controls !== null) {
        $context['show_filters_controls'] = $show_filters_controls;                
    }

    $context['strings'] = array(
        'clear_filters'     => __('Clear filters','MG_MARKETS'),
        'add_to_cart'       => __('Add to Cart', 'MG_MARKETS'),
        'points'            => __('Points', 'MG_MARKETS'),
        'add_to_wishlist'   => __('Add to wishlist', 'MG_MARKETS')
    );    

    Timber::render( 'archive.twig', $context );
?>

В виджете я создал функцию, которая вызывается через ajax вызов из внешнего интерфейса. Это функция

    function filter_gifts() {
        $tax = array(intval($_REQUEST['term_id']));
        ob_start();        
        global $posts, $paged;        
        if (!isset($paged) || !$paged){
            $paged = 1;
        }
        $args =array(
            'posts_per_page' => get_field('gifts_per_page','option'),
            'post_type' => 'gift',      
            'paged' => $paged,          
            'meta_query' => array(  
                'relation'      => 'AND',
                array(
                    'key'       => 'n_points_to_withdraw_gift',
                    'value'     => $_REQUEST['min'],
                    'type'      => 'NUMERIC',
                    'compare'   => '>='
                ),
                array(
                    'key'       => 'n_points_to_withdraw_gift',
                    'value'     =>  $_REQUEST['max'],
                    'type'      => 'NUMERIC',
                    'compare'   => '<='
                )
            ),
            'tax_query' => array(
                array(
                    'taxonomy' => 'gift_type',
                    'field' => 'term_id',
                    'terms' => $tax,
                    'include_children' => false
                )
            )
        );

        $template_path = MG_MARKETS_GIFTS_TEMPLATE.'/partials/partial-archive-gifts.php';
        $min = $_REQUEST['min'];
        $max = $_REQUEST['max'];
        $show_filters_controls = $_REQUEST['show_filters_controls'] === 'true' ? true : false;        
        include($template_path);
        $content = ob_get_contents();
        ob_end_clean();
        echo $content;
        wp_die();
    }

Когда я впервые загружаю страницу архива, я могу восстановить нумерацию страниц (и могу переходить на разные страницы) с помощью (в моих частичных архивных подарках). php file)

$context['pagination'] = Timber::get_pagination($context['posts']);

Когда я запускаю вызов ajax, нумерация страниц не имеет общего числа страниц и пустого массива страниц и ничего не отображает во внешнем интерфейсе. Сообщения в обоих типах использования есть, и они являются объектами Timber \ Post. Я выгрузил массив пагинации, и это его содержимое на стандартной странице архива:

Array
(
    [current] => 1
    [total] => 2
    [pages] => Array
        (
            [0] => Array
                (
                    [class] => page-number page-numbers current
                    [title] => 1
                    [text] => 1
                    [name] => 1
                    [current] => 1
                )

            [1] => Array
                (
                    [class] => page-number page-numbers
                    [link] => http://localhost:8000/premi/cucina/page/2/
                    [title] => 2
                    [name] => 2
                    [current] => 
                )

        )

    [next] => Array
        (
            [link] => http://localhost:8000/premi/cucina/page/2/
            [class] => page-numbers next
        )

    [prev] => 
)

Здесь вместо этого есть массив пагинации, когда ajax фильтрация называется

Array
(
    [current] => 1
    [total] => 0
    [pages] => Array
        (
        )

    [next] => 
    [prev] => 
)

Надеюсь, что это может помочь лучше понять мою проблему.

Заранее спасибо всем, кто поможет

...