WooCommerce - 为购物车中的每个产品添加自定义价格

问题描述 投票:0回答:2

我想使用这段简单的代码来更新在购物车中添加自定义价格的产品价格

update_post_meta( $product->id, '_regular_price', $frame_price_added);

注意:我想要实现的目标是将这个自定义价格添加到购物车中的每个产品。

我尝试以这种方式获得

$frame_price_added

$frame_price = $res['_number_field'][0];
$frame_price_added = $product->price + $frame_price;

这里

$product->price
是来自woocomerce产品的价格,
$frame_price
来自我新添加的价格。

我想知道如何将这个新价格关联到购物车,因为它不起作用。

我尝试使用

update_post_meta( $product->id, '_price', $frame_price_added);
,刷新页面时,它会添加自定义价格并将其存储到产品中,然后保存。

关于如何正确实现这一目标有什么想法吗?

谢谢。


编辑:还有一件事......我搜索了一个可以在添加到购物车时调用的函数,但我没有找到任何东西,还有一个在

woocommerce_template_single_add_to_cart
上调用的动作钩子,它有
woocommerce_single_product_summary
但它没有没找到任何功能。

php wordpress woocommerce cart product
2个回答
2
投票

更新: 对于 WooCommerce 3.0+ 更改 WooCommerce 版本 3.0 中的购物车商品价格

您可以使用

woocommerce_before_calculate_totals
挂钩来自定义您的购物车商品价格。

您可以通过这种方式将

$framed_price
变量定义为函数中的全局变量。

这是代码:

// getting your additional price outside the function (making any conditional calculations) 
$framed_price = 20;

add_action( 'woocommerce_before_calculate_totals', 'add_custom_total_price', 10 );
function add_custom_total_price( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    global $framed_price;

    foreach ( $cart_object->get_cart() as $key => $value ) {
        $value['data']->price += $framed_price;
    }
}

或者在挂钩函数中获取您的自定义价格(可选,具体取决于您如何获取自定义价格)

add_action( 'woocommerce_before_calculate_totals', 'add_custom_total_price', 10 );
function add_custom_total_price( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $framed_price = 20;

    foreach ( $cart_object->get_cart() as $key => $value ) {
        $value['data']->price += $framed_price;
    }
}

此代码已经过测试并且可以工作。

当然,此代码位于活动子主题(或主题)的 function.php 文件或任何插件文件中。

参考:WooCommerce Cart - 动态价格变量传递到自定义价格挂钩


0
投票

使用

set_price()
方法设置为新版本。

add_action( 'woocommerce_before_calculate_totals', 'add_custom_total_price', 10 ); 函数 add_custom_total_price( $cart_object ) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

$framed_price = 20;

foreach ( $cart_object->get_cart() as $key => $value ) {
    $value['data']->set_price( $framed_price );
}

}

© www.soinside.com 2019 - 2024. All rights reserved.