【问题标题】:Display product variation stock quantity by color for WooCommerce为 WooCommerce 按颜色显示产品变化库存数量
【发布时间】:2021-02-24 09:48:31
【问题描述】:

我写了一点 sn-p 来在我的产品页面中获取所有尺寸的产品变化颜色和具体数量 我有这个结果:

color 1 size S = quantity 
Color 1 size M = quantity
Color 1 size L = quantity
Color 2 size M = quantity
Color 2 size L = quantity
...

我想要一个更像这样的结果

Color 1 : quantity of size S, quantity of size M, quantity of size L
Color 2 : quantity of size S, quantity of size M, quantity of size L
...

我怎样才能显示这个结果?

这是我的代码:

add_action( 'woocommerce_before_variations_form', 'get_selected_variation_stock' );
function get_selected_variation_stock() {
    global $product;


    if ($product->is_type( 'variable' ) && has_term( 71 , 'product_cat' ))
    {
        echo 'Taille(s) proposée(s) '.'</br>';
        $avail_vari = $product->get_available_variations();
        foreach ($avail_vari as $key => $value)
        {
            $vari_id = $value['variation_id'];
            $vari_color = $value['attributes']['attribute_pa_couleur'];
            sort($vari_color);
            $vari_taille = $value['attributes']['attribute_pa_taille'];
            sort($vari_taille);
            $vari_obj = new WC_Product_variation($vari_id);
            $vari_stock = get_post_meta( $vari_id, '_booking_lockout_field',true );
            $sum+= $vari_stock;
            
            if ( $vari_stock > 0 ) {
                echo $vari_color . " en " . $vari_taille . " : " . $vari_stock . " ".'</br>';
            }
        }
        echo 'Soit un total de : ' . $sum .' costume(s) disponible'.'</br>';
    }
}

【问题讨论】:

    标签: php wordpress woocommerce variations


    【解决方案1】:

    以下应该可以解决问题:

    add_action( 'woocommerce_before_variations_form', 'get_selected_variation_stock' );
    function get_selected_variation_stock() {
        global $product;
    
        if ($product->is_type('variable') && has_term(71 , 'product_cat') ) {
            $sum  = 0;
            $data = array();
    
            // Loop through available variation IDs (visible)
            foreach ( $product->get_visible_children() as $variation_id ) {
                $variation = wc_get_product($variation_id);
                
                $color = $variation->get_attribute('pa_couleur');
                $size  = $variation->get_attribute('pa_taille');
                $stock = $variation->get_meta('_booking_lockout_field');
                
                if ( $stock > 0 ) {
                    $sum += $stock;
                    $data[$color][] = sprintf( __('%s taille(s) %s'), $stock, $size );
                }
                
            }
            echo __("Taille(s) proposée(s)").' </br>';
            
            foreach ( $data as $color => $values ) {
                echo __("Color ") . $color . ' : ' . implode(', ', $values) . '<br>';
            }
            echo sprintf( __("Soit un total de %s costume(s) disponible(s)"), $sum ) . '</br>';
        }
    }
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。

    【讨论】:

    • 总体效果很好,但按尺寸和颜色划分的项目细节不起作用:(
    • 我尝试了很多东西,但 foreach ($data_array as $color => $values) { echo __("Color") 。 $颜色。 ' : ' 。内爆(',',$值)。 '
      ';似乎不起作用,但我不明白为什么
    • 我认为错误来自第二个 foreach 中的 $data_array。你知道为什么@LoicTheAztec 吗?再次感谢
    • @steph66 你说得对,是我的错……我已经更新了答案代码。
    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2014-06-18
    • 2016-09-26
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多