如何在WooCommerce的商店页面上只显示有库存的变体?

时间:2020-01-15 作者:Farhan Ali

我不想显示所有可用的属性,我只需要显示那些在后端保存了库存的变体值。就像我有一个名为size的变量一样,我想显示产品及其可用尺寸,如果一个产品有5种不同的尺寸,但其中两种尺寸没有库存,则只显示其他3种库存尺寸,如果一个产品有5种不同的尺寸,且所有尺寸都有库存,则显示所有这些尺寸。以下是我正在使用的代码:

    echo \'<div class="row m-0 justify-content-center">\';
    $fabric_values = get_the_terms( $product->id, \'pa_sizes\');
    foreach ( $fabric_values as $fabric_value ) {
        echo \'<button class="btn btn-circle btn-lg rounded-circle">\'."$fabric_value->name" . \'</button>\';
    }
    echo \'</div>\';
以下是快照:See the image here这显示了我之前存储的所有属性。如果有人能帮助我,解决办法是什么?

2 个回复
最合适的回答,由SO网友:Farhan Ali 整理而成

这就是我实现解决方案的方式:

    global $product;

    if ( $product->is_type(\'variable\') ) {
        $taxonomy    = \'pa_sizes\'; // The product attribute taxonomy
        $sizes_array = []; // Initializing

        // Loop through available variation Ids for the variable product
        foreach( $product->get_children() as $child_id ) {
            $variation = wc_get_product( $child_id ); // Get the WC_Product_Variation object

            if( $variation->is_purchasable() && $variation->is_in_stock() ) {
                $term_name = $variation->get_attribute( $taxonomy );
                $file_list[$term_name] = $term_name;

            }
        }

        /*
         * Loop through the array and print all the values
         */
        if(is_array($file_list)){
            sort ($file_list);
            foreach($file_list as $file){ 
                echo \'<button class="btn btn-circle btn-lg rounded-circle">\' . $file . \'</button>\';
            }
        }
        else{
            echo \'<p style="font-size:12px;">No Sizes Available</p>\';
        }

    }

    echo \'</div>\';
Anyone can get help from this post if having troubles.

SO网友:Farhan Ali

我从stackoverflow得到了一个答案,这是可行的,但所有尺寸都显示在一个按钮中,我想在单独的按钮中显示所有尺寸,就像上面的屏幕截图一样。我知道在回显我的按钮之前添加一个循环是可能的,我的循环不起作用

    global $product;

    if ( $product->is_type(\'variable\') ) {
        $taxonomy    = \'pa_sizes\'; // The product attribute taxonomy
        $sizes_array = []; // Initializing

        // Loop through available variation Ids for the variable product
        foreach( $product->get_children() as $child_id ) {
            $variation = wc_get_product( $child_id ); // Get the WC_Product_Variation object

            if( $variation->is_purchasable() && $variation->is_in_stock() ) {
                $term_name = $variation->get_attribute( $taxonomy );
                $sizes_array[$term_name] = $term_name;
            }
        }

        echo \'<button class="btn btn-circle btn-lg rounded-circle">\' . implode( \', \', $sizes_array ) . \'</button>\';
    }
所以,任何人都可以在回显按钮之前添加一个循环,以便我可以在不同的按钮中显示所有可用的大小。

相关推荐