如何动态将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');
使用方式:
- 添加代码后,进入「外观→菜单」页面。
- 侧边栏会出现「产品分类」选项,展开后勾选需要添加的分类。
- 点击「添加到菜单」按钮,即可将分类添加到当前编辑的菜单中,还可调整排序和层级。
方法3:使用免费插件(无需代码)
如果不想编写代码,可使用专门的WooCommerce菜单插件,例如:
- WooCommerce Product Categories Menu:直接在后台搜索安装,安装后可快速将产品分类添加到菜单,支持层级展示和排序。
- Category Order and Taxonomy Terms Order:配合默认菜单编辑器,可调整产品分类的排序,同时支持在菜单中添加分类。
操作步骤:
- 进入「插件→添加新插件」页面,搜索上述插件并安装激活。
- 按照插件的引导说明,在菜单编辑器中选择并添加产品分类即可。
内容的提问来源于stack exchange,提问作者Farhan
相关产品推荐
相关产品推荐

