【问题标题】:Wordpress, display more posts on a subpagesWordpress,在子页面上显示更多帖子
【发布时间】:2016-04-10 01:16:25
【问题描述】:

我想在我的子页面上显示更多帖子

我在functions.php中的代码

function number_of_posts($query)
{
    if($query->is_main_query())
    {
       $paged = $query->get( 'paged' );
       if ( ! $paged || $paged < 2 ) 
       {

       } 
       else 
       {
           $query->set('posts_per_page', 24);
       }
    }
    return $query;
}
add_filter('pre_get_posts', 'number_of_posts');

问题: 在第一页上,我得到了错误的分页。它显示了到子页面 4 的链接,但子页面 4 没有退出。

我想我必须添加这样的东西

....
if ( ! $paged || $paged < 2 ) 
{

// show only 10 posts but calculate the pagination with 18 posts

} 
.....

这可能吗?

【问题讨论】:

  • 好吧,我想您需要实际修改分页代码而不是这个代码,因为分页将根据固定 number_of_posts 计算页面,因此您正面临此错误
  • @Anandthakkar 分页处理主要查询的$max_num_pages 属性,该属性是通过将$found_posts 除以每页的帖子数量来计算的。您需要做的就是使用found_posts 过滤器更改$found_posts 属性
  • 你能说得更具体些吗?“子页面”是什么意思?

标签: php wordpress pagination


【解决方案1】:

这是我不久前在 WPSE 上发布的帖子的修改版本

来自WPSE

第 1 步

我们需要从后端获取posts_per_page 选项集(应该设置为10),并设置我们将要使用的offset。那将是14,因为您需要在第一页发布 24 篇文章,在其余部分发布 24 篇文章。

如果您不想更改 posts_per_page 选项,则只需将变量 $ppg 设置为 10

$ppg = get_option( 'posts_per_page' );
//$ppg = 10;
$offset = 14;

第 2 步

在第一页,您需要将offset 减去posts_per_page

$query->set( 'posts_per_page', $ppp - $offset );

第 3 步

您必须将您的offset 应用于所有后续页面,否则您将在下一页上重复该页面的最后一个帖子

$offset = ( ( $query->query_vars['paged']-1 ) * $ppp ) - $offset;
$query->set( 'posts_per_page', $ppp );
$query->set( 'offset', $offset ); 

第 4 步

最后,您需要将偏移量添加到found_posts,否则您的分页将不会显示最后一页

add_filter( 'found_posts', function ( $found_posts, $query ) 
{
    $offset = 14;

    if( $query->is_home() && $query->is_main_query() ) {
        $found_posts = $found_posts + $offset;
    }
    return $found_posts;
}, 10, 2 );

齐聚一堂

这就是你的完整查询应该进入functions.php的样子

add_action('pre_get_posts', function ( $query ) 
{
    if ( !is_admin() && $query->is_main_query() ) {
        $ppp    = get_option( 'posts_per_page' );
        //$ppp  = 10;
        $offset = 14;

        if ( !$query->is_paged() ) {
            $query->set( 'posts_per_page', $ppp - $offset );
        } else {
            $offset = ( ( $query->query_vars['paged']-1 ) * $ppp ) - $offset;
            $query->set( 'posts_per_page', $ppp );
            $query->set( 'offset', $offset );
        }
    }
});

add_filter( 'found_posts', function ( $found_posts, $query ) 
{
    $offset = 14;

    if( $query->is_main_query() ) {
        $found_posts = $found_posts + $offset;
    }
    return $found_posts;
}, 10, 2 );

【讨论】:

    【解决方案2】:
    <?php 
    function number_of_posts($query)
    {
        if($query->is_main_query())
        {
           $paged = $query->get( 'paged' );
    
           //if page is less than 2 get 10 post on that page (that is on page 1)
           if ( ! $paged || $paged < 2 ) 
           {
                $query->set('posts_per_page', 10);
           } 
           else 
           {
               $query->set('posts_per_page', 24);
           }
        }
        return $query;
    }
    add_filter('pre_get_posts', 'number_of_posts');?>
    

    并在您为 Wp_Query 指定所有参数的主查询中。请加$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多