Php 更改WooCommerce订阅产品的注册费购物车项目价格

Php 更改WooCommerce订阅产品的注册费购物车项目价格,php,wordpress,woocommerce,cart,woocommerce-subscriptions,Php,Wordpress,Woocommerce,Cart,Woocommerce Subscriptions,在WooCommerce中,我使用以下挂钩功能更改购物车中产品的价格: add_action('woocommerce_before_calculate_totals', 'set_custom_price',1000,1); function set_custom_price($cart_obj) { foreach ($cart_obj->get_cart() as $key => $value) { if($value['alredy_have_numb

在WooCommerce中,我使用以下挂钩功能更改购物车中产品的价格:

add_action('woocommerce_before_calculate_totals', 'set_custom_price',1000,1);
function set_custom_price($cart_obj) {
    foreach ($cart_obj->get_cart() as $key => $value) {
        if($value['alredy_have_number'] == true) {
            $value['data']->set_price(0.90);
        }
    }
}

它的工作原理很好,经常性的价格,但我想改变订阅产品的注册费。我可以使用什么函数或挂钩?

要更改某些特定于购物车项目的元数据,如订阅注册费,您将使用
WC\u数据
方法,该方法可用于任何
WC\u产品
对象,如订阅产品

要使用的相关订阅注册费
meta_键
,因此在您的挂钩功能代码中,您可以通过以下方式更改其价格:

add_action( 'woocommerce_before_calculate_totals', 'change_subscription_data', 1000, 1 );
function change_subscription_data( $cart ) {
    if (is_admin() && !defined('DOING_AJAX'))
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {

        // Check that product custom cart item data "alredy_have_number" exist and is true
        if( isset($cart_item['alredy_have_number']) && $cart_item['alredy_have_number'] ) {

            // Change subscription price
            $cart_item['data']->set_price(10.60);

            // Only for subscription products
            if ( in_array( $cart_item['data']->get_type(), ['subscription', 'subscription_variation']) ) {
                // Change subscription Sign up fee
                $cart_item['data']->update_meta_data('_subscription_sign_up_fee', 3.40);
            }
        }
    }
}

代码进入活动子主题(或活动主题)的functions.php文件。经过测试,效果良好。

谢谢,伙计。。。此行为我节省了$cart\u item['data']->更新元数据(“订阅费”、“注册费”,3.40);