首页 > 解决方案 > 如何以编程方式修改 Woocommerce 的购物车的自定义值?

问题描述

我需要使用 Ajax 修改 Woocommerce 的购物车的自定义值。我正在尝试这样的事情:

<?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_optionsplugin 引入的值WooCommerce Extra Product Options

当然我不会在生产中使用硬编码的 ID,这只是为了测试。

标签: wordpresswoocommerce

解决方案


我终于能够找到解决方案。这是对我有用的代码:

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

推荐阅读