跳到主内容

WordPress 7.2 新增 /random/ 端点:一键跳转到随机文章

100%
WordPress 7.2 新增 /random/ 端点:一键跳转到随机文章

WordPress 7.2 给内容发现加了一个有点「调皮」但很实用的功能:新的 /random/ 端点。访问 你的站点/random/ 会被重定向到一篇随机选中的已发布文章。该功能默认开启,构建在已有的 rewrite 、WP 与 WP_Query API 之上。如果你有正当理由不想启用,或者就是不喜欢,也有过滤器可以整体关闭。作为 7.2 系列的一部分,它和 WordPress 7.2 Beta 4、WordPress 7.2 Beta 1 一起,让这个版本在「内容体验」上多了些巧思。

随机 URL 怎么写

随机基址(base)会前缀到现有的归档路径之前。这个默认基址可翻译、可自定义——在 wp-admin/options-permalink.php 的固定连接设置里新增了一个选项。在默认基址 + 美观固定连接下,会生成如下规则:

  • /random/ 跳转到一篇随机文章;
  • /random/category/release/ 跳转到 release 分类下的一篇随机文章;任何挂在合格文章类型上的、可公开查询的分类法都有类似规则,例如 /random/tag/dev-note/;
  • /random/author/jorbin/ 跳转到该作者的一篇随机文章;
  • /random/{文章类型别名}/ 跳转到某个可随机的自定义文章类型下的一篇随机文章。

哪些文章类型可被随机

register_post_type() 新增 randomable 参数控制是否可被随机。未设置时,默认对 publicly_queryable 且设置了 has_archive 的文章类型为 true。内置类型里,post 可被随机;page 与 attachment 不可。

register_post_type(
    'musicals',
    array(
        'public'      => true,
        'has_archive' => true,
        'randomable'  => false, // 让 musicals 不进入 /random/
    )
);

想让随机「没那么随机」:定制化选择

随机文章由主查询选出。WP::handle_random() 在请求期间给主查询挂了三个回调:pre_get_posts 上的 wp_random_content_pre_get_posts()、posts_orderby 上的 wp_random_content_posts_orderby()、post_limits 上的 wp_random_content_post_limits()——它们把查询限制在合格文章内、按 RAND() 排序、结果限制为 1 行。

因为选择走的是主查询,已有的、用来定制某个归档的 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 过滤器。一个极简的 mu-plugin:add_filter( 'wp_enable_random_content_redirect', '__return_false' ); 即可——这样不会生成随机重写规则、固定连接页面会隐藏随机基址字段、随机查询变量也会被忽略。

更多细节可看 Trac #64498 与 changeset r64402 / r64405 / r65042 / r65250 。

实战:为站点启用并定制随机端点


    步骤一:确认站点已升级到 WordPress 7.2(Beta 或正式版均可体验该端点)。
    步骤二:进入 设置 → 固定连接,找到随机基址选项,可把默认的 random 改成你喜欢的词(支持翻译)。
    步骤三:如需排除某些分类,用 wp_is_random_content_query() 配合 pre_get_posts 设置 category__not_in 。
    步骤四:如需关闭整个功能,写个 mu-plugin 调用 add_filter(‘wp_enable_random_content_redirect’, ‘__return_false’)。
    步骤五:在前台访问 /random/ 与 /random/category/你的分类/ 验证重定向是否生效。

常见问题


默认开启,但它只新增重写规则与端点,不会改动你已有的文章固定链接;访问 /random/ 会重定向到一篇随机选中的已发布文章。

用 wp_is_random_content_query() 在 pre_get_posts 里判断,再 set category__not_in 等参数;或把自定义文章类型的 randomable 参数设为 false,直接排除该类型。

能。在 mu-plugin 里调用 add_filter(‘wp_enable_random_content_redirect’, ‘__return_false’) 即可整体关闭,对应的重写规则与固定连接设置项都会一并隐藏。
「进阶:底层是怎么实现的」

随机选择由 WP::handle_random() 完成,向主查询临时挂载 wp_random_content_pre_get_posts / wp_random_content_posts_orderby / wp_random_content_post_limits 三个回调,分别负责限制合格文章、按 RAND() 排序、把结果限制为单行。由于完全走主查询,所有既有的 pre_get_posts 逻辑都会自然复用,这也正是「用 wp_is_random_content_query() 判断」能精准收窄随机范围的原因。详见 Trac #64498 与对应 changeset 。
这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

1038文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示