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

WooCommerce产品标签显示变体维度致其他标签无内容

解决WooCommerce产品标签替换后其他标签消失的问题

我来帮你搞定这个问题!你遇到的其他标签消失+原描述内容丢失的问题,核心原因有两个:一是你的代码完全替换了描述标签的回调函数,却没有保留原本的产品描述内容;二是没有处理非可变产品的情况,当产品不是变体类型时,$available_variations[0]会触发报错,直接中断页面渲染,导致后续的其他标签无法加载。

下面是修复后的完整代码,我会标注关键修改点:

// 修改产品描述标签的回调逻辑
add_filter( 'woocommerce_product_tabs', 'woo_custom_description_tab', 98 );
function woo_custom_description_tab( $tabs ) {
    // 先保存原描述标签的回调函数,避免完全覆盖原有内容
    $original_description_callback = $tabs['description']['callback'];
    
    // 用匿名函数重写回调:先输出原描述,再追加尺寸信息
    $tabs['description']['callback'] = function() use ( $original_description_callback ) {
        // 调用原回调输出产品默认描述
        call_user_func( $original_description_callback );
        
        // 追加我们的变体尺寸信息
        woo_custom_variation_dimensions();
    };

    return $tabs;
}

// 单独封装变体尺寸输出逻辑
function woo_custom_variation_dimensions() {
    global $product;
    
    // 仅针对可变产品执行逻辑,避免非变体产品报错
    if ( ! $product->is_type( 'variable' ) ) {
        return;
    }
    
    $available_variations = $product->get_available_variations();
    
    // 检查是否存在可用变体
    if ( empty( $available_variations ) ) {
        return;
    }
    
    // 获取第一个变体的信息
    $variation_id = $available_variations[0]['variation_id'];
    $variable_product = new WC_Product_Variation( $variation_id );
    
    // 提取尺寸数据,避免空值输出
    $length = $variable_product->get_length();
    $width = $variable_product->get_width();
    $height = $variable_product->get_height();
    $dimension_unit = get_option( 'woocommerce_dimension_unit' );
    
    // 只有存在尺寸数据时才输出
    if ( empty( $length ) && empty( $width ) && empty( $height ) ) {
        return;
    }
    
    // 结构化输出尺寸信息,注意闭合HTML标签
    echo '<div class="product-variation-dimensions">';
    echo '<strong>Product Box Dimensions</strong>';
    
    if ( ! empty( $length ) ) {
        echo '<div class="dimensions-item">Length: ' . esc_html( $length ) . ' ' . esc_html( $dimension_unit ) . '</div>';
    }
    if ( ! empty( $width ) ) {
        echo '<div class="dimensions-item">Width: ' . esc_html( $width ) . ' ' . esc_html( $dimension_unit ) . '</div>';
    }
    if ( ! empty( $height ) ) {
        echo '<div class="dimensions-item">Height: ' . esc_html( $height ) . ' ' . esc_html( $dimension_unit ) . '</div>';
    }
    
    echo '</div>';
}

关键修改说明:

  1. 保留原描述内容:不再直接替换回调函数,而是先调用原回调输出产品默认描述,再追加尺寸信息,避免原描述丢失。
  2. 增加类型判断:仅对可变产品执行尺寸输出逻辑,非变体产品直接跳过,避免报错中断页面渲染。
  3. 安全输出处理:使用esc_html()转义输出内容,避免XSS安全风险。
  4. 完善HTML结构:闭合所有标签,避免因布局混乱导致的页面渲染异常(这也是其他标签消失的潜在原因)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:16:37