You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改WooCommerce购物车中YITH订阅产品的续费价格

修改YITH Subscription插件的续费价格

你当前的代码仅能修改订阅产品的初始价格(首月周期),但YITH Subscription的续费价格是单独存储和计算的,不会跟随产品的常规价格变动。要修改续费价格,需要针对订阅专属的参数或钩子进行调整,以下是两种可行方案:

方案1:在购物车计算时直接更新续费价格

在现有代码修改初始价格的逻辑后,同步更新购物车项中的续费价格参数,确保首月和续费价格保持一致(或按你的需求自定义)。修改后的完整代码如下:

add_action('woocommerce_before_calculate_totals', 'add_product_to_cart_on_update');

function add_product_to_cart_on_update($cart)
{
    if (is_admin() && ! defined('DOING_AJAX')) {
        return;
    }
    
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;
    
    $product_id_to_add = get_field('subscription_product', 'option');
    $sale_qty = get_field('number_of_sensors', 'option');

    $qty = 0;
    $found = false;
    $product_cart_key_to_add = '';
    $sensor_products = array();

    // 遍历购物车收集传感器产品数据
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product_id = $cart_item['product_id'];
        $product_qty = $cart_item['quantity'];
        $is_sensor_product = get_post_meta($product_id, '_sensor_product', true);

        if ($is_sensor_product === 'yes') {
            $sensor_products[$cart_item_key]['qty'] = $product_qty;
        }

        if ($product_id_to_add == $product_id) {
            $found = true;
            $product_cart_key_to_add = $cart_item_key;
        }
    }

    // 计算传感器产品总数量
    foreach ($sensor_products as $sensor_p) {
        $qty += $sensor_p['qty'];
    }

    // 获取订阅产品对象
    $product = wc_get_product($product_id_to_add);
    if (!$product || !$product->is_type('subscription')) return;

    $target_price = $product->get_regular_price();
    // 数量达标时使用促销价格(如果有)
    if ($sale_qty != null && $qty >= $sale_qty) {
        $target_price = $product->get_sale_price() ?: $target_price;
    }

    if ($found) {
        // 更新订阅产品数量
        $cart->set_quantity($product_cart_key_to_add, $qty);
        // 修改初始价格
        $cart->get_cart_item($product_cart_key_to_add)['data']->set_price($target_price);
        // 修改续费价格
        $cart_item = $cart->get_cart_item($product_cart_key_to_add);
        $cart_item['yith_subscription_recurring_price'] = $target_price;
        $cart->cart_contents[$product_cart_key_to_add] = $cart_item;
    } else {
        // 添加订阅产品到购物车
        if ($qty > 0) {
            $cart_item_key = $cart->add_to_cart($product_id_to_add, $qty);
            // 修改初始价格和续费价格
            $cart->get_cart_item($cart_item_key)['data']->set_price($target_price);
            $cart_item = $cart->get_cart_item($cart_item_key);
            $cart_item['yith_subscription_recurring_price'] = $target_price;
            $cart->cart_contents[$cart_item_key] = $cart_item;
        }
    }
}

方案2:使用YITH专属钩子全局修改续费价格

如果需要更灵活地控制续费价格(比如在多个场景生效),可以使用YITH提供的yith_wc_subscription_recurring_price钩子,全局调整订阅产品的续费价格:

add_filter('yith_wc_subscription_recurring_price', 'custom_yith_subscription_recurring_price', 10, 3);
function custom_yith_subscription_recurring_price($recurring_price, $product, $cart_item) {
    // 仅针对目标订阅产品生效
    $product_id_to_add = get_field('subscription_product', 'option');
    if ($product->get_id() != $product_id_to_add) return $recurring_price;

    // 计算购物车中传感器产品总数量
    $qty = 0;
    foreach (WC()->cart->get_cart() as $item) {
        $is_sensor_product = get_post_meta($item['product_id'], '_sensor_product', true);
        if ($is_sensor_product === 'yes') {
            $qty += $item['quantity'];
        }
    }

    $sale_qty = get_field('number_of_sensors', 'option');
    // 根据传感器数量调整续费价格
    if ($sale_qty != null && $qty < $sale_qty) {
        return $product->get_regular_price();
    } else {
        // 数量达标时使用促销价格(如果有)
        return $product->get_sale_price() ?: $product->get_regular_price();
    }
}

注意事项

  • 确保目标产品是YITH订阅类型产品,代码中已加入is_type('subscription')判断;
  • 如果你需要不同的初始价格和续费价格,只需调整target_price或钩子中的返回值即可;
  • 测试时请清空购物车缓存,避免旧数据干扰。

内容的提问来源于stack exchange,提问作者hesham shawky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:39:52