我如何知道是否应用了重写的规则?

时间:2018-10-27 作者:John Smith

我使用重写规则定义了自定义帖子类型:

    register_post_type(\'balls\', [
        \'labels\' => [
            \'name\' => \'balls\',
            \'singular_name\' => \'balls\',
            \'add_new\' => \'new\',
            \'add_new_item\' => \'new\',
            \'parent_item_colon\' => \'\'
        ],
        \'taxonomies\' => [\'category\'],
        \'menu_position\' => 4,
        \'public\' => true,
        \'query_var\' => true,
        \'capability_type\' => \'post\',
        \'supports\' => [\'title\', \'editor\', \'thumbnail\'],
        \'rewrite\' => [
            \'slug\' => \'ballinfo\'
        ]
    ]);
现在,我如何知道是否使用/ballinfo 还是没有?如何知道是否匹配并使用了重写规则?

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

I\'m not very sure of what you\'re trying to achieve, but I hope this answer can help. :)

<根据自定义帖子类型的注册方式,WordPress将为CPT的单个帖子页面创建如下自定义重写规则:

RegEx: ballinfo/([^/]+)(?:/([0-9]+))?/?$
Query: index.php?balls=$matches[1]&page=$matches[2]
对于以下问题:

我如何知道某个站点是否调用了/ballinfo 还是不

balls 如果访问了帖子,则URL将/ballinfo/ 如中所示example.com/ballinfo/an-example-balls-post.

现在以编程方式检查URL是否包含/ballinfo/, 您可以检查$request 全球的财产WP 类实例以ballinfo/ 像这样:

global $wp;
if ( preg_match( \'#^ballinfo/#\', $wp->request ) ) {
    echo \'Site was called with the /ballinfo<br>\';
}
echo \'$wp->request is \' . $wp->request . \'<br>\';
对于以下问题:

如何知道是否匹配并使用了重写规则?

您可以将规则(RegEx)与$matched_rule 全球的财产WP 类实例。

例如,对于单个balls 如果规则使用正则表达式模式(如本答案第#1点所示),请尝试以下操作:

global $wp;
if ( \'ballinfo/([^/]+)(?:/([0-9]+))?/?$\' === $wp->matched_rule ) {
    echo \'Yay, my rewrite rule was matched!<br>\';
} else {
    echo \'Not matched. $wp->matched_rule is \' . $wp->matched_rule . \'<br>\';
}
您可能已经知道这一点,但如果您只是想检查请求的URL是否用于CPT帖子/存档等,您可以使用is_singular(), is_post_type_archive(), 和其他合适的WordPressconditional functions/tags.

结束

相关推荐