【问题标题】:Update order status from processing to completed in WooCommerce automatically on every Monday每周一自动在 WooCommerce 中将订单状态从处理中更新为完成
【发布时间】:2020-08-11 00:21:17
【问题描述】:

我需要在 WooCommerce 中的特定时间段后更新所有“处理”订单的订单状态。 我的目标是通过 cron 工作来做到这一点。所以我在 WP Control 中添加了这个钩子,每周安排:woocommerce_complete_processing_order_weekly

这是我在 functions.php 中添加的内容:

add_action( 'woocommerce_complete_processing_order_weekly', 'custom_woocommerce_complete_order', 10, 0 );

function custom_woocommerce_complete_order ( $order_id ) { 
    if ( ! $order_id ) {
        return;
    }

    $order = wc_get_order( $order_id );
    $order->update_status( 'completed' );
}

你能帮我解决这个问题吗?

【问题讨论】:

  • 您想在一周后将所有处理状态更新为完成吗?
  • 嗨 - 可以。但最好的情况是它在付款后一周更新状态。但是如果所有的订单都改成在星期一完成也没关系...
  • 更改所有订单方式(任何状态为已完成)?
  • 不,只有状态为“处理中”的订单

标签: php wordpress woocommerce cron orders


【解决方案1】:
add_action( 'admin_init', 'update_order_status_on_monday' );

function update_order_status_on_monday() {

    if ( date( 'D', strtotime( 'now' ) ) === 'Mon' && !get_transient( '_updated_order_status_on_monday' ) ) {

        $processing_orders   = wc_get_orders( $args              = array(
            'numberposts'    => -1,
            'post_status'    => 'wc-processing',
        ) );

        if ( !empty( $processing_orders ) ) {
            foreach ( $processing_orders as $order )
                $order->update_status( 'completed' );
        }
        set_transient( '_updated_order_status_on_monday', true );
    } elseif ( date( 'D', strtotime( 'now' ) ) !== 'Mon' ) {
        delete_transient( '_updated_order_status_on_monday' );
    }
 }

将此代码添加到您的活动主题functions.php中

【讨论】:

  • 谢谢。那太棒了。但是也可以设置时间吗?所以它只在星期一设置一次状态?例如星期一凌晨 4 点?
  • @ThomasDanninger - 它将在星期一运行,所有处理订单都将更改为完成。所以可能不需要检查
  • 好的,但是如果订单是在星期一创建的,状态会立即更新吗?
  • 更新了答案
猜你喜欢
  • 2019-06-01
  • 2022-10-14
  • 2018-08-01
  • 2023-01-28
  • 2016-04-17
  • 2017-04-23
  • 2021-07-26
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多