如何解决WordPress的嵌套子类别存档页面的URL问题

我使用UnderStrap构建了一个自定义的Wordpress主题。我的网站使用存档页面来显示所有类别/子类别的内容。结构就像
【如何解决WordPress的嵌套子类别存档页面的URL问题】父类别> 子类别
我用于存档页面的URL结构是www.example.com/category/parent-category/subcategory。这工作正常, 但是现在的问题是, 如果我使用以下URL, 它仍在加载子类别内容
www.example.com/category/subcategory www.example.com/category/any-string/subcategory
有什么办法可以停止它并开始显示404错误?
我已经尝试过” redirect_canonical” 过滤器, 但是它根本没有帮助。
#1你必须做几件事才能实现你想要的。

  1. 添加自定义重写规则:首先, 你必须添加自定义重写规则以检测子类别。 WordPress默认情况下不会那样做。
function theme_custom_rewrites() { add_rewrite_tag("%parent_category_name%", "([a-z0-9\-_]+)"); add_rewrite_rule('^category/([a-z0-9\-_]+)/([a-z0-9\-_]+)/?', 'index.php?parent_category_name=$matches[1]& category_name=$matches[2]', 'top'); add_rewrite_rule('^category/([a-z0-9\-_]+)/?', 'index.php?category_name=$matches[1]', 'top'); }add_action('init', 'theme_custom_rewrites');

  1. 添加404状态和模板加载代码:
function load_404_page_for_subcategory_pages() { global $wp_query; $category_slug = get_query_var('category_name'); $parent_category_slug = get_query_var('parent_category_name'); $parent_category = get_category_by_slug($parent_category_slug); $category = get_category_by_slug($category_slug); if( !$parent_category & & $category-> parent != 0) { $wp_query-> set_404(); status_header( 404 ); get_template_part( 404 ); exit(); } }add_action('wp', 'load_404_page_for_subcategory_pages');

将两个钩子都添加到functions.php文件中, 然后转到后端的设置页面并保存永久链接。它应该工作。

    推荐阅读