Привет всем, я работаю над 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] =>
)
Надеюсь, что это может помочь лучше понять мою проблему.
Заранее спасибо всем, кто поможет