【问题标题】:Wordpress custom loop paginationWordpress 自定义循环分页
【发布时间】:2016-04-18 13:48:17
【问题描述】:

我在multiple loops structure 中编写了自定义循环:

$q = get_posts( $args );
// Run your loop
echo '<div class="row">';
$i = 0; 
foreach ( $q as $post ) : setup_postdata( $post );
  $i++; 
  if ($i%4==0)
    echo '</div><div class="row">';
  get_template_part('loop');
endforeach;
wp_bs_pagination();
wp_reset_postdata();

除了我添加了wp_bs_pagination(); 来加载分页。它只会在每一页上重复相同的帖子集。有什么建议吗?

【问题讨论】:

标签: php wordpress pagination


【解决方案1】:

试试这个,把它粘贴到你的functions.php中

function custom_pagination() {
global $wp_query;
$big = 999999999; // need an unlikely integer
$pages = paginate_links( array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $wp_query->max_num_pages,
        'prev_next' => false,
        'type'  => 'array',
        'prev_next'   => TRUE,
        'prev_text'    => __('«'),
        'next_text'    => __('»'),
    ) );
    if( is_array( $pages ) ) {
        $paged = ( get_query_var('paged') == 0 ) ? 1 : get_query_var('paged');
        echo '<ul class="pagination">';
        foreach ( $pages as $page ) {
                echo "<li>$page</li>";
        }
       echo '</ul>';
    }

}

然后使用函数custom_pagination()

从这里获得解决方案:http://www.ordinarycoder.com/paginate_links-class-ul-li-bootstrap/

【讨论】:

  • 为什么不@PieterGoosen?
  • 看我的回答。这里最重要的是您正在分页主查询而不是手头的自定义查询;-)
【解决方案2】:

不要将get_posts() 用于分页查询。 get_posts 适用于非分页查询,但不适用于分页查询。

问题是,get_posts 只返回来自WP_Query$posts 属性,而不是完整的对象。此外,get_posts()'no_found_rows'=&gt; true 传递给WP_Query,这合法地破坏了分页。

因为get_posts 使用WP_Query,我们不妨使用WP_Query,它会返回我们对查询进行分页所需的所有内容。请记住,我们需要在查询中添加paged 参数才能对其进行分页

我们可以重写您的查询如下

$args= [
    'paged' => get_query_var( 'paged' ),
    // Add any additional arguments here
];
$q = new WP_Query( $args );
// Run your loop

if( $q->have_posts() ) { 

    echo '<div class="row">';
    $i=0; 

    while ( $q->have_posts() ) {
    $q->the_post();
        $i++; 
        if($i%4==0)
            echo '</div><div class="row">';

        get_template_part('loop');

    }
    wp_bs_pagination();
    wp_reset_postdata();
}

您需要以某种方式将$q-&gt;max_num_pages 传递给wp_bs_pagination() 以将分页设置为您的自定义查询,但我不知道该功能,因此我无法为您提供确切的解决方案。

【讨论】:

  • 绝对有用。谢谢:)
  • 我的荣幸,享受 ;-)
  • 由于我再次卡住,我使用自定义分页,但未能将自定义查询 $q 传递给它。请检查代码pastebin.com/6u0nnGV9
  • 这应该可以工作wp_bs_pagination( $q-&gt;max_num_pages );
  • 废话,我记得你说过这是一个静态首页。如果是这样,并且您使用的是 WordPress 4.4.1,则分页将不起作用。有一个错误将在 WordPress 4.4.2 中修复。有个补丁,google get_query_var( 'page' ) bug trac
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多