Отправить дополнительные данные об обновлении корзины woocommerce - PullRequest
1 голос
/ 11 января 2020

У меня есть пользовательское поле ввода в корзине WooCommerce для каждого элемента корзины. Когда кто-то нажимает обновить корзину, я хочу отправить дополнительные данные на сервер, обработать эти данные и добавить их в текущую корзину.

Я нигде не могу найти, как это сделать. Возможно ли это вообще?

Я пытался:

woocommerce_update_cart_action_cart_updated в переменной $ _POST пользовательские данные недоступны

через пользовательские javascript Выполнять запрос ajax каждый раз, когда изменяется поле ввода. Но это мешает обычному способу обновления корзины WooCommerce. Много ошибок ...

Хук перед обновлением корзины Я не могу найти, есть ли хук для отправки дополнительных данных перед обновлением корзины.

1 Ответ

1 голос
/ 11 января 2020

В итоге решение оказалось довольно простым. Так как корзина представляет собой обычную форму HTML, вы можете добавить пользовательские входные данные. Когда корзина обновляется, все данные формы сериализуются и отправляются через ajax. Вам просто нужно установить правильный атрибут имени в поле ввода.

Для этого потребовались следующие шаги:

  1. Скопировать шаблон корзины woocommerce.
  2. Добавить свой пользовательский введите в корзину элемент foreach l oop
  3. Дайте ему правильное имя. Например:

     name="cart[<?php echo $cart_item_key; ?>][your_custom_key]"
    
  4. Используйте крючок:

     woocommerce_update_cart_action_cart_updated
    
  5. В этом крюке вы можете легко получить доступ к корзине $ _POST [' '] переменная и делай свое дело. Например:

    $cart = WC()->cart->cart_contents;
    
    // loop over the cart
    foreach($_POST['cart'] as $cartItemKey => $values) {
    
        $cartItem = $cart[$cartItemKey];
    
        $yourCustomValue = $values['your_custom_key'];
    
        // process the value, do something with it...
    
        $cartItem['your_custom_key'] = $yourCustomValue;
    
        WC()->cart->cart_contents[$cartItemKey] = $cartItem;
    
    }
    
  6. Et voilà. Теперь, когда вы заполняете поле ввода и обновляете корзину, данные сохраняются в корзине. Например, теперь вы можете сохранить дополнительные данные корзины при сохранении нового заказа или использовать данные для расчета комиссии.

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