У меня есть форма поиска. Выберите таксономию и выберите один или несколько терминов. Я хочу разбивать на страницы результаты.Пагинация не работает с CPT и динамической tax_query
Вот код:
<?php
if(isset($_POST['tax_type'])) {
$tax_type=$_POST['tax_type'];
$terms = $_POST[$tax_type];
$term_list = implode("','", $terms);
$term_list1 = implode(", ", $terms);
$term_list = "'".$term_list."'";
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$giftfinder_args = array(
'post_type' => 'products',
'posts_per_page'=>"1",
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => $tax_type,
'field' => 'slug',
'terms' => explode(',',$term_list),
),
),
);
echo '<div class="results"><span class="eyebrow">search results</span>';
echo '<div class="cat_label">“' . $term_list1 . '”</div></div>';
// the query
$giftfinder_query = new WP_Query($giftfinder_args);
// Pagination fix
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $giftfinder_query;
?>
<?php if ($giftfinder_query->have_posts()) : ?>
<!-- the loop -->
<?php while ($giftfinder_query->have_posts()) : $giftfinder_query->the_post();
$thumb = get_the_post_thumbnail(null, 'medium');
?>
<div class="prod"><a href="<?php the_permalink(); ?>"><?php if(empty($thumb)) {echo '<div style="width:265px;height:265px;background:#eee;"></div>';} else {the_post_thumbnail('medium');} ?></a><span class="truncate"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></span></div>
<?php endwhile; ?>
<div style="clear:both;"></div>
<!-- end of the loop -->
<?php
the_posts_pagination(array(
'prev_text' => __('Previous page', 'twentyfifteen'),
'next_text' => __('Next page', 'twentyfifteen'),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __('Page', 'twentyfifteen') . ' </span>',
));
?>
<?php wp_reset_postdata(); ?>
<?php else : get_template_part('content', 'none'); endif; ?>
<?php } ?>
Первая страница это хорошо, но результаты не появляются на нумерованных страницах.
Как вы можете видеть, я пытаюсь использовать затруднительное постраничной, который превращает мой запрос в $ WP_Query:
// the query
$the_query = new WP_Query($args);
// Pagination fix
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
Но как я уже сказал, нет результатов за пределами первой страницы.
Я собирался попробовать pre_get_posts, но я не могу понять, как его кодировать, поскольку каждый запрос имеет уникальные аргументы, основанные на выборе пользователем таксономии и поисковых запросах.
Я также попробовал 'add_args' к функции paginate_links(), но не смог понять, как отформатировать полученную строку get.
BTW, прямо сейчас запрос просто возвращает одно сообщение, чтобы было легко проверить разбивку на страницы.
Любые предложения оценены!
Спасибо Стив! Я исправил $ paged, но все равно не пошел. По крайней мере, опечатка исчезла! – webguy