2015-11-01 2 views
0

У меня есть форма поиска. Выберите таксономию и выберите один или несколько терминов. Я хочу разбивать на страницы результаты.Пагинация не работает с 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">&#8220;' . $term_list1 . '&#8221;</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, прямо сейчас запрос просто возвращает одно сообщение, чтобы было легко проверить разбивку на страницы.

Любые предложения оценены!

ответ

0

Не уверен, что это единственная проблема, но похоже, что у вас есть опечатка.

Вы настраиваете $ Страница: $page = (get_query_var('paged')) ? get_query_var('paged') : 1;

Но ищет $ выгружаемого: 'paged' => $paged,

+0

Спасибо Стив! Я исправил $ paged, но все равно не пошел. По крайней мере, опечатка исчезла! – webguy

Смежные вопросы