#wordpress #woocommerce
#wordpress #woocommerce
Вопрос:
Мне нужно изменить пользовательские значения корзины Woocommerce с помощью Ajax. Я пытался сделать что-то вроде этого:
<?php
add_action( 'wp_ajax_dgd_update_cart', 'dgd_update_cart_callback' );
add_action( 'wp_ajax_nopriv_dgd_update_cart', 'dgd_update_cart_callback' );
function dgd_update_cart_callback() {
global $woocommerce;
$cart = $woocommerce->cart->get_cart();
$woocommerce->cart->cart_contents[ '972cb30dd16a544ec9d5142963a81681' ][ 'thwepo_options' ][ 'delivery_or_collect' ][ 'value' ] = 'collect';
// alternative 2:
// WC()->cart->cart_contents[ '972cb30dd16a544ec9d5142963a81681' ][ 'thwepo_options' ][ 'delivery_or_collect' ][ 'value' ] = 'collect';
die();
}
Мне нужно изменить значение thwepo_options
, введенное плагином WooCommerce Extra Product Options
.
Конечно, я бы не стал использовать жестко закодированные идентификаторы в производстве, это только для тестирования.
Ответ №1:
Я, наконец, смог найти решение. Вот код, который работает для меня:
add_action( 'wp_ajax_dgd_update_cart', 'dgd_update_cart_callback' );
add_action( 'wp_ajax_nopriv_dgd_update_cart', 'dgd_update_cart_callback' );
function dgd_update_cart_callback() {
$cart = WC()->session->get( 'cart' );
foreach ($cart as $key => $value) {
$cart[ $key ][ 'thwepo_options' ][ 'delivery_or_collect' ][ 'value' ] = $_POST[ 'delivery_or_collect' ];
}
WC()->session->set( 'cart', $cart);
die();
}