Pagination tidak bekerja dengan loop kustom

42

Saya memiliki loop kustom yang saya gunakan untuk menampilkan beberapa daftar Real Estat yang akan tersedia dalam 60 hari. Saya menyebutnya dengan fungsi berikut:

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

Sementara perulangan bekerja dengan baik, saya tidak bisa membuatnya ber-paginasi. Ini menunjukkan 10 posting pertama (default saya) tetapi tidak menunjukkan pagination. Satu-satunya cara untuk menampilkan semua posting adalah dengan menunjukkannya pada satu halaman dengan menambahkan 'posts_per_page' => -1,saya memiliki loop yang sama pada halaman lain yang tidak memiliki masalah penomoran halaman. Satu-satunya perbedaan dengan yang satu ini adalah bahwa ada dua kunci meta yang memfilter posting.

Saya menggunakan WP Page Navi untuk ini dan sisa halaman saya. Saya menutup loop dan menambahkan pagination menggunakan kode berikut:

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

Bagaimana saya bisa memperbaiki ini?

nurain
sumber
Setelah menjawab, saya membaca ulang pertanyaan Anda ... Apakah maksud Anda plugin pagenavi Anda tidak muncul atau pagination itu membawa Anda ke 404?
eileencodes
WP Page Navi tidak ditampilkan pada posting dengan pertanyaan serupa (difilter oleh lebih dari satu kunci meta). Itu muncul di semua halaman lain seperti arsip, blog, dll.
nurain

Jawaban:

39

Saya pernah mengalami masalah dengan PageNavi ini sebelumnya. Solusi saya adalah dengan membajak variabel $ wp_query sementara dan kemudian menugaskannya kembali setelah menutup loop. Exmaple:

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

Langkah terakhir adalah menetapkan kembali variabel $ wp_query ke apa yang semula dan kemudian mengatur ulang kueri kembali untuk memulai.

* Edit: * Memperbaiki tag php. Penembak jitu mata yang bagus.

PNMG
sumber
Saya tidak tahu kapan PageNavi membuat perubahan ini dalam plugin mereka, tetapi sejak Wordpress 3.0 saya harus membajak variabel $ wp_query untuk mendapatkan pagination untuk ditampilkan pada loop kustom. Senang bisa membantu! : D
PNMG
8
wp_pagenavi() sekarang juga menerima queryargumen , jadi alih-alih menimpa $wp_queryAnda dapat menulis wp_pagename( array( 'query' => $my_query ) ).
Jan Fabry
Solusi ini berhasil untuk saya. Saya punya loop lain sebelum ini, jadi saya harus menambahkan wp_reset_query () sebelum kode pada contoh.
Ryan
Lihat jawaban ini untuk kemungkinan solusi lain untuk Pagination Numerik dengan kueri khusus menggunakan WP_Query();.
Michael Ecklund
11

Saya memiliki masalah serupa sebelumnya hari ini ...

Apakah Anda memiliki jenis posting khusus dan halaman atau posting dengan siput yang sama? Artinya adalah url dari halaman yang Anda miliki / real-estate dan url jenis posting kustom yang ditulis ulang di / real-estate?

Jika itu masalahnya Anda tidak dapat memiliki 2 dengan url yang sama atau wordpress menjadi bingung.

Anda dapat mengubah url atau mencoba http://wordpress.org/support/topic/pagination-with-custom-post-type-listing?replies=23#post-1637753 . Saya memilih untuk mengubah url saya, tetapi seseorang di sana menulis permintaan khusus untuk mengatasi masalah tersebut

kode eileencode
sumber
Saya tidak berpikir saya memiliki nama yang sama. Saya benar-benar membuat halaman baru yang disebut "Quick Move In - 60 Days" dan menambahkan loop dengan membuat template halaman untuk itu.
nurain
7

Saya Menggunakan Ini Untuk Paginasi Kustom dan berfungsi dengan baik

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

// Tetapkan ini untuk Templat seperti buletin templat

    <?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>
Adnan Limdiwala
sumber
Hai fungsi custom_pagination () mendefinisikan dalam file fungsi tema atau file fungsi plugin. dan setelah Anda memasukkan kode ini dalam file template Anda Tentukan ini setelah komentar bagian dalam kode di atas = Tentukan ini untuk Templat seperti templat-buletin untuk Templat seperti templat-buletin jika ada pertanyaan jadi beri tahu saya di sini.
Adnan Limdiwala
Masalah apa pun tentang Ans ini Saya harap ini berfungsi dengan baik untuk Anda
Adnan Limdiwala
3

Ini adalah solusi yang bekerja untuk saya, menggunakan bagian dari kode asli oleh nurain dan jawaban oleh 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; ?>
ChowKaiDeng
sumber
2

Anda Dapat Menampilkan Anda jenis posting khusus menggunakan metode ini halaman Anda dapat bekerja !!!

<?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; ?>
Shiv Singh
sumber