你做了很好的尝试,但也犯了一些错误。
以下代码放入您的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
}
};
错误解释
-
虽然你的尝试方向正确但是'date_created' => '<' . ( time() - 10 * DAY_IN_SECONDS ),
你必须使用>
代替<
你也没有真正设置DAY_IN_SECONDS
您必须将其替换为 86400。因此正确的值是'>' . ( time() - 864000 )
。 10天10 * 86400 = 864000
。你可以阅读这个解释here https://github.com/woocommerce/woocommerce/wiki/wc_get_orders-and-WC_Order_Query#parameters在 WooCommerce 文档中。
-
在这里,我为您创建了新的自定义变量,其设置使用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 );
- 您更新了状态,但忘记保存。
$order->save();
所以总而言之,你必须在你的functions.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 );
上面的代码已经过测试并且可以工作。
Proof:
Install WP CRON 插件 https://wordpress.org/plugins/wp-crontrol/检查你的 cron。请参阅上面的屏幕截图。您可以通过点击进行测试Run Now
.
Caveat :
当有人访问您的网站时,WP Cron 就会运行。因此,如果没有人访问,?> cron 将永远不会运行。
读这个 :https://wordpress.stackexchange.com/a/179774/204925 https://wordpress.stackexchange.com/a/179774/204925