WordPress在参数中发生自定义重写规则冲突时返回404

时间:2013-06-07 作者:reikyoushin

我一直在遵循answer here 它创造了奇迹。

但我的问题是在这方面,

在原件上:

add_filter(\'rewrite_rules_array\', \'mmp_rewrite_rules\');
function mmp_rewrite_rules($rules) {
    $newRules  = array();
    $newRules[\'custom-post-type-base/(.+)/(.+)/(.+)/(.+)/?$\'] = \'index.php?custom_post_type_name=$matches[4]\'; // my custom structure will always have the post name as the 5th uri segment
    $newRules[\'custom-post-type-base/(.+)/?$\']                = \'index.php?taxonomy_name=$matches[1]\'; 

    return array_merge($newRules, $rules);
} 
我的版本:

add_filter(\'rewrite_rules_array\', \'mmp_rewrite_rules\');
function mmp_rewrite_rules($rules) {
    $newRules  = array();
    $newRules[\'custom-post-type-base/(.+)/(.+)/(.+)/?$\'] = \'index.php?custom_post_type=$matches[3]\'; 
    $newRules[\'custom-post-type-base/(.+)/?$\']           = \'index.php?custom_taxonomy=$matches[1]\';

    return array_merge($newRules, $rules);
} 
由于我的分类法有两个级别,它无法识别第二个参数(custom-post-type-base/(.+)/[here]/) 是自定义帖子或自定义分类法。。它在自定义分类法上正确返回,但在自定义帖子类型上返回404,帖子类型在父分类法上分类。

请参见示例URL:

"/custom-post-type-base/taxonomy-parent/taxonomy-child/single-custom-post-type/"
/*works as single custom post*/

"/custom-post-type-base/taxonomy-parent/taxonomy-child/"
/*works as custom taxonomy page*/

"/custom-post-type-base/taxonomy-parent/"
/*works as custom taxonomy page too*/

"/custom-post-type-base/taxonomy-parent/single-custom-post-type/"
/*returns a 404*/

1 个回复
SO网友:Tom J Nowell

您有:

上面的列表中没有处理位于第5部分的帖子的重写规则,因此您会得到404。

如果我们采用此重写规则:

$newRules[\'basename/(.+)/(.+)/(.+)/(.+)/?$\'] = \'index.php?custom_post_type_name=$matches[4]\'; // my custom structure will always have the post name as the 5th uri segment
并使用一些常识对其进行轻微修改,即:

基本名称/(.+)/(.+)/(.+)/(.+)/?$ ....

custom\\u post\\u type\\u name=$个匹配项[4]

//我的自定义结构将始终以帖子名作为5 th uri段

基本名称/(.+)/(.+)/(.+)/?$ ....

custom\\u post\\u type\\u name=$个匹配项[3]

//我的自定义结构将始终以帖子名作为4 th uri段

基本名称/(.+)/(.+)/?$ ....

custom\\u post\\u type\\u name=$个匹配项[2]

//我的自定义结构将始终以帖子名作为3 th uri段

在现有规则之前按升序排列这些规则,并根据需要重复多次

结束

相关推荐

GET_SHORTCODE_regex()只与第一个短码匹配

法典中有an example 使用get\\u shortcode\\u regex()检查是否在给定页面上调用了短代码:$pattern = get_shortcode_regex(); preg_match(\'/\'.$pattern.\'/s\', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == \'YOURSHORTCODE\') { /