Не работает пагинация с пользовательским циклом

У меня есть пользовательский цикл, который я использую для отображения некоторых списков недвижимости, которые будут доступны в течение 60 дней. Я вызываю с помощью следующей функции:

<?php 
$sixtydays = date('Y/m/d', strtotime('+60 days'));
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = new PostsOrderedByMetaQuery(array(
  'post_type' => array('post', 'real-estate'),
  'meta_key' => 'Time Available',
  'meta_compare' => '<=',
  'meta_value' => $sixtydays,
  'paged' => $paged,
  'orderby_meta_key' => 'Price',
  'orderby_order'    => 'ASC'
));
?>
<?php while ($query->have_posts()) : $query->the_post(); ?>

Хотя цикл отлично работает, я не могу заставить его разбивать на страницы. Он показывает первые 10 постов (по умолчанию), но не показывает нумерацию страниц. Единственный способ отобразить все сообщения — это показать их на одной странице, добавив 'posts_per_page' => -1. У меня есть похожие циклы на других страницах, которые не имеют проблем с разбиением на страницы. Единственная разница с этим состоит в том, что есть два мета-ключа, которые фильтруют сообщения.

Я использую WP Page Navi для этого и остальных моих страниц. Я закрываю цикл и добавляю пагинацию, используя следующий код:

<?php endwhile; ?>
<?php wp_pagenavi(); ?>
<?php wp_reset_query(); ?>

Как я могу исправить это?

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 6
  1. nurain

    WP Page Navi не отображается в постах с похожими запросами (отфильтрованные по нескольким мета-ключам). Он появляется на всех других страницах, таких как архивы, блоги и т.д.

  2. Adnan Limdiwala

    Я использую это для пользовательской нумерации страниц:

         //определить в файле functions.php
          function custom_pagination($numpages = '', $pagerange = '', $paged='')  {
    
          if (empty($pagerange)) {
            $pagerange = 2;
          }
    
          if ($paged == '') {
              global $paged;
              if (empty($paged)) {
                $paged = 1;
              }
          }
          if ($numpages == '') {
            global $wp_query;
            $numpages = $wp_query->max_num_pages;
            if(!$numpages) {
                $numpages = 1;
            }
          }
    
          /** 
           * Создаем аргументы пагинации для входа в нашу функцию paginate_links. 
           */
    
          $pagination_args = array(
            'base'            => get_pagenum_link(1) . '%_%',
            'format'          => 'page/%#%',
            'total'           => $numpages,
            'current'         => $paged,
            'show_all'        => false,
            'end_size'        => 1,
            'mid_size'        => $pagerange,
            'prev_next'       => true,
            'prev_text'       => __('&#9668;'),
            'next_text'       => __('&#9658;'),
            'type'            => 'plain',
            'add_args'        => true,
            'add_fragment'    => '',
            'after_page_number' => '',
            'before_page_number' =>'',
            );
         $paginate_links = paginate_links($pagination_args);
    
          if ( $paginate_links ) {
            echo "<nav class='custom-pagination'>";
              //echo "<span class='page-numbers page-num'>Page " . $paged . " of " . $numpages . "</span> ";
              echo $paginate_links;
            echo "</nav>";
          }
        }
        ?>
    
        <?php  $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
                                   $newslatter_detail = array(
                                   'post_type' => 'newsletter',
                                   'post_status' => 'publish',
                                   'posts_per_page' =>4,
                                   'order' => 'ASC',
                                   //'orderby' =>'date',
                                   'paged' => $paged
                                   );
                                   $posts = new WP_Query( $newslatter_detail );
                                   $posts_array = get_posts( $newslatter_detail );
                                  if ( $posts -> have_posts() ) {
                                   while ( $posts->have_posts() ) : $posts->the_post();
                                   the_title();
                                   endwhile;
                            wp_reset_postdata();
                  } else { ?>
                     No Forum List found.
                    <?php } ?>
    
                  <div class="pagination">
                        <?php
                           if (function_exists(custom_pagination)) {
                            custom_pagination($posts->max_num_pages,"",$paged);
                           }
                           ?>
                     </div>
    
  3. ChowKaiDeng

    Это решение, которое сработало:

    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $myquery = new WP_Query(
        array(
            'posts_per_page' => '2',
            'paged'=>$paged
            // добавить любые другие параметры в массив wp_query
        )   
    );  
    ?>
    
    <?php
    if ($myquery->have_posts()) :  while ($myquery->have_posts()) : $myquery->the_post();
    ?>
    
    <!-- Start your post. Below an example: -->
    
    <div class="article-box">                               
    <h2 class="article-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <p class="article-excerpt"><?php echo(get_the_excerpt()); ?></p>                        
    </div>
    
    <!-- End of your post -->
    
    <?php endwhile; ?>
    <?php wp_pagenavi( array( 'query' => $myquery ) ); 
    <?php wp_reset_query(); ?>
    <?php else : ?>
    <p>No posts found</p>
    <?php endif; ?>
    
  4. Shiv Singh

    Вы можете отобразить свой тип поста, используя этот метод, ваш пагинация может работать !!!

    <?php
      query_posts( array( 'post_type' => 'post', 'posts_per_page' => '2', 'paged' =>     get_query_var( 'paged' ) ) ); 
    
      if (have_posts() ) :  while (have_posts() ) : the_post(); 
    ?>
    <!-- Start your post. Below an example: -->
    <div class="article-box">                               
    <h2 class="article-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <p class="article-excerpt"><?php echo(get_the_excerpt()); ?></p>                        
    </div>
    <!-- End of your post -->
    <?php endwhile; ?>
    <?php wp_pagenavi(); 
    <?php wp_reset_query(); ?>
    <?php else : ?>
    <p>No posts found</p>
    <?php endif; ?>
    
  5. PNMG

    Я сталкивался с этой проблемой с PageNavi раньше. Мое решение — временно перехватить переменную $ wp_query и затем переназначить ее после закрытия цикла. Пример:

    <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $args=array(
       'post_type'=>'post',
       'cat' => 6,
       'posts_per_page' => 5,
       'paged'=>$paged
    );
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query($args);
    
    /* PageNavi at Top */
    if (function_exists('wp_pagenavi')){wp_pagenavi();}
    if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();   
    
    /* DO STUFF IN THE LOOP */
    
    endwhile; endif;
    /* PageNavi at Bottom */
    if (function_exists('wp_pagenavi')){wp_pagenavi();}
    $wp_query = null;
    $wp_query = $temp;
    wp_reset_query(); ?>
    

    Последний шаг — переназначить переменную $ wp_query на то, что было изначально, а затем сбросить запрос.

    1. Jan Fabry

      wp_pagenavi() теперь также принимает аргумент запроса, поэтому вместо перезаписи $wp_query вы можете написать wp_pagename( array( 'query' => $my_query ) ).

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: