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

创建WordPress短代码:根据WooCommerce产品类别显示对应导航菜单

修复WooCommerce产品页面分类对应菜单的短代码问题

原代码存在的问题

  • 用错分类获取函数:get_the_category()仅针对WordPress默认文章分类,WooCommerce产品分类是product_cat自定义分类,得用专门的函数获取。
  • 未声明全局$post变量:短代码函数内部直接调用$post->ID会报错,必须先全局化该对象。
  • wp_nav_menu参数错误:menu_id是菜单HTML容器的ID,不是菜单本身的ID,指定菜单应该用menu参数。
  • 短代码直接输出内容:短代码要求返回字符串而非直接输出,否则会导致内容显示位置异常。
  • 逻辑冗余:多个独立if语句可简化为数组映射,还能避免产品属于多分类时重复输出菜单。

修复后的代码

function view_color_menu() {
    // 全局化当前产品的$post对象
    global $post;
    
    // 获取当前产品所属的product_cat分类
    $product_cats = get_the_terms( $post->ID, 'product_cat' );
    
    // 无分类或获取失败时返回空
    if ( ! $product_cats || is_wp_error( $product_cats ) ) {
        return '';
    }
    
    // 建立分类ID与菜单ID的映射表,方便后续维护
    $cat_menu_map = array(
        31 => 16,
        35 => 17,
        42 => 21
    );
    
    $menu_output = '';
    
    foreach ( $product_cats as $cat ) {
        $cat_id = $cat->term_id;
        // 匹配到对应分类时,获取菜单内容
        if ( isset( $cat_menu_map[$cat_id] ) ) {
            ob_start();
            wp_nav_menu( array(
                'menu' => $cat_menu_map[$cat_id], // 指定菜单ID
                'echo' => false // 不直接输出,返回HTML字符串
            ) );
            $menu_output = ob_get_clean();
            break; // 找到匹配后停止循环,避免重复输出
        }
    }
    
    return $menu_output;
}
add_shortcode('get_color_menu', 'view_color_menu');

修改说明

  • 全局化$post:确保能正确获取当前产品的ID。
  • 改用get_the_terms()获取产品分类:适配WooCommerce的自定义分类体系。
  • 数组映射分类与菜单:后续新增或修改对应关系只需调整数组,无需改动循环逻辑。
  • 输出缓冲+echo => false:捕获菜单的HTML内容,转为字符串返回给短代码,避免内容位置错乱。
  • 错误判断:处理产品无分类或分类获取失败的情况,防止页面报错。
  • 匹配后终止循环:避免产品属于多个目标分类时重复输出菜单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:44:53