Как программно изменить пользовательские значения корзины Woocommerce?

#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();
}