自定义分类重写规则导致页面或单个帖子出现404错误,具体取决于它是设置为“True”还是“False”

时间:2019-06-20 作者:Bacorrito

我一直在谷歌上搜索、修补和调查/测试设置,但似乎什么都不起作用,所以请容忍我,如果可以,请帮助我。非常感谢!

我通过CPT UI插件和示例的“自定义结构”创建了名为“位置”的自定义分类法。com/%位置%/%postname%/在设置>>永久链接中。

下面是CPT UI插件用于注册新分类法“位置”的代码。

function cptui_register_my_taxes_location() {

    /**
     * Taxonomy: Locations.
     */

    $args = array(
        "public" => true,
        "publicly_queryable" => true,
        "hierarchical" => true,
        "show_ui" => true,
        "show_in_menu" => true,
        "show_in_nav_menus" => true,
        "query_var" => true,
        "rewrite" => array( \'slug\' => \'location\', \'with_front\' => true, ),
        "show_admin_column" => true,
        "show_in_rest" => true,
        "rest_base" => "location",
        "rest_controller_class" => "WP_REST_Terms_Controller",
        "show_in_quick_edit" => true,
        );
    register_taxonomy( "location", array( "post", "blog" ), $args );
}
add_action( \'init\', \'cptui_register_my_taxes_location\' );
所以我的标准帖子有一个URL:sitename。com/“location”/“postname”

但是,在查看我的标准WP页面sitename时。com/联系人,网站名。com/about-us,以及“pages”下的所有其他项目,它返回404错误。

**一些调查结果:**当我改变"rewrite" 若为False,则在标准页面上修复了问题,但在帖子中遇到了404错误,例如sitename。com/“location”/“postname”。什么时候"rewrite" 设置为True,单篇文章没有错误,但在页面中遇到404。

以前有没有人遇到过这个问题,或者有人知道为什么会发生这种情况?

感谢您的帮助!非常感谢各位!

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

正如我在评论中指出的,以下是/%location%/%postname%/ permalink结构:

当分类法的URL重写已启用时,转到如下页面example.com/page-slug 将导致“找不到页面”错误,因为WordPress将请求视为“位置”请求,在该示例中,WordPress将尝试查找slug所在的“位置”(该分类法中的一个术语)page-slug.

当分类法的URL重写被禁用时,转到如下帖子example.com/california/post-slug 将导致相同的“找不到页面”错误,因为WordPress将请求视为子页面请求,WordPress将尝试查找slug所在的页面california/post-slug.

现在你在评论中问道:

另外,我只是好奇,为什么在设置>永久链接中我会切换到%category%/%post-name%, 问题不存在?wp不会也将其视为“类别”请求,并将尝试使用slug查找“类别”page-slug?

答案是,因为WordPressautomatically 打开“详细页面规则”(或从技术上讲,设置WP_Rewrite::$use_verbose_page_rulestrue) 如果permalink结构开始于%category% (或用斜杠—/%category).

这意味着,您可以使您的自定义permalink结构正常工作,就像%category/%post-name% 结构,通过启用详细页面规则。

为什么呢

因为这样,匹配页面请求的URL将首先被检查,如果它实际上是一个页面。

也就是说,对你来说,example.com/page-slug 例如,在检查是否为“位置”/术语之前,先检查是否为页面。

下面是如何启用详细页面规则:

register_taxonomy( "location", array( "post", "blog" ), $args );
$GLOBALS[\'wp_rewrite\']->use_verbose_page_rules = true; // add this
一、 e.呼叫后添加第二行register_taxonomy().

或者这也行:

add_action( \'init\', function(){
    global $wp_rewrite;
    $wp_rewrite->use_verbose_page_rules = true;
}, 1 );
<注意:应用上述代码更改后,请确保刷新永久链接(只需访问永久链接设置页面)

相关推荐

Wordpress Permalinks

我在最近建立的网站上使用Wordpress Sydney主题。如果我将永久链接更改为post选项,我的网页链接将中断。对于不是技术大师的人来说,有没有简单的方法来解决这个问题。任何(详细的)帮助都将不胜感激。