php Woocommerce - Cron作业状态更新错误

ee7vknir  于 2022-11-28  发布在  PHP
关注(0)|答案(1)|浏览(106)

我在我的网站上运行了一个cron作业,它在14天后将订单更新为自定义订单状态,当它们完成时。一切正常,但有时cron不运行,我得到这个错误。我一直在调查这个问题,但不能解决它。
我的cron工作代码是贝娄:

function completed_orders_reminder_daily_process() {
  
  $days_delay = 14;
  $one_day    = 24 * 60 * 60;
  $today      = strtotime( date('Y-m-d') );

$orderStore = (array) wc_get_orders( array(
      'limit'        => 50,
      'status'       => 'wc-completed',
      'date_created' => '<' . ( $today - ($days_delay * $one_day) ),
  ) );

if ( sizeof($orderStore) > 0 ) {   
foreach ( $orderStore as $order ) {
        if (  get_post_meta($order->get_id(), 'Reminder', true) !== 'True' )
          update_post_meta( $order->get_id(), 'Reminder', 'True');
          $order->update_status('reminder', 'Odoslaný email na recenziu');
             }

}

}
add_action( 'completed_orders_reminder_daily_process', 'completed_orders_reminder_daily_process' );

我得到的错误

Uncaught Error: Call to undefined method Automattic\WooCommerce\Admin\Overrides\OrderRefund::update_status() - Stack trace: #0 {main} thrown in line $order->update_status('reminder', 'Odoslaný email na recenziu');

我需要的是顺利运行cron作业而不会得到订单退款错误。提前感谢!

pxiryf3j

pxiryf3j1#

您对wc_get_orders的调用似乎可以返回OrderRefund的示例,而此类没有方法update_statusreference)。
您可以检查特定的对象或类别是否有method_exists的方法。
如果你想忽略所有在foreach中没有update_status方法的对象,你可以这样做:

foreach ( $orderStore as $order ) {
  // ignore all objects that can't call `update_status`.
  if (!method_exists($order, 'update_status')) continue;

  if (  get_post_meta($order->get_id(), 'Reminder', true) !== 'True' )
    update_post_meta( $order->get_id(), 'Reminder', 'True');
  $order->update_status('reminder', 'Odoslaný email na recenziu');
}

相关问题