php 当所有变化都脱销时,显示器在WooCommerce可变产品上售罄

jbose2ul  于 5个月前  发布在  PHP
关注(0)|答案(2)|浏览(69)

在WooCommerce中,我使用下面的函数,如果产品缺货,它会在产品缩略图上添加售罄文本:

add_action( 'woocommerce_before_shop_loop_item_title', 'bbloomer_display_sold_out_loop_woocommerce' );
 
function bbloomer_display_sold_out_loop_woocommerce() {
    global $product;
    if ( ! $product->is_in_stock() ) {
        echo '<span class="soldout">Sold Out</span>';
    }
}

字符串
它适用于简单产品,但不适用于可变产品。
对于有变化的可变产品,如果我将所有变化设置为0库存量,除了1个变化,我注意到销售一空的消息仍然出现在缩略图上。从技术上讲,这是不正确的,因为我们确实有一些库存。
有人知道如何修改下面的代码来处理这个问题吗?

rt4zxlrg

rt4zxlrg1#

您可以创建一个自定义条件函数来检查变量产品的所有变体是否都“缺货”,如下所示:

function is_variable_product_out_of_stock( $product ) {
    $children_count = 0; // initializing
    $variation_ids  = $product->get_visible_children();
        
    // Loop through children variations of the parent variable product
    foreach( $variation_ids as $variation_id ) {{
        $variation = wc_get_product($_variation_id); // Get the product variation Object
            
        if( ! $variation->is_in_stock() ) {
            $children_count++; // count out of stock children
        }
    }
    // Compare counts and return a boolean
    return count($variation_ids) == $children_count ? true : false;
}

字符串
然后你将在下面重新访问的钩子函数中使用它:

add_action( 'woocommerce_before_shop_loop_item_title', 'display_products_loop_out_of_stock' );
 
function display_products_loop_out_of_stock() {
    global $product;

    if ( ( ! $product->is_type('variable') && ! $product->is_in_stock()  ) 
    || ( $product->is_type('variable') && is_variable_product_out_of_stock( $product ) ) ) {
        echo '<span class="soldout">Sold Out</span>';
    }
}


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

ikfrs5lh

ikfrs5lh2#

我为@LoicTheAztec的函数做了一个更精简的版本,只要找到一个有库存的变量,它就会停止循环:

function is_variable_product_out_of_stock($product) {
    $variation_ids = $product->get_visible_children();
    foreach($variation_ids as $variation_id) {
        $variation = wc_get_product($variation_id);
        if ($variation->is_in_stock())
            return false;
    }
    return true;
}

字符串
也没有致命的错误,因为他在他的功能两个关键的错别字。
你可以像他一样做一些定制的事情:

add_action('woocommerce_before_shop_loop_item_title', 'display_products_loop_out_of_stock');
function display_products_loop_out_of_stock() {
    global $product;
    if ((!$product->is_type('variable') and !$product->is_in_stock()) or ($product->is_type('variable') and is_variable_product_out_of_stock($product)))
        echo '<span class="soldout">Sold Out</span>';
}

相关问题