当WooCommerce产品缺货时,更改单个添加到购物车文本

时间:2019-04-20 13:20:30

标签: php jquery wordpress woocommerce stock

在Woocommerce中,我试图将简单产品和可变产品的产品变体,当产品缺货时,将单个产品页面上的“添加到购物车”文本从“添加到购物车”更改为“缺货”。

我们目前不使用任何库存管理,因为我们所有的产品都是手工制作的,并且我们会手动设置库存状态。

有没有办法实现这一目标?

2 个答案:

答案 0 :(得分:0)

对于除可变产品之外的所有产品,非常简单……但是对于可变产品及其变体,则需要更多代码和javascript / jQuery的使用。

因此,即使对于可变产品的选定产品变体,当前产品缺货时,以下代码也会将添加到购物车的文字更改为“缺货”:

// For all products except variable product
add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_single_add_to_cart_text_filter_callback', 20, 2 );
function product_single_add_to_cart_text_filter_callback( $button_text, $product ) {
    if( ! $product->is_in_stock() && ! $product->is_type('variable') ) {
        $button_text = __("Out of stock", "woocommerce");
    }
    return $button_text;
}

// For all product variations (on a variable product)
add_action( 'woocommerce_after_add_to_cart_button', 'after_add_to_cart_button_action_callback', 0 );
function after_add_to_cart_button_action_callback() {
    global $product;

    if( $product->is_type('variable') ) :

    $data = [];

    // Loop through variation Ids
    foreach( $product->get_visible_children() as $variation_id ){
        $variation = wc_get_product( $variation_id );
        $data[$variation_id] = $variation->is_in_stock();
    }

    $outofstock_text = __("Out of Stock", "woocommerce");
    ?>
    <script type="text/javascript">
    jQuery(function($){
        var b = 'button.single_add_to_cart_button',
            t = $(b).text();

        $('form.variations_form').on('show_variation hide_variation found_variation', function(){
            $.each(<?php echo json_encode($data); ?>, function(j, r){
                var i = $('input[name="variation_id"]').val();
                if(j == i && i != 0 && !r ) {
                    $(b).html('<?php echo $outofstock_text; ?>');
                    return false;
                } else {
                    $(b).html(t);
                }
            });
        });
    });
    </script>
    <?php
    endif;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。

答案 1 :(得分:0)

试图写为注释,但似乎代码格式不起作用,因此写为答案。

对于单个变体,将其添加到购物车简码中,此黑客将有所帮助。

// For variation product
    add_filter( 'woocommerce_product_add_to_cart_text', 'product_variation_add_to_cart_text_filter_callback', 20, 2 );
    function product_variation_add_to_cart_text_filter_callback( $button_text, $product ) {
        if ( ! $product->is_in_stock() && $product->is_type( 'variation' ) ) {
            $button_text = __( "Out of stock", "woocommerce" );
        }

        return $button_text;
    }