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

WooCommerce存档页显示在售变体属性时短名称问题求助

修复WooCommerce商店页变体属性显示短名称问题

问题说明

在WooCommerce商店页面显示有库存的产品变体属性时,现有代码可实现功能,但显示的是属性短名称(slug)而非友好的正式名称,视觉效果不佳。

原代码问题点

遍历变体属性时直接使用$attr_value获取的是属性的短名称,未转换为用户可见的正式名称。

修改后的代码

add_action( 'woocommerce_after_shop_loop_item', 'display_loop_item_stock_notice', 90 );
function display_loop_item_stock_notice() {
    global $product, $wpdb;

    $is_in_stock = $product->is_in_stock();
    $backordered = $product->is_on_backorder();
    
    // 处理变体产品
    if($product->is_type('variable')) {
        $stock_qty = $wpdb->get_var("
        SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}posts as p
        JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
        WHERE p.post_type = 'product_variation'
        AND p.post_status = 'publish' AND p.post_parent = '".get_the_id()."'
        AND pm.meta_key = '_stock' AND pm.meta_value IS NOT NULL");
        
        // 有库存的变体
        if($stock_qty > 0) {
            echo '<span style="color:green; font-weight:bold;">  Opcje dostępne z magazynu:</span></br>';
            foreach ( $product->get_available_variations() as $key ) {
                $variation = wc_get_product( $key['variation_id'] );
                $stock_quantity = $variation->get_stock_quantity();
                if($variation->is_in_stock() && $stock_quantity > 0) {
                    $attr_string = array();
                    foreach ( $key['attributes'] as $attr_name => $attr_value ) {
                        // 移除属性名称前缀,获取对应分类法
                        $taxonomy = str_replace('attribute_', '', $attr_name);
                        // 根据短名称获取属性正式名称
                        $term = get_term_by('slug', $attr_value, $taxonomy);
                        $attr_string[] = $term ? $term->name : $attr_value;
                    }
                    echo '<span style="color:green;">'. implode( ', ', $attr_string ). ': ' . $stock_quantity. ' sztuk</span> </br>';
                }
            }
        }
        // 无库存情况
        else {
            echo $backordered !== 'no' && $stock_qty <= 0 ? '<span style="color:#33b0c7; "> Dostępny na zamówienie </span>' : '<span style="color:red;"> Brak w magazynie</span>';
        }
    }       
}

修改说明

  1. 遍历变体属性时,通过str_replace('attribute_', '', $attr_name)移除属性名称前缀,得到对应的产品属性分类法
  2. 使用get_term_by('slug', $attr_value, $taxonomy)根据属性短名称(slug)获取术语对象,取出用户可见的正式名称$term->name
  3. 增加容错逻辑:若无法获取到术语对象,仍保留原短名称作为备选,避免显示异常

内容的提问来源于stack exchange,提问作者Luiza Gojawiczyńska

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:52:45