wordpress - 是否需要在 Order 对象更新时调用 save 方法?
问题描述
在看到几个 @LoicTheAztec 答案包括调用 WC Order 对象方法save()
后,我开始将它们添加到我的代码中,当我想做如下事情时:
function update_next_payment_date($subscription, $old_status, $new_status) {
$new_date = array(
'next_payment' => new DateTime('August 1, 2021');
);
$subscription->update_dates($new_date);
$subscription->save();
}
我遇到了一个问题,我使用的是订单状态更新挂钩,但该save()
方法导致了无限递归循环,因为save()
调用status_transition
也再次触发了挂钩。
我似乎能够在不调用该save
方法的情况下更新日期,所以它是必需的吗?如果不是,那是为了什么?
解决方案
从这个问题来看,尚不清楚您使用哪个操作来调用您的钩子。让我们假设它被woocommerce_order_status_changed
以下行所吸引:
add_action( 'woocommerce_order_status_changed', 'update_next_payment_date', 10, 3 );
然后,为了防止无限循环,您必须在回调开始时删除您的操作并在结束时恢复它:
function update_next_payment_date( $subscription, $old_status, $new_status ) {
remove_action( 'woocommerce_order_status_changed', 'update_next_payment_date', 10 );
$new_date = array(
'next_payment' => new DateTime( 'August 1, 2021' )
);
$subscription->update_dates( $new_date );
$subscription->save();
add_action( 'woocommerce_order_status_changed', 'update_next_payment_date', 10, 3 );
}
您必须使用remove_action
相同的优先级 (10),如add_action
.
推荐阅读
- android - 如何在 Android Studio 中使用共享链接打开特定的(ReaderActivity)
- abap - 使用 ABAP 将数据库查询结果转换为 json/yaml/xml
- yii2 - Yii2 - 如何从日志文件中删除不必要的信息?
- npm - 如何使用 WebPack 2 (jQuery & ddSlick) 导入插件
- python - 如何让 pxssh 在 python 中期待其他提示
- react-native - 将数据附加到有天赋的(giftedchat 和 firebase)
- c# - 如何发送 APNS PushSharp 发送通知。它在 asp.net 中的 localhost 工作,但是当我们在 Windows 服务器中托管 API 时失败
- android - 我无法在 android 应用程序中使用 RestApi
- javascript - 带有 window.onload 的淡入淡出/速度在 50% 的所有页面加载中不起作用
- javascript - VueJS 在另一个组件中使用组件时遇到问题