Wordpress 指定时间过后是否自动更改订单状态?

Wordpress 指定时间过后是否自动更改订单状态?,wordpress,woocommerce,status,orders,Wordpress,Woocommerce,Status,Orders,有没有办法让WooCommerce在经过这么长时间后自动将自定义订单状态更改为其他自定义订单状态 基本上,我想所有的订单,改变为订单状态“退款提交”自动得到更改为“退款到期”后30天 我意识到这些不是正常的订单状态,我创建了自定义状态。所以,如果我不太具体的话,可能更容易理解我想要什么 我只想让更改为特定状态的订单在这么多天后自动更改为不同的状态。 我浏览了整个互联网,没有找到任何可以帮助我完成这项任务的东西。任何帮助都将不胜感激 function order_status_changer()

有没有办法让WooCommerce在经过这么长时间后自动将自定义订单状态更改为其他自定义订单状态

基本上,我想所有的订单,改变为订单状态“退款提交”自动得到更改为“退款到期”后30天

我意识到这些不是正常的订单状态,我创建了自定义状态。所以,如果我不太具体的话,可能更容易理解我想要什么

我只想让更改为特定状态的订单在这么多天后自动更改为不同的状态。

我浏览了整个互联网,没有找到任何可以帮助我完成这项任务的东西。任何帮助都将不胜感激

function order_status_changer() {

    global $wpdb;

    $result = $wpdb->get_results("
    SELECT * 
    FROM  $wpdb->posts
        WHERE post_type = 'shop_order'
        AND post_status = 'wc-completed'
");


    $args = array(
        'date_query' => array(
            array(
                'column' => 'post_modified_gmt', // post modifed one month ago
                'after' => '1 month ago',
            ),
        ),
        'meta_query' => array(
            array(
                'key' => '_refund_expired', // skip posts that is already updated in last run
                'compare' => 'NOT EXISTS'
            )
        ),
        'posts_per_page' => -1,
        'post_type' => 'shop_order',
        'post_status' => 'refund-submitted', // slug of your status to modfiy
    );
    $query = new WP_Query($args);


    $posts = $query->posts;

    foreach ($posts as $post) {

        $ord = new WC_Order($post->ID);
        $ord->update_status('refund-expired'); // Slug to which these order to be updated
        update_post_meta($post->ID, '_refund_expired', 1); // update posts meta to note the status change for skipping on next read
    }
}
order_status_changer();

将此代码添加到theme的函数中。php

将此代码添加到themes functions.php

您可以更改天数(如果($int>1)):在本例中:1天

(wp_u)是表_前缀

add_action('init', 'wp_orders');
function wp_orders()
{

    global $wpdb;

$my_query = "SELECT * FROM wp_wc_order_stats where STATUS='wc-processing'";
        $val123 = $wpdb->get_row($my_query, OBJECT);
        $result2 = $wpdb->get_results($my_query);
        foreach ($result2 as $results2) {

            $date1 = $results2->date_created_gmt;
            $order_id = $results2->order_id;

            $date2=date("Y-m-d h:i:s");

$dteStart = new DateTime($date1);
$dteEnd   = new DateTime($date2);
$dteDiff  = $dteStart->diff($dteEnd);
$Diff = $dteDiff->format("%d");
            $int = (int)$Diff;
            if($int>1)
            {
                $order = new WC_Order($order_id);
                if (!empty($order)) {
                    $order->update_status( 'completed' );
                }
            }
        }
}

很抱歉,对于退款订单,只有一种状态:
wc returned
…但不是
“退款已提交”
“退款已过期”
订单状态…我创建了自定义订单状态,这不是问题所在。我只是希望能够有一个特定的订单状态自动改变到一个不同的状态后,这么多天。我在网上查了很多遍,没有找到任何能帮我完成这项任务的东西。好的,谢谢。我编辑了我的问题;这样更好吗?你有没有找到办法?我也期待着做同样的事情。我们创建了一个名为“Shipped”的新自定义订单状态,并将其放入跟踪编号中,但7天后我们希望它移动完成。您找到解决方案了吗?您能否编写将订单状态从处理状态更改为48小时后自动退款的解决方案?@ex501-您可以用尝试的内容提出新问题。你会很快得到答案的