当您将产品添加到购物车时,用户会填写字段,并且当您单击“添加到订单”按钮(本质上是添加到购物车)时,将检查字段(为清楚起见,我对此进行了简化到if条件($a === 1)
)。
与woocommerce_add_to_cart_validation
挂钩一起使用的函数是:
function so_validate_add_cart_item($true){
$a = 1;
if( $a === 1){
$true = 0;
return $true;
}
}
一切正常,未添加服务,但页面已重新加载。
默认情况下$ true = 1,但也尝试返回值false,导致页面超载。
如何不完全停止页面重新加载,而是在一定条件下并且希望在此挂钩中停止加载页面?
答案 0 :(得分:0)
使用
woocommerce_add_to_cart_validation
过滤器挂钩时您无法避免页面重新加载。
使用woocommerce_add_to_cart_validation
过滤器挂钩有两种情况:
1)允许添加到购物车:您将返回默认的过滤器挂钩参数(即true
):
add_filter( 'woocommerce_add_to_cart_validation', 'filter_add_to_cart_validation', 10, 3 );
function filter_add_to_cart_validation( $passed, $product_id, $quantity ) {
$a = 0; // <===
if( $a === 1 ){
$passed false; // Avoiding add to cart
// (Optional) Display a custom eror notice
wc_add_notice( __('Alert message: "add to cart avoided"', 'woocommerce' ), 'error' );
}
return $passed;
}
对于 ajax添加到购物车,该产品将被添加到购物车(默认情况下),而无需重新加载。
对于正常添加到购物车,默认情况下,产品将添加到购物车,并且页面将重新加载。
2)避免添加到购物车: IF
语句中的条件匹配,filter hook参数设置为false并返回(可选地,您可以显示错误消息):
add_filter( 'woocommerce_add_to_cart_validation', 'filter_add_to_cart_validation', 10, 3 );
function filter_add_to_cart_validation( $passed, $product_id, $quantity) {
$a = 1;
// Any other value for $a than "1" will allow add to cart
if( $a === 1){
$passed false; // Avoid add to cart
// (Optional) Display a custom eror notice
wc_add_notice( __('Alert message: "add to cart avoided"', 'woocommerce' ), 'error' );
}
return $passed;
}
对于添加到购物车的ajax ,客户将被重定向到单个产品页面(避免添加到购物车)。
对于正常添加到购物车,默认情况下将重新加载页面(避免添加到购物车)。
避免页面重新加载的唯一可能方法是使用自定义(Ajax) jQuery脚本,这意味着您应该构建自己的验证功能。