如果woocommerce数量输入大于库存数量,如何显示文本消息?

时间:2019-01-31 03:15:06

标签: wordpress woocommerce

我想显示一条自定义短信,以通知客户他们选择的输入数量(在单击“添加到购物车”按钮之前)。如果所选数量大于现有可用库存数量,则在单个产品页面中所选数量的正上方,将显示此消息。例如:

Existing Stock Quantity: 2
User Selects: >2

在这种情况下,我想告诉客户类似的信息:“您选择的订单数量大于我们的现有库存。请最多延迟2周才能补充我们的库存。”

我试图将自定义代码添加到代码段中,如下所示:

function display_order_quantity_exceeds_stock_quantity_text( $message, $product ) {

if( $product->woocommerce_quantity_input() > $product->get_stock_quantity()) {
    $message = "Your selected order quantity is greater than our existing stock. Please expect a delay of up to 2 weeks for our stock to be replenished.";
}
return $message;

}

有人知道我如何获得woocommerce_quantity_input并使它正常工作吗?

宁愿仅通过向代码片段中添加功能而不是使用Javascript(如果可能)来获得解决方案。

2 个答案:

答案 0 :(得分:0)

我将通过jQuery完成此操作,因此将其添加到您的functions.php中($ src变量指向主题文件夹中的JS文件位置):

function a3_enqueue_scripts() {
    if(is_singular( 'product' )){       
        $handle = 'a3_wooc_js';

        //path to your Javascript file
        $src = get_theme_file_uri( '/js/a3_wooc.js' );

        wp_enqueue_script( $handle, $src, array( 'jquery' ), false, false);  
    }
}

add_action( 'wp_enqueue_scripts', 'a3_enqueue_scripts' );

随附的JS文件中的内容如下:

(function($){
    $(document).ready(function(){
        //the jQuery selector depends on your theme output for the quantity text box identifiers
        $('[name="quantity"]').on('change', function(e){
            var qty_box = $(this);
            var error_message = $('<div class="error_msg">Your selected order quantity is greater than our existing stock. Please expect a delay of up to 2 weeks for our stock to be replenished</div>');

            console.log(parseInt(qty_box.val()), parseInt(qty_box.attr('max')), qty_box.val() > parseInt(qty_box.attr('max')));

            if(parseInt(qty_box.val()) > parseInt(qty_box.attr('max'))) {
                // the action to take if the quantity exceeds max stock     
                if($('.quantity .error_msg').length < 1){
                    $('.quantity').prepend(error_message);                              
                }               
            }
            else {
                $('.quantity .error_msg').remove();
            }
        });
    });
})(jQuery);

答案 1 :(得分:0)

在用户主题的footer.php中添加此jQuery代码时,当用户输入的值多于股票时,就会触发警报

<script type="text/javascript">

function show_error($field, $mesg) {
    if ($field.prev('.error_msg').length) {
        $field.prev('.error_msg').html('<p>' + $mesg + '</p>');
    } else {
        jQuery('<div class="error_msg" style="color:#f00"><p>' + $mesg + '</p></div>').insertBefore($field);
    }

}

function remove_error($field) {
    if ($field.prev('.error_msg').length) {
        $field.prev('.error_msg').remove();
    }
}

jQuery(".quantity input[name=quantity]").on('change', function(e) {

    if (jQuery(this).val() > jQuery(this).attr("max")) {
        show_error(jQuery(this).parent(".quantity"), "Your selected order quantity is greater than our existing stock. Please expect a delay of up to 2 weeks for our stock to be replenished")
    } else {
        remove_error(jQuery(this).parent(".quantity"));
    }
})

</script>

必须必须启用“管理库存”,并为此产品设置库存编号才能使其正常工作。