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

如何判断订阅订单是切换/父订单?优化WooCommerce代码

解决方案

WooCommerce Subscriptions 提供了专门的函数来识别切换订单(Switch Orders),我们可以直接用该函数精准排除这类订单,同时保留所有包含目标订阅产品的父订单(无论订单总额是否为0)。

修正后的代码如下:

function get_product_data( $customer_data, $order ) {
    // 确保WooCommerce Subscriptions相关函数可用,避免插件未启用时报错
    if ( ! function_exists( 'wcs_order_is_switch' ) ) {
        return $customer_data;
    }

    foreach ( $order->get_items() as $item ) {
        // 判断条件:匹配目标订阅产品ID,且当前订单不是切换订单
        if ( 12496 === $item->get_product_id() && ! wcs_order_is_switch( $order ) ) {
            $customer_data['journey_sub_variation'] = $item->get_variation_id(); // 改用官方方法获取变体ID,兼容性更好
        }
    }

    return $customer_data;
}
add_filter( 'wpf_woocommerce_customer_data', 'get_product_data', 10, 2 );

关键改动说明:

  • 移除了基于订单总额的判断,改用wcs_order_is_switch( $order )直接识别切换订单,彻底解决免费试用父订单被误排除的问题
  • 添加function_exists检查,避免WooCommerce Subscriptions未启用时触发致命错误
  • 将$item['variation_id']替换为官方方法$item->get_variation_id(),符合WooCommerce代码规范,适配后续版本更新

补充说明:

如果需要额外明确锁定父订单,可以结合wcs_is_parent_order( $order )函数扩展判断逻辑,但原需求仅需排除切换订单,上述代码已完全满足——切换订单不会被标记为父订单,而所有父订单(包括免费试用类型)都会被保留执行操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:35:57