避免在 Woocommerce 中结账混合延期交货和正常商品
Avoid checkout for mixed backorder and normal items in Woocommerce
如果缺货商品与库存商品混在一起,是否可以禁用结帐功能。
如果购物车中有混合商品,目前的代码会显示消息,但他们仍然可以结帐。
我们正在使用预购插件和设置,预购和现有不能混合在购物车中。下面是插件的设置。
防止混合产品如果启用此选项,购物车将不能同时包含预购产品和常规产品。(启用)但只有在有的情况下才有效购物车中没有商品。
允许销售缺货产品 通过启用此选项,可以购买没有库存的预购产品。 (启用并允许缺货)一旦库存为零,所有商品都可以预购。
问题是如果购物车中已有商品,他们可以结帐预购商品和常规商品。请检查下面的例子
我将 产品 A(5 个库存)和 B(10 个库存)放入购物车,但我不想立即结帐.
然后有人购买了 产品 A,库存变为 0(并且 产品 A转为预购)
但是如果我继续结帐产品 A(0 个库存和预购)和 B(10 个库存)所以它已经混入购物车,我可以继续结帐,因为设置中允许延期交货。
是否可以自动删除购物车中的 产品 A 或禁用结帐?
add_action( 'woocommerce_review_order_before_payment', 'es_checkout_add_cart_notice' );
function es_checkout_add_cart_notice() {
$message = "You have a PREORDER item/s in your cart! Do not mix it if you're ordering on-hand item/s or IGNORE this message if you are ordering all pre-order item/s.";
if ( es_check_cart_has_backorder_product() )
wc_add_notice( $message, 'error' );
}
function es_check_cart_has_backorder_product() {
foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
$cart_product = wc_get_product( $values['data']->get_id() );
if( $cart_product->is_on_backorder() )
return true;
}
return false;
}
这个呢?
...
if ( es_check_cart_has_backorder_product() ) {
add_filter('woocommerce_order_button_html', 'sg_remove_payment_button');
}
...
function sg_remove_payment_button ($button){
$output = '<div id="payments-disabled">';
$output .= 'Sorry, you cannot complete this order';
$output .= '</div>';
$output .= '<style>';
$output .= '.payment_methods, .wc-terms-and-conditions {display: none !important}';
$output .= '</style>';
return $output;
}
尝试以下方法,这将真正检查混合项目并抛出错误消息避免:
- "proceed to checkout"(在购物车页面)
- 下订单(结帐页面)
代码:
// Display a custom notice when mixed items (backorder items and normal) avoiding checkout and "proceed to checkout" too
add_action( 'woocommerce_checkout_process', 'display_custom_error_notice' );
add_action( 'woocommerce_check_cart_items', 'display_custom_error_notice' );
function display_custom_error_notice() {
$message = __("You have a PREORDER item/s mixed with normal items. They can not be mixed.", "woocommerce");
if ( has_mixed_products() )
wc_add_notice( $message, 'error' );
}
// Utility function checking for mixed items (backorder items and normal)
function has_mixed_products() {
$on_backorder = $normal = false;
foreach( WC()->cart->get_cart() as $cart_item ) {
if( $cart_item['data']->is_on_backorder() )
$on_backorder = true;
else $normal = true;
}
return $on_backorder && $normal ? true : false;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
在购物车页面上:
结帐页面:
Now is also possible to remove mixed items from cart throwing a notice…
有了 woocommerce,几乎一切皆有可能,这取决于您的技能和花费的时间。
如果缺货商品与库存商品混在一起,是否可以禁用结帐功能。 如果购物车中有混合商品,目前的代码会显示消息,但他们仍然可以结帐。
我们正在使用预购插件和设置,预购和现有不能混合在购物车中。下面是插件的设置。
防止混合产品如果启用此选项,购物车将不能同时包含预购产品和常规产品。(启用)但只有在有的情况下才有效购物车中没有商品。
允许销售缺货产品 通过启用此选项,可以购买没有库存的预购产品。 (启用并允许缺货)一旦库存为零,所有商品都可以预购。
问题是如果购物车中已有商品,他们可以结帐预购商品和常规商品。请检查下面的例子
我将 产品 A(5 个库存)和 B(10 个库存)放入购物车,但我不想立即结帐.
然后有人购买了 产品 A,库存变为 0(并且 产品 A转为预购)
但是如果我继续结帐产品 A(0 个库存和预购)和 B(10 个库存)所以它已经混入购物车,我可以继续结帐,因为设置中允许延期交货。
是否可以自动删除购物车中的 产品 A 或禁用结帐?
add_action( 'woocommerce_review_order_before_payment', 'es_checkout_add_cart_notice' );
function es_checkout_add_cart_notice() {
$message = "You have a PREORDER item/s in your cart! Do not mix it if you're ordering on-hand item/s or IGNORE this message if you are ordering all pre-order item/s.";
if ( es_check_cart_has_backorder_product() )
wc_add_notice( $message, 'error' );
}
function es_check_cart_has_backorder_product() {
foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
$cart_product = wc_get_product( $values['data']->get_id() );
if( $cart_product->is_on_backorder() )
return true;
}
return false;
}
这个呢?
...
if ( es_check_cart_has_backorder_product() ) {
add_filter('woocommerce_order_button_html', 'sg_remove_payment_button');
}
...
function sg_remove_payment_button ($button){
$output = '<div id="payments-disabled">';
$output .= 'Sorry, you cannot complete this order';
$output .= '</div>';
$output .= '<style>';
$output .= '.payment_methods, .wc-terms-and-conditions {display: none !important}';
$output .= '</style>';
return $output;
}
尝试以下方法,这将真正检查混合项目并抛出错误消息避免:
- "proceed to checkout"(在购物车页面)
- 下订单(结帐页面)
代码:
// Display a custom notice when mixed items (backorder items and normal) avoiding checkout and "proceed to checkout" too
add_action( 'woocommerce_checkout_process', 'display_custom_error_notice' );
add_action( 'woocommerce_check_cart_items', 'display_custom_error_notice' );
function display_custom_error_notice() {
$message = __("You have a PREORDER item/s mixed with normal items. They can not be mixed.", "woocommerce");
if ( has_mixed_products() )
wc_add_notice( $message, 'error' );
}
// Utility function checking for mixed items (backorder items and normal)
function has_mixed_products() {
$on_backorder = $normal = false;
foreach( WC()->cart->get_cart() as $cart_item ) {
if( $cart_item['data']->is_on_backorder() )
$on_backorder = true;
else $normal = true;
}
return $on_backorder && $normal ? true : false;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
在购物车页面上:
结帐页面:
Now is also possible to remove mixed items from cart throwing a notice…
有了 woocommerce,几乎一切皆有可能,这取决于您的技能和花费的时间。