Phân trang không hoạt động với vòng lặp tùy chỉnh


42

Tôi đã có một vòng lặp tùy chỉnh mà tôi đang sử dụng để hiển thị một số danh sách Bất động sản sẽ khả dụng trong vòng 60 ngày. Tôi đang gọi nó với chức năng sau:

<?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(); ?>

Trong khi vòng lặp hoạt động tuyệt vời, tôi không thể làm cho nó phân trang. Nó hiển thị 10 bài đăng đầu tiên (mặc định của tôi) nhưng không hiển thị phân trang. Cách duy nhất để hiển thị tất cả các bài đăng là hiển thị chúng trên một trang bằng cách thêm 'posts_per_page' => -1,tôi có các vòng lặp tương tự trên các trang khác không gặp vấn đề gì khi phân trang. Sự khác biệt duy nhất với cái này là có hai khóa meta đang lọc các bài đăng.

Tôi đang sử dụng WP Page Navi cho việc này và các trang còn lại của tôi. Tôi đang đóng vòng lặp và thêm phân trang bằng mã sau:

<?php endwhile; // End the loop. Whew. ?>
<?php wp_pagenavi(); ?>
<?php wp_reset_query(); ?>

Làm thế nào tôi có thể đi về sửa chữa điều này?


Sau khi trả lời tôi đọc lại câu hỏi của bạn ... Ý bạn là plugin pagenavi của bạn không hiển thị hay việc phân trang đã đưa bạn đến 404?
eileencodes

Trang WP Navi không hiển thị trên các bài đăng có truy vấn tương tự (được lọc bởi nhiều hơn một khóa meta). Nó xuất hiện trên tất cả các trang khác như tài liệu lưu trữ, blog, v.v.
hãy nuôi dưỡng

Câu trả lời:


39

Tôi đã gặp vấn đề này với PageNavi trước đây. Giải pháp của tôi là tạm thời chiếm quyền biến $ wp_query và sau đó gán lại nó sau khi đóng vòng lặp. Một ví dụ:

<?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(); ?>

Bước cuối cùng là gán lại biến $ wp_query cho biến ban đầu và sau đó đặt lại truy vấn để bắt đầu.

* Chỉnh sửa: * Đã sửa lỗi thẻ php. Bắn tỉa mắt tốt.


Tôi không biết khi nào PageNavi thực hiện thay đổi này trong plugin của họ, nhưng kể từ khi Wordpress 3.0 tôi phải chiếm quyền điều khiển biến $ wp_query để phân trang hiển thị trên các vòng lặp tùy chỉnh. Mừng vì tôi có thể giúp! : D
PNMG

8
wp_pagenavi() bây giờ cũng chấp nhận queryđối số , vì vậy thay vì ghi đè $wp_querybạn có thể viết wp_pagename( array( 'query' => $my_query ) ).
Jan Fabry

Giải pháp này đã làm việc cho tôi. Tôi đã có một vòng lặp khác trước vòng lặp này, vì vậy tôi phải thêm wp_reset_query () trước mã trong ví dụ.
Ryan

Xem câu trả lời này để biết một giải pháp khả thi khác cho Chiếu số với các truy vấn tùy chỉnh bằng cách sử dụng WP_Query();.
Michael Ecklund

11

Tôi đã có một vấn đề tương tự vào đầu ngày hôm nay ...

Bạn có một loại bài đăng tùy chỉnh và một trang hoặc bài đăng với cùng một con sên? Ý nghĩa là url của một trang bạn có / bất động sản và url viết lại loại bài đăng tùy chỉnh tại / bất động sản?

Nếu đó là trường hợp bạn không thể có 2 với cùng một url hoặc nếu không thì wordpress bị nhầm lẫn.

Bạn có thể thay đổi url hoặc thử http://wordpress.org/support/topic/pagination-with-custom-post-type-listing?replies=23#post-1637753 . Tôi đã chọn thay đổi url của mình, nhưng ai đó ở đó đã viết một truy vấn tùy chỉnh để khắc phục sự cố


Tôi không nghĩ rằng tôi có bất cứ thứ gì được đặt tên giống nhau. Tôi thực sự đã tạo một trang mới có tên "Chuyển nhanh trong - 60 ngày" và thêm vòng lặp bằng cách tạo một mẫu trang cho nó.
nuôi dưỡng

7

Tôi đang sử dụng cái này để tùy chỉnh và nó hoạt động tốt

//paginations for newsletter

     //define in function file
      function custom_pagination($numpages = '', $pagerange = '', $paged='')  {

      if (empty($pagerange)) {
        $pagerange = 2;
      }

      /**
       * This first part of our function is a fallback
       * for custom pagination inside a regular loop that
       * uses the global $paged and global $wp_query variables.
       * 
       * It's good because we can now override default pagination
       * in our theme, and use this function in default queries
       * and custom queries.
       */

      if ($paged == '') {
          global $paged;
          if (empty($paged)) {
            $paged = 1;
          }
      }
      if ($numpages == '') {
        global $wp_query;
        $numpages = $wp_query->max_num_pages;
        if(!$numpages) {
            $numpages = 1;
        }
      }

      /** 
       * We construct the pagination arguments to enter into our paginate_links
       * function. 
       */

      $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>";
      }
    }
    ?>

// Xác định điều này cho bất kỳ Mẫu nào như bản tin mẫu

    <?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>

Hàm Hi_pagination () Hi xác định trong tệp chức năng chủ đề hoặc tệp chức năng plugin. và sau khi bạn đặt mã này vào tệp mẫu Xác định mã này sau phần nhận xét trong mã ở trên = Xác định mã này cho bất kỳ Mẫu nào như bản tin mẫu cho bất kỳ Mẫu nào như bản tin mẫu nếu có bất kỳ truy vấn nào, hãy cho tôi biết tại đây.
Adnan Limdiwala

Bất kỳ vấn đề nào liên quan đến vấn đề này Tôi hy vọng nó hoạt động tốt với bạn
Adnan Limdiwala

3

Đây là giải pháp hiệu quả với tôi, sử dụng một phần mã gốc bằng cách nuôi dưỡng và câu trả lời của Jan Fabry:

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$myquery = new WP_Query(
    array(
        'posts_per_page' => '2',
        'paged'=>$paged
        // add any other parameters to your wp_query array
    )   
);  
?>

<?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 ) ); ?><!-- IMPORTANT: make sure to include an array with your previously declared query values in here -->
<?php wp_reset_query(); ?>
<?php else : ?>
<p>No posts found</p>
<?php endif; ?>

2

Bạn có thể hiển thị cho bạn loại bài đăng tùy chỉnh bằng phương pháp này, phân trang của bạn có thể hoạt động !!!

<?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(); ?><!-- IMPORTANT: make sure to include an array with your previously declared query values in here -->
<?php wp_reset_query(); ?>
<?php else : ?>
<p>No posts found</p>
<?php endif; ?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.