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

WooCommerce重新订阅时如何获取_subscription_resubscribe元数据

解决WooCommerce重新订阅时获取原订阅ID的问题

你遇到的核心问题是钩子触发时机过早,导致_subscription_resubscribe元数据还未被写入订阅/订单对象,所以返回null。以下是可行的解决方案:

推荐使用的钩子及代码示例

1. woocommerce_checkout_subscription_created钩子

这个钩子在订阅创建完成且关联订单的元数据已保存后触发,适配重新订阅场景:

function get_original_subscription_id_on_resubscribe( $subscription, $order ) {
    // 直接从订阅对象获取原订阅ID
    $original_subscription_id = $subscription->get_meta( '_subscription_resubscribe' );
    
    if ( ! empty( $original_subscription_id ) ) {
        update_option( 'cancelledSubscriptionId', $original_subscription_id );
        update_option( 'NewSubscriptionId', $subscription->get_id() );
    }
}
add_action( 'woocommerce_checkout_subscription_created', 'get_original_subscription_id_on_resubscribe', 10, 2 );

2. woocommerce_subscription_post_created钩子

这是订阅创建后的动作钩子,确保元数据已被持久化到对象中:

function get_original_subscription_id_after_creation( $subscription_id, $subscription ) {
    $original_subscription_id = $subscription->get_meta( '_subscription_resubscribe' );
    
    if ( ! empty( $original_subscription_id ) ) {
        update_option( 'cancelledSubscriptionId', $original_subscription_id );
        update_option( 'NewSubscriptionId', $subscription_id );
    }
}
add_action( 'woocommerce_subscription_post_created', 'get_original_subscription_id_after_creation', 10, 2 );

关键说明

  • 无需通过wc_get_order转换对象,WC_Subscription本身继承自WC_Order,直接调用订阅对象的get_meta方法即可获取元数据,更高效且避免不必要的转换操作。
  • 你之前使用的wcs_create_subscription和woocommerce_subscription_renewal_order_created触发时机过早,此时_subscription_resubscribe元数据尚未被写入到对象中,因此返回null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:41:04