php - Woocommerce:以编程方式更新购物车中的项目

标签 php wordpress woocommerce

我需要以编程方式动态更改购物车中商品的价格。

我已经尝试了 Woocommerce 操作 Hook 、购物车和 session 对象的不同组合,但似乎没有什么能奏效。我认为这不会那么具有挑战性。

add_action( 'woocommerce_before_calculate_totals', 'change_cart_item_price' );

function change_cart_item_price( $cart_object ) {

    foreach ( $cart_object->cart_contents as $key => $value ) {

        if( 123 == $value['data']->id ) {

            $new_price = function_to_get_new_price( $value, get_current_user_id( ) );
            $value['data']->price = $new_price;
        }
   }
}

上述代码仅在结帐页面或更新购物车时更改每件商品的价格(即:从购物车中删除商品时调用 Hook ),但不是无限期的。

我正在使用 Woocommerce Gravity Forms 插件。我有一个特别的产品,将被给定用户多次订购。用户将获得 5 次免费,仅需运费,超过 5 次的每件将收取 20 美元。我有这么多编码和功能,带有动态填充字段的重力形式 Hook 。运输特定于重力形式内的字段,因此我将计算留给重力形式。

我的问题是,如果用户从他们的订单中减少了该产品的数量(从购物车中删除了一件商品),它应该重新计算购物车中同一产品的每件商品的价格,否则他们可能被多收了(以前是第 6 位的商品现在是第 4 位,但价格保持不变,这是不应该的)

因此,每次从购物车中移除商品时,我都想根据该特定产品的数量重新计算购物车中每件商品的价格。

--- 编辑 ---

上面的代码有效,但我意识到问题一定是我用来显示价格的自定义循环...

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $_product = $cart_item['data'];
    if( 123 == $_product->post->ID ) {
        $price_not_updated = $cart_item['data']->price;
    }
}

最佳答案

我想通了...我查看了 woocommerce 购物车文档,基本上意识到我得到的价格尚未计算。因此,在运行循环之前,我必须执行最初 Hook 的操作以更改价格。

感谢您的帮助!

function getUpdatedCartPrices() {

    do_action( 'woocommerce_before_calculate_totals', WC()->cart );

    $horray_updated_prices_works = array();

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $_product = $cart_item['data'];
        if( 123 == $_product->post->ID ) {

            $horray_updated_prices_works[] = $cart_item['data']->price;

        }
    }

}

关于php - Woocommerce:以编程方式更新购物车中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132033/

相关文章:

css - 覆盖容器

MySQL:内存不足/MariaDB

php - Woocommerce php 代码 get_price_html()

ffmpeg - 如何将ffmpeg链接到php.ini

php - 如何检查用户是否关闭窗口/浏览器/关闭计算机?

mysql_real_escape_string() 和 mysql_get_server_info() : Access denied for user '' @'127.0.0.1' (using password: NO)

php - 将 URL 查询参数添加到 WP_Query

php - 为什么 PDOStatement 在单次获取时返回 false?

php - 我已经在 php 中的 .htaccess 的帮助下隐藏了扩展名,但我想要。如果任何用户在 URL 框中写入扩展名,则会出现错误,页面不存在

javascript - 如何将 Woocommerce 与 Piwik 集成