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

WooCommerce订阅:修改结束日期时添加订单备注失败求助

WooCommerce订阅结束日期修改时添加订单备注失败的解决

我尝试在WooCommerce订阅的结束日期被修改时自动添加一条订单备注,但目前使用的代码片段无法实现这个功能。

原代码如下:

function add_subscription_note_when_end_date_change($subscription_id){
    $subscription = wc_get_order($subscription_id);
    $old_end_date = substr($end[0],0,10);

    if($_POST['end'] !==null && $old_end_date !== $_POST['end']){
        $note = 'End date changed from '.$old_end_date. ' to ' .$_POST['end'];
        $subscription->add_order_note($note);
    }
}

add_action('woocommerce_process_shop_order_meta','add_subscription_note_when_end_date_change',0);

问题分析

  1. 变量$end未定义,直接调用$end[0]会触发PHP错误,导致函数执行中断
  2. 使用的woocommerce_process_shop_order_meta钩子是针对普通订单的,不适用于订阅订单
  3. 直接使用$_POST未做安全处理,且未验证数据是否存在
  4. 未验证获取的$subscription是否为有效的订阅对象

修正后的代码

function add_subscription_note_when_end_date_change( $subscription_id ) {
    // 获取并验证订阅对象
    $subscription = wc_get_order( $subscription_id );
    if ( ! $subscription || ! is_a( $subscription, 'WC_Subscription' ) ) {
        return;
    }

    // 获取原结束日期并格式化为Y-m-d
    $old_end_date = $subscription->get_time( 'end', 'site' );
    $old_end_date = date( 'Y-m-d', strtotime( $old_end_date ) );

    // 安全获取提交的新结束日期
    $new_end_date = isset( $_POST['end'] ) ? sanitize_text_field( $_POST['end'] ) : '';

    // 日期不一致时添加订单备注
    if ( ! empty( $new_end_date ) && $old_end_date !== $new_end_date ) {
        $note = sprintf( '结束日期已从 %s 修改为 %s', $old_end_date, $new_end_date );
        $subscription->add_order_note( $note );
    }
}
// 绑定订阅专属的保存钩子,确保触发时机正确
add_action( 'woocommerce_subscription_options_save', 'add_subscription_note_when_end_date_change', 10 );

修正说明

  • 增加订阅对象有效性校验,避免处理非订阅订单
  • 按照官方文档用法,通过get_time('end')获取原结束日期
  • 使用sanitize_text_field过滤POST数据,提升代码安全性
  • 替换为订阅专属钩子woocommerce_subscription_options_save,确保在订阅设置保存时触发
  • 调整钩子优先级为10,保证订阅数据已更新后再添加备注

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:39:24