我想显示一条自定义短信,以通知客户他们选择的输入数量(在单击“添加到购物车”按钮之前)。如果所选数量大于现有可用库存数量,则在单个产品页面中所选数量的正上方,将显示此消息。例如:
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(如果可能)来获得解决方案。
答案 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>
必须必须启用“管理库存”,并为此产品设置库存编号才能使其正常工作。