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

如何动态将WooCommerce产品分类添加至菜单?

动态将WooCommerce产品分类添加到菜单的可行方案

下面提供三种不同场景的解决方案,你可以根据需求选择:

方法1:自动同步所有产品分类到指定菜单(代码实现)

适合需要自动更新菜单的场景,新增/修改/删除产品分类时,菜单会同步变化。

将以下代码添加到子主题的functions.php文件,或自定义插件中:

// 自动同步产品分类到指定菜单
function auto_sync_product_cats_to_menu() {
    // 替换为你的菜单slug(可在「外观→菜单」的编辑页面URL中查看)
    $target_menu_slug = 'main-menu';
    $menu_obj = wp_get_nav_menu_object($target_menu_slug);
    
    if (!$menu_obj) return;
    
    $menu_id = $menu_obj->term_id;
    // 获取所有非空产品分类
    $product_cats = get_terms([
        'taxonomy' => 'product_cat',
        'hide_empty' => true,
        'orderby' => 'name',
        'order' => 'ASC'
    ]);
    
    if (empty($product_cats) || is_wp_error($product_cats)) return;
    
    // 收集已存在的菜单项URL,避免重复添加
    $existing_item_urls = [];
    foreach (wp_get_nav_menu_items($menu_id) as $item) {
        $existing_item_urls[] = $item->url;
    }
    
    // 添加新的产品分类到菜单
    foreach ($product_cats as $cat) {
        $cat_url = get_term_link($cat);
        if (!in_array($cat_url, $existing_item_urls)) {
            wp_update_nav_menu_item($menu_id, 0, [
                'menu-item-title' => $cat->name,
                'menu-item-url' => $cat_url,
                'menu-item-status' => 'publish',
                'menu-item-parent-id' => 0, // 如需嵌套子分类,可调整此值
                'menu-item-type' => 'custom'
            ]);
        }
    }
}

// 触发同步的时机:分类增删改、主题初始化
add_action('created_product_cat', 'auto_sync_product_cats_to_menu');
add_action('edited_product_cat', 'auto_sync_product_cats_to_menu');
add_action('after_setup_theme', 'auto_sync_product_cats_to_menu');

// 可选:删除产品分类时同步移除对应菜单项
function auto_remove_cat_from_menu($term_id) {
    $target_menu_slug = 'main-menu';
    $menu_obj = wp_get_nav_menu_object($target_menu_slug);
    if (!$menu_obj) return;
    
    $menu_id = $menu_obj->term_id;
    $cat_url = get_term_link($term_id, 'product_cat');
    
    foreach (wp_get_nav_menu_items($menu_id) as $item) {
        if ($item->url === $cat_url) {
            wp_delete_post($item->ID);
        }
    }
}
add_action('deleted_product_cat', 'auto_remove_cat_from_menu');

注意事项:

  • 替换代码中的main-menu为你的目标菜单slug。
  • 优先使用子主题或自定义插件存放代码,避免主题更新导致代码丢失。
  • 首次添加代码后,刷新网站即可触发同步。

方法2:在后台菜单编辑器添加产品分类选项(代码实现)

适合需要手动选择添加特定分类的场景,让你在「外观→菜单」页面直接勾选产品分类添加,和添加页面/文章的操作逻辑一致。

添加以下代码到子主题functions.php或自定义插件:

// 在菜单编辑器添加产品分类 metabox
function add_product_cats_menu_metabox() {
    add_meta_box(
        'product_cats_nav_menu',
        '产品分类',
        'render_product_cats_menu_metabox',
        'nav-menus',
        'side',
        'default'
    );
}
add_action('admin_init', 'add_product_cats_menu_metabox');

// 渲染产品分类选择框
function render_product_cats_menu_metabox() {
    global $nav_menu_selected_id;
    
    $product_cats = get_terms([
        'taxonomy' => 'product_cat',
        'hide_empty' => false,
        'orderby' => 'name'
    ]);
    
    if (empty($product_cats) || is_wp_error($product_cats)) {
        echo '<p>暂无产品分类</p>';
        return;
    }
    
    $walker = new Walker_Nav_Menu_Checklist();
    wp_terms_checklist(0, [
        'taxonomy' => 'product_cat',
        'selected' => wp_get_nav_menu_items($nav_menu_selected_id, ['fields' => 'ids']),
        'walker' => $walker,
        'checked_ontop' => false
    ]);
    
    // 添加「添加到菜单」按钮
    echo '<p class="button-controls">
        <span class="add-to-menu">
            <input type="submit" ' . disabled($nav_menu_selected_id, 0) . ' class="button-secondary submit-add-to-menu right" value="添加到菜单" name="add-product-cats-menu-item" id="submit-product-cats-nav-menu">
            <span class="spinner"></span>
        </span>
    </p>';
}

// 处理添加产品分类到菜单的请求
function handle_add_product_cats_to_menu() {
    if (!isset($_POST['add-product-cats-menu-item']) || !isset($_POST['menu']) || !isset($_POST['product_cat'])) return;
    
    $menu_id = absint($_POST['menu']);
    foreach (array_map('absint', $_POST['product_cat']) as $cat_id) {
        $cat = get_term($cat_id, 'product_cat');
        if (!$cat || is_wp_error($cat)) continue;
        
        wp_update_nav_menu_item($menu_id, 0, [
            'menu-item-title' => $cat->name,
            'menu-item-url' => get_term_link($cat),
            'menu-item-status' => 'publish',
            'menu-item-object' => 'product_cat',
            'menu-item-object-id' => $cat_id,
            'menu-item-type' => 'taxonomy'
        ]);
    }
    
    wp_safe_redirect(add_query_arg('menu', $menu_id, admin_url('nav-menus.php')));
    exit;
}
add_action('admin_post_add-product-cats-menu-item', 'handle_add_product_cats_to_menu');

使用方式:

  1. 添加代码后,进入「外观→菜单」页面。
  2. 侧边栏会出现「产品分类」选项,展开后勾选需要添加的分类。
  3. 点击「添加到菜单」按钮,即可将分类添加到当前编辑的菜单中,还可调整排序和层级。

方法3:使用免费插件(无需代码)

如果不想编写代码,可使用专门的WooCommerce菜单插件,例如:

  • WooCommerce Product Categories Menu:直接在后台搜索安装,安装后可快速将产品分类添加到菜单,支持层级展示和排序。
  • Category Order and Taxonomy Terms Order:配合默认菜单编辑器,可调整产品分类的排序,同时支持在菜单中添加分类。

操作步骤:

  1. 进入「插件→添加新插件」页面,搜索上述插件并安装激活。
  2. 按照插件的引导说明,在菜单编辑器中选择并添加产品分类即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:11:11