我一直在谷歌上搜索、修补和调查/测试设置,但似乎什么都不起作用,所以请容忍我,如果可以,请帮助我。非常感谢!
我通过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。
以前有没有人遇到过这个问题,或者有人知道为什么会发生这种情况?
感谢您的帮助!非常感谢各位!
最合适的回答,由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_rules
到true
) 如果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 );
<注意:应用上述代码更改后,请确保刷新永久链接(只需访问永久链接设置页面)