@hellion35

Изменение цены товара при добавлении в корзину?

Привет. У меня возникла проблема при изменении цены товара при добавлении в корзину.
Итак: при добавлении в корзину у меня посылается Ajax запрос на сервер, который принимает новую цену товара и записывает его в куки:
function add_constructor_card(){
    $product_id = 9570;
    setcookie('add_custom_price', (int)$_POST['price'], time() + 60 * 60 * 24 * 2, '/');
    setcookie('constructor_sostav', $_POST['name'], time() + 60 * 60 * 24 * 2, '/');
    wp_die();
}
add_action('wp_ajax_add_constructor_card', 'add_constructor_card');
add_action('wp_ajax_nopriv_add_constructor_card', 'add_constructor_card');

Далее я вешаю функцию изменения цены на хук woocommerce_before_calculate_totals
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
    $new_price = $_COOKIE['add_custom_price'];
    $target_product_id = 9570;
    foreach ( $cart_object->cart_contents as $key => $value ) {
        if ( $value['product_id'] == $target_product_id ) {
                $value['data']->set_price($new_price);
        }
    }
}

Если перейти в корзину, все нормально и работает, но у меня в шаблоне работает стандартный виджет woo: WC_Widget_Cart и вот с ним проблема, в нем выводится товар со стандартной ценой, но если в этом виджете изменить количество товара, то отображается уже нужная цена. Подскажите, возможно кто-то сталкивался с подобным? Тоесть получается что этот хук не вешается на виджет самого woocommerce.((((
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
Все верно.
Woo в момент добавления товара не знает о его новой цене. Вот и отображает старую цену.
В корзине Вы это видите потому, что для отображения страницы корзины уже работает следующий запрос и Ваша кука уже определена.
А виджет не отображает изменения пока не изменится содержимое Вашей корзины. Это сделано для уменьшения количества ajax запросов и синхронизации виджета на всех открытых страницах Вашего сайта.

Вообще Вы бы могли подменять цену в момент добавления товара в корзину, тогда не пришлось бы возится с куками и делать дополнительные ajax запросы.

Или Вы можете просто добавить в форму add_to_cart скрытое поле и заполнять его новой ценой перед отправкой. И далее в Вашем методе проверять данные этого скрытого поля, если есть устанавливать цену.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы