【问题标题】:how to fix url issue of wordpress nested subcategory archive pages如何修复 wordpress 嵌套子类别存档页面的 url 问题
【发布时间】:2019-12-09 07:51:19
【问题描述】:

我使用 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”过滤器,但它根本没有帮助。

【问题讨论】:

    标签: php wordpress wordpress-theming


    【解决方案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 文件中,然后转到后端的设置页面并保存永久链接。它应该可以工作。

    【讨论】:

    • 感谢您的回答。部分它做了我想要的,但现在它给我带来了另一个问题。现在当我去 www.example.com/category/parent-category/subcategory 时,它给了我父类别的 id 而不是子类别的 id。
    • @AqeelAhmad 很抱歉。我没有完全检查代码。我已对代码进行了更改以解决该问题。你能检查它是否适合你吗?
    • 谢谢,它成功了。你知道我为什么会遇到这个问题吗?是 WordPress 中的错误还是我做错了什么?你之前遇到过这个问题吗?
    • 这不是 WordPress 中的错误。这就是 WordPress 的工作方式。默认情况下,WordPress 会尽量加载页面而不是显示 404 错误。
    • 没关系,我将 load_404_page_for_subcategory_pages 函数的代码包装在“if(!is_admin())”中,它对我有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    相关资源
    最近更新 更多