个性化阅读
专注于IT技术分析

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

我使用UnderStrap构建了一个自定义的Wordpress主题。我的网站使用存档页面来显示所有类别/子类别的内容。结构就像

父类别>子类别

我用于存档页面的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文件中, 然后转到后端的设置页面并保存永久链接。它应该工作。

赞(0)
未经允许不得转载:srcmini » 如何解决WordPress的嵌套子类别存档页面的URL问题

评论 抢沙发

评论前必须登录!