php 自动更改Woocommerce订单状态失败->已取消

zyfwsgd6  于 2023-04-04  发布在  PHP
关注(0)|答案(2)|浏览(182)

我试图自动更改Woocommerce订单“失败”状态为“取消”状态后24小时.这意味着客户还没有能够支付他的订单.
到目前为止,我已经尝试了很多东西,但无法使其工作。下面是我创建的mu-plugin:

<?php
add_action( 'woocommerce_cancel_unpaid_submitted', 'cancel_failed_orders' );
function cancel_failed_orders() {
    $days_delay = 1; 
    $one_day    = 24 * 60 * 60;
    $today      = strtotime( date('Y-m-d') );
    $failed_orders = (array) wc_get_orders( array(
        'limit'        => -1,
        'status'       => 'wc-failed',
        'date_created' => '<' . ( $today - ($days_delay * $one_day) ),
    ) );
    if ( sizeof($failed_orders) > 0 ) {
        $cancelled_text = __("No successful payment", "woocommerce");
        foreach ( $failed_orders as $order ) {
            $order->update_status( 'wc-cancelled', $cancelled_text );
        }
    }
}

有人知道我错过了什么吗?

vc9ivgsu

vc9ivgsu1#

看起来“woocommerce_cancel_unpaid_submitted”操作不存在。您可以使用“woocommerce_cancel_unpaid_orders”操作。

lndjwyie

lndjwyie2#

这里是一个解决方案与wp-cron作业.要测试它在完全安装WP Crontrol插件,这样你就可以手动运行cron作业时,你需要它或等待1小时.你的cron作业应列为名称failed_orders_event .
禁用wp-cron和使用服务器cron,如果你想执行每小时有或没有游客。有很多信息在网上。

add_action('failed_orders_event', 'check_failed_orders_every_hour');
// The action will trigger when someone visits your WordPress site
function failed_orders_event_activation() {
    if ( !wp_next_scheduled( 'failed_orders_event' ) ) {
        wp_schedule_event( time(), 'hourly', 'failed_orders_event');
    }
}
add_action('wp', 'failed_orders_event_activation');

function check_failed_orders_every_hour() {
    $failed_orders = wc_get_orders( array(
        'limit'        => -1,
        'status'       => 'failed',
    ));

    foreach ( $failed_orders as $order ) {
        $cancelled_text = __("No successful payment", "woocommerce");
        $order->update_status( 'cancelled',$cancelled_text);
    }
    
}

相关问题