Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更改Woocommerce 3中的购物车项目价格_Php_Wordpress_Woocommerce_Cart_Product - Fatal编程技术网

Php 更改Woocommerce 3中的购物车项目价格

Php 更改Woocommerce 3中的购物车项目价格,php,wordpress,woocommerce,cart,product,Php,Wordpress,Woocommerce,Cart,Product,我正在尝试使用以下功能更改购物车中的产品价格: add_action( 'woocommerce_before_shipping_calculator', 'add_custom_price' ); function add_custom_price( $cart_object ) { foreach ( $cart_object->cart_contents as $key => $value ) { $value

我正在尝试使用以下功能更改购物车中的产品价格:

    add_action( 'woocommerce_before_shipping_calculator', 'add_custom_price' 
     );
      function add_custom_price( $cart_object ) {
         foreach ( $cart_object->cart_contents as $key => $value ) {
         $value['data']->price = 400;
        } 
     }
它在WooCommerce 2.6.x版中正常工作,但在3.0+版中不再工作

如何使其在WooCommerce 3.0+版中工作


谢谢。

更新2021(处理迷你购物车定制商品价格)

使用WooCommerce版本3.0+时,您需要:

  • 在计算总计之前使用钩子
  • 用方法代替
  • 用方法代替
代码如下:

// Set custom cart item price
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);
function add_custom_price( $cart ) {
    // This is necessary for WC 3.0+
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Avoiding hook repetition (when using price calculations for example | optional)
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        $cart_item['data']->set_price( 40 );
    }
}
对于迷你购物车(更新):

代码进入活动子主题(或活动主题)的functions.php文件

这段代码已经过测试并运行正常(在WooCommerce 5.1.x上仍然有效)

注意:当使用一些特定插件或其他定制时,您可以将钩子优先级从
20
增加到
1000
(甚至
2000

相关的:


更新2021(处理迷你购物车定制商品价格)

使用WooCommerce版本3.0+
时,您需要:

  • 在计算总计之前使用钩子
  • 用方法代替
  • 用方法代替
代码如下:

// Set custom cart item price
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);
function add_custom_price( $cart ) {
    // This is necessary for WC 3.0+
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Avoiding hook repetition (when using price calculations for example | optional)
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        $cart_item['data']->set_price( 40 );
    }
}
对于迷你购物车(更新):

代码进入活动子主题(或活动主题)的functions.php文件

这段代码已经过测试并运行正常(在WooCommerce 5.1.x上仍然有效)

注意:当使用一些特定插件或其他定制时,您可以将钩子优先级从
20
增加到
1000
(甚至
2000

相关的:


对于WooCommerce版本3.2.6,@LoicTheAztec的答案对我来说很有用,如果我将优先级增加到1000

add_操作('woocommerce_-before_-calculate_-total','add_-custom_-price',1000,1)

我尝试了
10
99
999
的优先级值,但我购物车中的价格和总价没有改变(即使我能够用
get_price()
确认
set_price()
实际上已经设置了物品的价格


我有一个自定义钩子,可以向我的购物车添加费用,我正在使用一个添加产品属性的第三方插件。我怀疑这些WooCommerce“附加组件”会导致延迟,需要我延迟我的自定义操作。

对于WooCommerce版本3.2.6,@LoicTheAztec的答案对我有效,如果我将优先级提高到1000

add_操作('woocommerce_前计算_总数','add_自定义_价格',1000,1);

我尝试了
10
99
999
的优先级值,但我购物车中的价格和总价没有改变(即使我能够用
get_price()
确认
set_price()
实际上已经设置了物品的价格


我有一个自定义的钩子,可以给我的购物车增加费用,我正在使用一个第三方插件来添加产品属性引入需要我延迟自定义操作的延迟。

Hi,#LoicTheAztec此解决方案对硬编码值正常工作,但对动态值无效。我们如何使这些值成为动态值?@AsifRao您到底需要什么,请您更专业一些?我想使用add\t为购物车中添加的产品添加自定义价格o_cart();所以需要我计算的产品id和自定义价格。在这个例子中。我如何在这个钩子中获得这些值。@AsifRao很抱歉,但这个答案与添加到_cart()无关功能性…您需要问一个关于StackOverFlow的新问题…您好,#LoicTheAztec此解决方案对硬编码值有效,但对动态值无效。我们如何使这些值成为动态值?@AsifRao您到底需要什么,您能更具体一点吗?我想为购物车中添加的产品添加自定义价格使用add_to_cart();因此需要我计算的产品id和自定义价格。在这个例子中,我如何在这个钩子中获得这些值。@AsifRao非常抱歉,但这个答案与add_to_cart()无关功能性…你应该需要问一个关于StackOverFlow的新问题…可能重复的可能重复我正在使用WC Fields Factory插件版本2.0.6添加自定义产品属性。我在插件目录中搜索999,并在插件中发现多个实例,其中操作优先级为999。我猜,在我的情况下,这就是我需要1000优先级的原因。我正在使用WC Fields Factory插件版本2.0.6添加自定义产品属性。我将插件目录搜索为999,并在插件中找到多个操作优先级为999的实例。我猜,这就是我需要1000优先级的原因。