🎁 惊喜福利!即日起,联系客服 19138171052,即可免费领取价值20元的优惠券,数量有限,先到先得!活动截止至 2025年6月20日,赶快行动吧!

如何去除 WordPress 自定义分类链接中的分类法前缀(以 product_cat 为例)

文章目录

在使用 WordPress 构建电商网站(特别是使用 WooCommerce)或其他自定义内容类型的网站时,我们经常会使用“自定义分类法”(Custom Taxonomy)来组织内容。例如,WooCommerce 默认提供一个 product_cat 分类法,用于为商品添加分类。

这时,商品分类的链接可能会是这样的:

http://example.com/product_cat/products/

但在很多实际项目中,用户或 SEO 优化需求可能要求更简洁、更友好的 URL,例如:

http://example.com/products/

也就是说,我们希望去掉分类链接中的 product_cat 前缀。

本篇文章将从 插件方式代码方式 两种思路出发,讲解如何实现这一目的,并进一步扩展相关知识点。

一、为什么 WordPress 分类链接会带上前缀?

WordPress 的分类法 URL 默认遵循这样一个规则:

/{taxonomy_slug}/{term_slug}/

例如:

  • taxonomy_slug 是分类法的 slug,比如 product_cat
  • term_slug 是具体分类项的 slug,比如 products

这是 WordPress 内部通过 Rewrite API 设置的默认行为,目的是为了防止路由冲突,也便于多层分类结构的管理。

二、方法一:使用插件实现分类链接去前缀(推荐初学者)

✅ 插件推荐:Permalink Manager Lite

使用步骤:

  1. 在后台插件中心搜索“Permalink Manager Lite”,安装并激活。
  2. 进入后台菜单:Tools(工具)→ Permalink Manager
  3. 找到你想修改的分类项(如 products),点击“Edit”。
  4. 修改 URL slug,将其前缀去掉,保存即可。
  5. 进入 设置 → 固定链接,点击“保存更改”以刷新规则。

三、方法二:通过代码去掉分类法前缀(适合开发者)

步骤 1:重新注册分类法,去掉 rewrite 前缀

add_action( 'init', 'custom_rewrite_product_cat', 11 );
function custom_rewrite_product_cat() {
    register_taxonomy( 'product_cat', 'product', array(
        'label'        => 'Product Categories',
        'hierarchical'=> true,
        'rewrite'      => array(
            'slug'         => '', // 去掉 slug
            'with_front'   => false,
            'hierarchical' => true
        ),
    ) );
}

注意:如果这是 WooCommerce 的默认分类法,一定要在 WooCommerce 注册之后重新注册覆盖,使用 priority 11 比较合适。

步骤 2:添加自定义 rewrite 规则

add_action( 'init', 'custom_product_cat_rewrite_rules' );
function custom_product_cat_rewrite_rules() {
    add_rewrite_rule(
        '^([^/]+)/?$',
        'index.php?product_cat=$matches',
        'top'
    );
}

步骤 3:刷新固定链接

进入后台 设置 → 固定链接,点击“保存更改”以刷新 rewrite 规则。

四、可能出现的问题及优化建议

⚠️ 1. URL 冲突风险

当你将分类链接设置为根目录(无前缀)时,可能与页面、文章或其他 URL 冲突,例如:

  • 你有一个页面 /products/,而你也有一个分类 products
  • 你设置了一个自定义文章类型 products,也有相同的分类 slug

建议使用唯一性较高的分类 slug,或者保留一个简短的前缀如 p/,避免冲突。

⚠️ 2. WooCommerce 默认分类法限制

WooCommerce 的 product_cat 是自动注册的,直接注册可能会无效或被覆盖。解决方案是:

  • 使用 remove_action() 移除 WooCommerce 注册的分类
  • 或者使用高优先级重新注册(如上述代码使用 priority = 11

✅ Bonus:为所有自定义分类去前缀的通用代码思路

function remove_taxonomy_base($taxonomy) {
    add_action('init', function() use ($taxonomy) {
        global $wp_rewrite;
        $taxonomy_object = get_taxonomy($taxonomy);

        register_taxonomy($taxonomy, $taxonomy_object->object_type, array_merge((array) $taxonomy_object, array(
            'rewrite' => array(
                'slug' => '',
                'with_front' => false,
                'hierarchical' => true
            )
        )));

        add_rewrite_rule(
            '^([^/]+)/?$',
            'index.php?' . $taxonomy . '=$matches',
            'top'
        );
    }, 11);
}
remove_taxonomy_base('product_cat');

五、总结

方法 适合人群 优点 缺点
使用插件(Permalink Manager) 初学者 快捷方便,界面操作 插件依赖,功能冗余
使用代码 开发者 灵活可控,可自动化 易出错,需手动刷新规则

📌 最后建议

  • 如果你只是偶尔做 SEO 优化,推荐使用插件解决;
  • 如果你是主题或插件开发者,建议用代码方式,并写好冲突检测逻辑;
  • 永远记得刷新固定链接;
  • 若使用 WooCommerce,一定注意 WooCommerce 的加载顺序和注册优先级。

如果你在实际操作中遇到任何问题,欢迎在评论区留言或联系我进一步讨论!

发表回复

相关文章
主题推荐
还没有账号?

会员注册

成为会员,获得更多专属优惠!

验证码: 加载中... =

已有账号?