简体   繁体   中英

Disable page reloading when using woocommerce_add_to_cart_validation hook

When you add a product to the cart, the user fills in the fields and when you click on the Add to order button (this is essentially to add to the cart), the fields are checked (for clarity, I simplified this to the if condition ($a === 1) ).

My function used with woocommerce_add_to_cart_validation hook is:

function so_validate_add_cart_item($true){
  $a = 1;
  if( $a === 1){
    $true = 0;
    return $true;
  }

}

Everything works well and the service is not added, but the page is reloaded.

By default $true = 1, but tried to return value false too, the page is overloaded.

How to stop page reloading not completely, but under a certain condition and it is desirable in this hook?

You can't avoid page reloading when using woocommerce_add_to_cart_validation filter hook.

There is 2 cases when using woocommerce_add_to_cart_validation filter hook:

1) Allow add to cart: You return the default filter hook argument (which is 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;
}

For ajax add to cart , the product will be added to cart (as by default) without reloading.

For normal add to cart , the product will be added to cart and the page will be reloaded as by default.


2) Avoid add to Cart: The condition in the IF statement matches, the filter hook argument is set to false and returned (optionally you can display an error message):

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;
}

For ajax add to cart , customer will be redirected to the single product page (avoiding add to cart).

For normal add to cart , the page will be reloaded as by default (avoiding add to cart).


The only possible way to avoid page reloading should be to use a custom (Ajax) jQuery script, meaning that you should build your own validation functionality.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM