愿所有的美好和期待都能如约而至

WooCommerce:基于自定义元值的变更单状态

本文介绍了WooCommerce:基于自定义元值的变更单状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!问题描述我正尝试每天运行以下功能,以自动完成超过10天且具有特定自定义

发布时间:  来源:互联网  作者:匿名  标签:状态 定义 变更  热度:37.5℃

本文介绍了WooCommerce:基于自定义元值的变更单状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正尝试每天运行以下功能,以自动完成超过10天且具有特定自定义元值的所有处理顺序。

我使用的是以下代码片段,但是这根本不起作用。知道为什么吗?

function autoComplete(){    $orders = wc_get_orders( array(            'status' => 'wc-processing',            'date_created' => '<' . ( time() - 10 * DAY_IN_SECONDS ),            'meta_key'     => 'status_us',            'meta_compare' => '=',            'meta_value'   => 'Sent to USA',    ) );    foreach ($orders as $order){        $order->update_status( 'completed' );    }}if ( ! wp_next_scheduled( 'autoComplete' ) ) {    wp_schedule_event( time(), 'daily', 'autoComplete' );} 

我有没有遗漏什么错误?感谢您的帮助!

推荐答案

您尝试得很好,但犯了几个错误。

以下代码位于functions.php中。

add_action( 'wp_loaded','start_custom_code' );// Once everything theme and plugins are loaded we register our cron job.function start_custom_code() {    if ( ! wp_next_scheduled( 'bks_mark_processing_order_complete_if_sent_to_usa' ) ) {        wp_schedule_event( time(), 'daily', 'bks_mark_processing_order_complete_if_sent_to_usa' );    }}add_action( 'bks_mark_processing_order_complete_if_sent_to_usa', 'bks_mark_processing_order_complete_if_sent_to_usa' );

您的函数出现小错误bks_mark_processing_order_complete_if_sent_to_usa()

function bks_mark_processing_order_complete_if_sent_to_usa(){    $args = array(        'status' => array( 'wc-processing'),        'limit'  => -1,        'date_created' => '>' . ( time() - 864000 ), // your mistake 1        'status_us' => 'Sent to USA', // your mistake 2    );    $orders = wc_get_orders( $args );    foreach ($orders as $order){        $order->update_status( 'completed' );        $order->save(); // your mistake 3    }};

错误说明

  1. 当您的尝试方向正确但'date_created' => '<' . ( time() - 10 * DAY_IN_SECONDS ),时,您必须使用>而不是<,并且您没有实际设置DAY_IN_SECONDS,您必须将其替换为86400。因此,正确的值应该是'>' . ( time() - 864000 )。10天10 * 86400 = 864000。您可以在WooCommerce文档中阅读此说明here。

  2. 在这里,我为您创建了新的自定义变量,该变量是使用woocommerce_order_data_store_cpt_get_orders_query设置的,然后进行查询。需要添加的代码。

function handle_custom_query_var( $query, $query_vars ) {    if ( ! empty( $query_vars['status_us'] ) ) {        $query['meta_query'][] = array(            'key' => 'status_us',            'value' => esc_attr( $query_vars['status_us'] ),        );    }    return $query;}add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', 'handle_custom_query_var', 10, 2 );
  1. 您已更新状态,但忘记保存。$order->save();

总之,您必须在您的函数中添加以下代码。php

add_action( 'wp_loaded','start_custom_code' );add_action( 'bks_mark_processing_order_complete_if_sent_to_usa', 'bks_mark_processing_order_complete_if_sent_to_usa' );function start_custom_code() {    if ( ! wp_next_scheduled( 'bks_mark_processing_order_complete_if_sent_to_usa' ) ) {        wp_schedule_event( time(), 'daily', 'bks_mark_processing_order_complete_if_sent_to_usa' );    }}function bks_mark_processing_order_complete_if_sent_to_usa(){    $args = array(        'status' => array( 'wc-processing'),        'limit'  => -1,        'date_created' => '>' . ( time() - 864000 ),        'status_us' => 'Sent to USA',    );    $orders = wc_get_orders( $args );    foreach ($orders as $order){        $order->update_status( 'completed' );        $order->save();    }};function handle_custom_query_var( $query, $query_vars ) {    if ( ! empty( $query_vars['status_us'] ) ) {        $query['meta_query'][] = array(            'key' => 'status_us',            'value' => esc_attr( $query_vars['status_us'] ),        );    }    return $query;}add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', 'handle_custom_query_var', 10, 2 );

以上代码已测试并正常工作。

证据:

安装WP CRON plugin以检查您的cron。参见上面的屏幕截图。您可以通过点击Run Now进行测试。

警告:
当有人访问你的网站时,WP Cron就会运行。因此,如果没有人访问,cron将永远不会运行。

阅读:https://wordpress.stackexchange.com/a/179774/204925

这篇关于WooCommerce:基于自定义元值的变更单状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,

勇敢去编程!

勇敢的热爱编程,未来的你一定会大放异彩,未来的生活一定会因编程更好!

TOP