在“阅读设置”中,可以设置显示的帖子数量,该数量会影响在所有上下文中显示的帖子数量。我想在首页上显示一定数量的帖子,而在归档,搜索结果等页面上显示不同数量的帖子。



我意识到我可以通过编辑主题文件并在其中更改查询参数来做到这一点,但我希望可以更轻松地访问一个简单的设置页面。很久以前,我遇到了一个做到这一点的插件,但现在找不到它。

有人知道做这个的插件,甚至是我可以放入functions.php来完成相同功能的函数吗?

评论

您可能会想到@ chip-bennett的“每页不同帖子”插件:chipbennett.net/plugins/cbnet-different-posts-per-page,它以图形方式完成您想要的操作。

#1 楼

我相信在插件中执行此操作的最佳方法是遇到pre_get_posts操作钩时运行以下示例函数。 $wp_query对象可用,这意味着条件标签可用,但是在WordPress获得帖子之前,这意味着您要在运行第一个查询之前更改查询变量,而不是像在第一个查询中使用query_posts()那样添加第二个查询主题文件。

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');


评论


我在自己的网站上使用此功能。可以轻松将其剪切并粘贴到这里。

–kevtrout
2010年8月12日在19:11

#2 楼

您可以使用query_posts进行自定义循环,并按is_home,is_archive等指定帖子数。

只需一个简单的if语句以及query_posts

评论


是的,我在问题中提到了这一点。我正在寻找一种实现方法,因此无需编辑多个主题文件即可更改设置。谢谢。

–道格
2010年8月12日在18:21

这样做是个坏主意。 WordPress已经运行查询。如果将query_posts放在主题中,则将忽略原始查询,并进行另一个冗余的查询。

– KrzysiekDróżdż♦
2013年12月11日20:45在

#3 楼

除了这个问题。如果像这样将新页面添加到index.php中,是否有人知道如何确定此函数函数custom_posts_per_page($ query)的post_per_page:

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>


#4 楼


我意识到我可以通过编辑主题文件并更改其中的查询参数来做到这一点,但我希望可以更轻松地访问简单的设置页面。


在出于完整性的考虑,我发现query_posts$query_string串联组合可以很好地工作。

我将这段代码放在index.php中(我的主题没有category.php)...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>


当然,我们在这里要做的是修改循环的内部查询字符串,覆盖每页默认的帖子数。

用于在我显示完整帖子的主页上提供较小的帖子列表,而在我仅显示帖子摘要的其他位置(类别,按日期等)提供更大的帖子列表。

但是,请注意,与接受的答案不同,这将运行两次查询,因此它不是一个很好的解决方案。

评论


杰夫,我一直在寻找一个集中的位置来控制在不同情况下返回的帖子数量。仅当您使用index.php处理所有上下文时(大多数主题不这样做),您的答案才能做到。除了增加对数据库的调用(这会影响性能)之外,您的技术还可以以意外的方式更改对条件标签(例如is_home()或is_front_page)的响应。最后,如果要在页面上添加辅助循环,则不应使用query_posts,而应使用“ new WP_Query”(或get_posts)。

–道格
2011年7月7日在19:26



@doug这不是二级循环,它覆盖了主循环-是的,这个特定的主题使用index.php来呈现所有内容,这非常简单。在这里,我觉得这是一个更合理的答案,但是如果您希望我可以提出自己的问题,并在某种程度上冒犯您,请回答。

–杰夫·阿特伍德
2011年7月7日在21:51

实际上,我误读了您的倒数第二段,并认为帖子的“较大”和“较小”列表在同一页上,因此上面的我的最后一句话是不相关的。是的,如果您愿意的话,将所有代码放入index.php是完全合法的。如果是这种情况,那么您的方法便是一种快速简便的方法,因此,在20小时锁定结束后,我将删除我的反对投票。即使这样,由于已经提到的原因(由您,我和WP Codex提出),发送新查询而不是像kevtrout的回答那样修改原始查询还是不理想的。

–道格
2011年7月8日在16:24