为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复wordpress嵌套子类别存档页面的url问题

如何修复wordpress嵌套子类别存档页面的url问题

PHP
偶然的你 2021-11-05 16:11:11
我使用 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 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

你必须做一些事情来实现你想要的。


添加自定义重写规则:首先,您必须添加自定义重写规则以检测子类别。默认情况下 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'); 

添加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 文件并转到后端的设置页面并保存永久链接。它应该工作。


查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信