WordPress——如何使随机帖子出现在主页上?

Jer*_*emy 1 php wordpress themes loops

有没有办法让每次有人刷新我的自托管 WordPress 博客的主页时都会显示不同的帖子?

目前我将主页设置为仅显示 1 篇文章,但这只是最新的一篇。我希望每次有人访问我的网站时都会有所不同,从所有帖子的存档中随机提取帖子。

这是我正在使用的主题中当前循环的样子:

<?php
}

// Load main loop
if ( have_posts() ) {

// Start of the Loop
while ( have_posts() ) {
the_post();
?>
Run Code Online (Sandbox Code Playgroud)

有什么办法可以实现这一点吗?

我也不想保留“博客页面最多显示 1 个帖子”设置,因为这会弄乱我的搜索结果(每个结果都在单独的页面上),但我只想在主页循环上显示 1 个帖子。

Mar*_*sov 5

最好的方法是通过挂钩 pre_get_posts 来修改全局查询。

将此代码插入到主题的functions.php中:

add_action('pre_get_posts', 'my_pre_get_posts');
function my_pre_get_posts($query) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set('orderby', 'rand');
    }
}
Run Code Online (Sandbox Code Playgroud)

这将检查您是否在主页上,以及它是否是主要查询(因此只有主要帖子查询是目标),如果是这样,则将设置为orderbyrand因此每次随机帖子都会出现在主页。

请注意,如果您的主页上有分页,这将始终以随机顺序对您的帖子进行排序,因此在这种情况下,您可能需要使用 WP_Query 类或 query_posts() 在循环上构建自定义查询。