使用woocommerce_add_to_cart_validation挂钩时禁用页面重新加载

时间:2018-10-24 08:32:17

标签: php wordpress validation woocommerce hook-woocommerce

当您将产品添加到购物车时,用户会填写字段,并且当您单击“添加到订单”按钮(本质上是添加到购物车)时,将检查字段(为清楚起见,我对此进行了简化到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,导致页面超载。

如何不完全停止页面重新加载,而是在一定条件下并且希望在此挂钩中停止加载页面?

1 个答案:

答案 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脚本,这意味着您应该构建自己的验证功能。