跳到正文
原文
Make WordPress Core(核心开发)· Aaron Jorbin·· 3 小时前编辑评分57

WordPress 7.2 将新增 /random/ 端点,随机跳转到已发布文章

Your Content Is Going To Get More Random!

编辑导读

WordPress 7.2 将通过 /random/ 端点,把访问者随机重定向到一篇已发布文章,该功能默认启用并基于现有 rewrite、WP 和 WP_Query API 实现。

也许关键并不在于你的内容本身,而是随着 WordPress 7.2 引入 /random/ 端点,用户将能够发现这些内容。对 example.com/random/ 发起请求会将终端用户引导至一篇随机选择的已发布文章。该功能默认启用,并基于现有的重写、WP 和 WP_Query API 构建。如果你有充分理由不想在网站上支持此功能,或者你只是讨厌乐趣,可以用一个过滤器禁用整个功能。

随机 URL

随机基础路径会作为前缀添加到现有的归档路径前。这个默认基础路径可以翻译,也可以通过 wp-admin/options-permalink.php 上的新选项进行自定义。使用默认基础路径和美观固定链接时,将生成以下规则:

  • /random/ 重定向到一篇随机文章。
  • /random/category/release/ 重定向到发布分类中的一篇随机文章。任何附加到符合条件文章类型的、可通过公共查询的分类法也会获得类似规则,例如 /random/tag/dev-note/。
  • /random/author/jorbin/ 重定向到该作者的一篇随机文章。
  • /random/{post-type-slug}/ 重定向到可随机的自定义文章类型的一篇随机文章。

可随机的文章类型

register_post_type() 上新增的 randomable 参数用于控制符合条件的文章类型。未设置时,对于属于 publicly_queryable 且设置了 has_archive 的文章类型,默认值为 true。在内置类型中,post 是 randomable;page 和 attachment 不是。

register_post_type(
        'musicals',
        array(
                'public'      => true,
                'has_archive' => true,
                'randomable'  => false, // Keep musicals out of /random/.
        )
);

进行自定义,让随机程度稍微降低一点

随机文章由主查询选出。WP::handle_random() 会在请求期间添加三个回调来运行主查询:wp_random_content_pre_get_posts() 作用于 pre_get_posts,wp_random_content_posts_orderby() 作用于 posts_orderby,wp_random_content_post_limits() 作用于 post_limits。它们共同将查询限制为符合条件的文章,按 RAND() 排序,并将结果限制为一行。

由于选择过程通过主查询进行,现有用于自定义归档的 pre_get_posts 回调同样会应用于其随机重定向。如果只想让随机请求改变选择结果,请使用 wp_is_random_content_query() 检查查询:

add_action(
        'pre_get_posts',
        static function ( WP_Query $query ) {
                if ( wp_is_random_content_query( $query ) ) {
                        $query->set( 'category__not_in', array( 525600 ) );
                }
        }
);

不想随机?没问题

如果你想在网站上禁用随机重定向,可以使用 wp_enable_random_content_redirect 过滤器。一个包含 add_filter( 'wp_enable_random_content_redirect', '__return_false' ); 的简单 mu-plugin 将意味着不会生成随机重写规则、固定链接页面上的随机基础路径字段会被隐藏,并且随机查询变量会被忽略。

有关更多详细信息,请参阅 #64498 以及变更集 r64402、r64405、r65042 和 r65250。

感谢 @peterwilsoncc、@annezazu、@jeffpaul 进行评审。

#7-2、#dev-notes、#dev-notes-7-2

来源:Make WordPress Core(核心开发) · https://make.wordpress.org/core/2026/11/05/your-content-is-going-to-get-more-random/

部分链接为推广/关联链接。