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

如何仅在WooCommerce产品分类页显示短描述而非超级菜单

解决WooCommerce产品短描述在超级菜单中意外显示的问题

问题场景

在子主题的functions.php中添加代码,原本只想在产品分类页显示产品短描述,但超级菜单(mega menu)里的产品也随之显示了短描述。不想用CSS隐藏的方式,希望仅在分类页的目标位置输出。

原代码如下:

function add_short_description_in_product_categories() {
  if( is_product_category() ) {
    global $product;

    echo '<div itemprop="description">' . apply_filters( 'woocommerce_short_description', $product->get_short_description() ) . '</div>';
  }
}
add_action('woocommerce_after_shop_loop_item_title', 'add_short_description_in_product_categories', 5);

解决思路与方案

方案1:判断是否为主循环(最通用)

超级菜单中的产品通常来自自定义循环,而非页面的主查询循环。通过is_main_query()条件标签,限制代码仅在主循环中执行:

function add_short_description_in_product_categories() {
    // 仅在产品分类页的主循环中输出短描述
    if( is_product_category() && is_main_query() ) {
        global $product;

        echo '<div itemprop="description">' . apply_filters( 'woocommerce_short_description', $product->get_short_description() ) . '</div>';
    }
}
add_action('woocommerce_after_shop_loop_item_title', 'add_short_description_in_product_categories', 5);

方案2:标记超级菜单渲染状态

如果方案1无效(部分超级菜单可能仍使用主循环),可以通过钩子标记菜单的渲染状态,避免在菜单中执行代码:

// 标记超级菜单开始渲染
function mark_mega_menu_start() {
    global $is_in_mega_menu;
    $is_in_mega_menu = true;
}
add_action('wp_nav_menu_start', 'mark_mega_menu_start');

// 清除超级菜单标记
function mark_mega_menu_end() {
    global $is_in_mega_menu;
    $is_in_mega_menu = false;
}
add_action('wp_nav_menu_end', 'mark_mega_menu_end');

// 修改原函数,排除超级菜单环境
function add_short_description_in_product_categories() {
    global $is_in_mega_menu;
    
    // 不在超级菜单中,且在产品分类页主循环时输出
    if( is_product_category() && is_main_query() && (!isset($is_in_mega_menu) || !$is_in_mega_menu) ) {
        global $product;

        echo '<div itemprop="description">' . apply_filters( 'woocommerce_short_description', $product->get_short_description() ) . '</div>';
    }
}
add_action('woocommerce_after_shop_loop_item_title', 'add_short_description_in_product_categories', 5);

方案3:针对特定超级菜单插件适配

如果使用的是知名超级菜单插件(如Max Mega Menu),可以直接利用插件提供的条件判断:

function add_short_description_in_product_categories() {
    // 排除Max Mega Menu环境
    if ( class_exists('Max_Mega_Menu') && Max_Mega_Menu::is_mega_menu() ) {
        return;
    }
    
    if( is_product_category() && is_main_query() ) {
        global $product;

        echo '<div itemprop="description">' . apply_filters( 'woocommerce_short_description', $product->get_short_description() ) . '</div>';
    }
}
add_action('woocommerce_after_shop_loop_item_title', 'add_short_description_in_product_categories', 5);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:30:13