在Woocommerce的产品变体旁边显示“缺货”

时间:2018-04-16 17:41:35

标签: php wordpress function woocommerce variations

我想对我的网站进行一些修改,但出于某种原因,可以得到它。我试图使用这个thread of Stack中找到的函数:

add_filter( 'woocommerce_variation_option_name', 
'customizing_variations_terms_name', 10, 1 );
function customizing_variations_terms_name( $term_name ){

if(is_admin())
    return $term_name;

global $product;
$second_loop_stoped = false;

// Get available product variations
$product_variations = $product->get_available_variations();

// Iterating through each available product variation
foreach($product_variations as $variation){

    $variation_id = $variation['variation_id'];
    $variation_obj = new WC_Product_Variation( $variation_id );

    ## WOOCOMMERCE RETRO COMPATIBILITY ##
    if ( version_compare( WC_VERSION, '3.0', '<' ) ) # BEFORE Version 3 (older)
    {
        $stock_status = $variation_obj->stock_status;
        $stock_qty = intval($variation_obj->stock);

        // The attributes WC slug key and slug value for this variation
        $attributes_arr = $variation_obj->get_variation_attributes();
    }
    else # For newest verions: 3.0+ (and Up)
    {
        $stock_status = $variation_obj->get_stock_status();
        $stock_qty = $variation_obj->get_stock_quantity();

        // The attributes taxonomy key and slug value for this variation
        $attributes_arr = $variation_obj->get_attributes();
    }

    if(count($attributes_arr) != 1) // Works only for 1 attribute set in the product
        return $term_name;

    // Get the terms for this attribute
    foreach( $attributes_arr as $attr_key => $term_slug){
        // Get the attribute taxonomy
        $term_key = str_replace('attribute_', '', $attr_key );

        // get the corresponding term object
        $term_obj = get_term_by( 'slug', $term_slug, $term_key );
        if( $term_obj->name == $term_name ){ // If the term name matches we stop the loops
            $second_loop_stoped = true;
            break;
        }
    }
    if($second_loop_stoped)
        break;
}
if( $stock_qty>0 )
    return $term_name .= ' - ' . $stock_status . ' ('.$stock_qty.')';
else
    return $term_name .= ' - ' . $stock_status;

}

但由于某些原因,当插入函数时,请在每个变体旁边显示“outofstock”。我不使用标准的Woocommerce下拉变换样式,并使用WC Variations Radio Buttons在每个变体旁边显示单选按钮,而不是下拉列表。问题是我想在每个变体旁边只显示“缺货”。不是“库存”,所以客户会在按下“添加到购物车”按钮之前知道所需的变化没有库存。似乎问题就是这个代码:

if( $stock_qty>0 )
return $term_name .= ' - ' . $stock_status . ' ('.$stock_qty.')';
else
return $term_name .= ' - ' . $stock_status;

}

函数看起来像返回

return $term_name .= ' - ' . $stock_status;

一直以来。有帮助吗?可以看到我的问题预览here。感谢。

编辑:这是来自variable.php单选按钮插件的代码,其中打印变体为单选按钮:

<td class="value">
                        <?php
                        if ( ! empty( $options ) ) {
                            if ( taxonomy_exists( $name ) ) {
                                // Get terms if this is a taxonomy - ordered. We need the names too.
                                $terms = wc_get_product_terms( $product->get_id(), $name, array( 'fields' => 'all' ) );

                                foreach ( $terms as $term ) {
                                    if ( ! in_array( $term->slug, $options ) ) {
                                        continue;
                                    }
                                    print_attribute_radio( $checked_value, $term->slug, $term->name, $sanitized_name );
                                }
                            } else {
                                foreach ( $options as $option ) {
                                    print_attribute_radio( $checked_value, $option, $option, $sanitized_name );
                                }
                            }
                        }

                        echo end( $attribute_keys ) === $name ? 
apply_filters( 'woocommerce_reset_variations_link', '<a 
class="reset_variations" href="#">' . __( 'Clear', 'woocommerce' ) . '</a>' 
) : '';
                        ?>
                    </td>

也许需要更新一些内容以便正确显示?

1 个答案:

答案 0 :(得分:0)

改为执行此操作

if( $stock_qty>0 )
    //return $term_name .= ' - ' . $stock_status . ' ('.$stock_qty.')';
    return $term_name;
else
    //return $term_name .= ' - ' . $stock_status;
return $term_name .= ' - Out Of Stock';