是否在“博客页面最多显示”X个帖子中包含粘性帖子?

时间:2014-05-29 作者:ameraz

我使用的是默认循环代码。

我已将“设置”>“阅读”中的“博客页面最多显示”选项设置为11.

在我的主页(设置为显示最新帖子)中,每当我将帖子标记为“粘性”时,就会将其添加到原始的“博客页面最多显示”计数中,因此主页现在显示12 发布而不是11.

我想避免这样!

我想保持11 帖子总数,在上面的例子中,是1个粘性帖子加上10个普通帖子。这可能吗?

我已经用默认主题和关闭的所有插件对此进行了测试。

EDIT

到目前为止,我发现可以使用pre_get_posts.

然后,我打算只查询粘性帖子,然后将该查询与主查询合并。

我找到了这个片段,但在将其转换为pre_get_posts 工作功能。

$newsposts = array();

$sticky = get_option(\'sticky_posts\');
$args = array(
    \'post__in\' => $sticky,
    \'posts_per_page\' => $num
);
$sticky_posts = get_posts($args);

if( count($sticky_posts) < $num ) {
    $extras = $num - count($sticky_posts);
    $args= array(
    \'post__not_in\' => $sticky,
    \'posts_per_page\' => $extras
);
$extra_posts = get_posts($args);
$newsposts = array_merge($sticky_posts, $extra_posts);
}
else $newsposts = $sticky_posts;

1 个回复
最合适的回答,由SO网友:Ashok Kumar Nath 整理而成

您可以使用以下代码:

add_action( \'pre_get_posts\', \'exclude_sticky\' );

function exclude_sticky( $query ) {
    if ($query->get(\'paged\') == 0) {
        $sticky = get_option(\'sticky_posts\');
        $num = get_option(\'posts_per_page\');
        $extras = $num - count($sticky);
        $query->set( \'posts_per_page\', $extras );
    }

}

结束

相关推荐