添加_重写_规则()未存储(我认为)

时间:2019-01-24 作者:BasvdM

我正在开发一个插件,它将设置一个新的自定义帖子类型(锦标赛),并使用一个使用WP Cron调用的API为这个CPT创建帖子。CPT有一个名为season的自定义字段,我想在permalink中使用它。

我已将permalink设置如下:

http://local.wordpress.test/tournament/2019/my-tournament-name

锦标赛是post类型
2019年是赛季
我的锦标赛名称是post\\u名称

我使用以下代码创建了permalink:

function rat_post_type_link( $link, $post, $leavename, $sample ) {

    if ( $post->post_type == \'tournament\' ){
        $season = get_post_meta( $post->ID, \'rat-tournament-season\', true);
        return home_url( \'tournament/\' . $season . \'/\' . $post->post_name );
    } else {
        return $link;
    }
 }
add_filter(\'post_type_link\', \'rat_post_type_link\', 10, 4);
然后我添加了一个重写规则来显示特定的帖子

function rat_custom_post_type_rewrite_rules() {
    add_rewrite_rule(
        \'tournament/[0-9]{4}/([^/]+)?$\',
        \'?post_type=tournament&page_name=$matches[1]\',
        \'top\');
}
add_action(\'init\', \'rat_custom_post_type_rewrite_rules\');
我正在使用flush_rewrite_rules() 在我的插件激活器中,可以确认是否调用了它。我已安装Rewrite Analyzer 调试重写规则。

我测试并确认链接http://local.wordpress.test/?tournament=my-tournament-name 正在工作。

我已经在rat_custom_post_type_rewrite_rules() 函数,并在调试中显示。log,这样我就知道函数被调用了。

我的问题是在重写分析器显示的列表中找不到重写规则。关于为什么会这样,有什么建议吗?

附加说明:我没有使用add_rewrite_tag() 因为我在querystring上不需要它

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

因为内部重写必须指向index.php. 这不是主题的索引。php文件,它是WordPress引导文件的主要根。这就是WP如何检测应该是内部规则(用PHP解析)和外部规则(添加到htaccess)的内容。

另一个问题是page_name 不是有效的查询变量。对于自定义帖子类型,可以将其简化为:

\'index.php?tournament=$matches[1]\'

相关推荐