如何使WP查询分页工作

时间:2017-09-08 作者:cchiera

这里似乎有无数的自定义查询分页问题,很高兴知道我不是唯一一个在这方面挣扎的人。我试着按照这些问题的答案来做,但到目前为止没有成功。

我有一个自定义的帖子类型,比如图库。每篇文章都有一个标题和一个包含图像的高级自定义字段库字段。当前在其中一篇文章上,它会在图像右侧显示前12篇文章的链接标题。这意味着你再也看不到12号了。我可以将12改为1来显示全部,但这个列表会持续一段时间。

希望添加分页,因此如果您在第一篇文章中,右侧列表下会显示“更多”,并将带您进入第13篇文章,右侧列表现在会显示13到24的链接标题。还有一个prev按钮和一个more按钮。Prev会返回到第一页并显示12个标题,更多内容会将您带到第25篇文章并显示25到36个标题,以此类推。

我尝试过以各种方式添加分页来实现这一点,但没有成功。有些问题我认为是对的,但有错误。分页是正确的方法吗,还是应该开发一个自定义if-else语句或类似语句来实现这一点?

<?php get_header(); ?>      

  <div id="main">

    <div id="gallery-viewer">
      <h3><?php the_title(); ?></h3>
        <?php $images = get_field(\'gallery_images\');
        if( $images ): ?>
          <ul class="thumbs">
            <?php foreach( $images as $image ): ?>
              <li>
                <a href="<?php echo $image[\'url\']; ?>">
                  <img src="<?php echo $image[\'sizes\'][\'gallery-landscape-thb\']; ?>" alt="<?php echo $image[\'alt\']; ?>" />
                </a>
              </li>
            <?php endforeach; ?>
          </ul>
        <?php endif; ?>

      <div class="places">
        <ul class="plist selected first">
          <?php $custom_query = new WP_Query(
            array(
              \'post_type\' => \'customers_gallery\',
              \'posts_per_page\' => 12,
              \'paged\' => $paged
            )
         );
        if ( $custom_query->have_posts() ) : while ( $custom_query->have_posts() ) : $custom_query->the_post(); ?>
          <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endwhile;  ?>
        <?php endif; wp_reset_query(); ?>
        </ul>
         // Add Pagination
       </div>
     </div>

   </div><!-- /#main -->

 <?php get_footer(); ?>

4 个回复
SO网友:Dionoh

try this:

$the_query = new WP_Query( array(\'posts_per_page\'=>12,
                                 \'post_type\'=>\'customers_gallery\',
                                 \'paged\' => get_query_var(\'paged\') ? get_query_var(\'paged\') : 1) 
                            ); 
                            ?>
<?php while ($the_query -> have_posts()) : $the_query -> the_post(); ?>

  //YOUR CONTENT YOU WANT TO SHOW

<?php
endwhile;

$big = 999999999; // need an unlikely integer
 echo paginate_links( array(
    \'base\' => str_replace( $big, \'%#%\', get_pagenum_link( $big ) ),
    \'format\' => \'?paged=%#%\',
    \'current\' => max( 1, get_query_var(\'paged\') ),
    \'total\' => $the_query->max_num_pages
) );

wp_reset_postdata();
SO网友:Sohan Zaman

只需使用此功能:

function wpse279455_query_pagination( $the_query, $pagination_args = array() ) {

    global $wp_query;

    // Make backup of the query object
    $original_query = $wp_query;

    // Swap the global query with our custom qyert
    $wp_query = $the_query;

    // Call the pagination function while custom query is set
    the_posts_pagination( $pagination_args );

    // Restore the query from backup
    $wp_query = $original_query;

}
当您有一个新的WP\\U查询对象时,只需按如下方式传递它:

// My awesome query
$my_query = new WP_Query( array(
    \'post_type\' => \'my_cpt\',
    \'posts_per_page\' => 10,
) );

// Show the pagination for this query
wpse279455_query_pagination( $my_query, array(
    \'mid_size\' => 2,
    \'prev_text\' => __( \'Back\', \'textdomain\' ),
    \'next_text\' => __( \'Onward\', \'textdomain\' ),
) );

SO网友:inarilo

我还没有测试过,但你可以试试

$paged = get_query_var(\'cpage\') ? get_query_var(\'cpage\') : 1;
$custom_query = new WP_Query(
                               array(
                                       \'posts_per_page\'=>12,
                                       \'post_type\'=>\'customers_gallery\',
                                       \'paged\' => $paged
                               ) 
                            ); 

...

echo paginate_links(
                      array(
                              \'format\' => \'?cpage=%#%\',
                              \'current\' => $paged,
                              \'total\' => $custom_query->max_num_pages
                           )
                   );
其想法是使用一个查询变量,该变量不会由WP自动处理,我认为这是导致重定向的原因,因为它是一篇显示在一个页面中的文章,而不是一个归档页面。

SO网友:Alexander Holsgrove

这是我用于自定义帖子类型和分页的内容。此代码显示在single 自定义帖子类型的模板。在你的情况下,这将被命名为single-customers-gallery.php

$original_query = $wp_query;

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

$query = new WP_Query(array(
    \'order\'       => \'DESC\',
    \'orderby\'     => \'date\',
    \'post_status\' => \'publish\',
    \'post_type\'   => \'customers-gallery\'
));


$wp_query = $post_query;
if ($post_query->have_posts()):
    while ($post_query->have_posts()): 
        $post_query->the_post();

        ... output things here ...

    endwhile;

    the_posts_pagination(array(
        \'mid_size\'           => 5,
        \'screen_reader_text\' => \' \', 
        \'prev_text\'          => \'<span class="fa fa-angle-left"></span>\',
        \'next_text\'          => \'<span class="fa fa-angle-right"></span>\'
    ));
endif

wp_reset_postdata();
$wp_query = $original_query;

结束

相关推荐

Pagination issue

我正在使用一个自定义帖子类型/自定义分类组合,我似乎无法使分页正常工作。我想在页面上添加一个无限卷轴,但我甚至无法显示分页以使无限卷轴工作。下面是我的循环:<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; $args = array( \'post_type\' => \'shows\', // it\'s defa