Отключить перезагрузку страницы при использовании ловушки woocommerce_add_to_cart_validation - PullRequest
0 голосов
/ 24 октября 2018

Когда вы добавляете товар в корзину, пользователь заполняет поля, а когда вы нажимаете кнопку «Добавить в заказ» (это, по сути, добавляется в корзину), поля проверяются (для ясности, я упростил эток условию 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 голосов
/ 24 октября 2018

Вы не можете избежать перезагрузки страницы при использовании woocommerce_add_to_cart_validation ловушки фильтра.

При использовании woocommerce_add_to_cart_validation ловушки фильтра есть 2 случая:

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 совпадает, аргумент ловушки фильтра имеет значение 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, что означает, что вы должны создать свою собственную функцию проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...