You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce分类URL自定义:保留Slug同时显示名称

解决方案:保留分类Slug的同时用名称生成友好URL

一、自定义代码实现

这种场景下自定义代码是最灵活的,下面是完整的代码片段,你可以放到主题的functions.php或者自定义插件里:

1. 生成基于分类名称的友好URL

过滤产品分类的永久链接,把原slug替换成处理后的名称(转小写、空格换连字符):

add_filter('term_link', 'wc_product_cat_permalink_use_name', 10, 3);
function wc_product_cat_permalink_use_name($permalink, $term, $taxonomy) {
    if ($taxonomy !== 'product_cat') return $permalink;
    
    // 处理分类名称:转小写、替换空格为连字符、移除特殊字符
    $name_slug = sanitize_title($term->name);
    // 替换原slug为处理后的名称
    $permalink = str_replace($term->slug, $name_slug, $permalink);
    
    return $permalink;
}

2. 添加重写规则,让WordPress识别新URL

添加重写规则,把请求的名称映射到对应的分类slug:

add_action('init', 'wc_product_cat_name_rewrite_rule');
function wc_product_cat_name_rewrite_rule() {
    // 匹配一级分类URL结构
    add_rewrite_rule(
        'shop/([^/]+)/?$',
        'index.php?product_cat=$matches[1]',
        'top'
    );
    // 匹配二级子分类URL结构
    add_rewrite_rule(
        'shop/([^/]+)/([^/]+)/?$',
        'index.php?product_cat=$matches[2]',
        'top'
    );
}

3. 修正分类查询,通过名称找到对应slug的分类

拦截查询,把请求的名称转成对应分类的slug:

add_action('pre_get_posts', 'wc_product_cat_query_by_name');
function wc_product_cat_query_by_name($query) {
    if (!is_admin() && $query->is_main_query() && $query->is_tax('product_cat')) {
        $cat_name = $query->get('product_cat');
        if ($cat_name) {
            // 通过处理后的名称匹配分类
            $terms = get_terms(array(
                'taxonomy' => 'product_cat',
                'meta_query' => array(
                    array(
                        'key' => 'name',
                        'value' => sanitize_title($cat_name),
                        'compare' => 'LIKE'
                    )
                ),
                'hide_empty' => false
            ));
            if (!empty($terms)) {
                $query->set('product_cat', $terms[0]->slug);
            }
        }
    }
}

注意事项

  • 代码添加后,必须去设置→固定链接页面点击「保存更改」刷新重写规则,否则新URL不会生效。
  • 若有重名分类,sanitize_title会自动添加后缀(比如两个「红色」会生成red和red-2),避免URL冲突。
  • 可添加301重定向,把旧slug URL转到新名称URL,保护SEO权重:
add_action('template_redirect', 'wc_product_cat_redirect_old_slug');
function wc_product_cat_redirect_old_slug() {
    if (is_tax('product_cat')) {
        $term = get_queried_object();
        $current_url = home_url(add_query_arg(array(), $wp->request));
        $new_url = get_term_link($term);
        if ($current_url !== $new_url) {
            wp_redirect($new_url, 301);
            exit;
        }
    }
}

二、插件推荐

如果不想写代码,可尝试以下插件:

  • Permalink Manager Lite:支持自定义分类永久链接结构,在插件设置→Taxonomies→Product Categories→Permalink Structure中,选择自定义结构并使用%term_name%替代%term_slug%即可。
  • Custom Permalinks:适合分类数量少的场景,直接在分类编辑页面的「Custom Permalink」字段,手动输入用名称生成的URL路径。

关键提醒

  • 无论用代码还是插件,分类的slug字段都不会被修改,完全不影响你和外部管理软件的同步逻辑。
  • 测试时要验证所有分类(含子分类)的URL访问是否正常,以及产品页面的分类跳转链接是否指向新的名称URL。

内容的提问来源于stack exchange,提问作者user3799115

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:33:19