【发布时间】:2018-08-01 14:33:29
【问题描述】:
因为我将使用离线支付(银行对帐单 - 巴西的标准)。我想要实现的是在 9 天后自动取消“暂停”订单,也就是方坯到期的时候。我找到了一些代码参考:一个来自woocommerce github,另一个来自stackoverflow。代码的作用(在我看来有点乱)反映了“待定”取消到“暂停”。在 github 上,他们说使用 date_modified 参数来拉取最后一小时的订单很重要。我已经对此进行了测试,但它不起作用。不知道是什么问题。
<?php
function wc_foo_cancel_unpaid_onhold_orders() {
global $wpdb;
$held_duration = get_option('woocommerce_hold_stock_minutes');
if ( $held_duration < 1 || 'yes' !== get_option( 'woocommerce_manage_stock')) {
return;
}
$unpaid_orders = wc_foo_cancel_unpaid_onhold_orders( strtotime( '-' . absint( $held_duration) . ' MINUTES'. current_time( 'timestamp')));
if ( $unpaid_orders) {
foreach ( $unpaid_orders as $unpaid_orders ){
$order = wc_get_order( $unpaid_order);
if ( apply_filters( 'woocommerce_cancel_unpaid_order', 'checkout' == $order->get_created_via(), $order ) ) {
$order ->update_status( 'cancelled', _( 'Unpaid order cancelled - time limite reached.', 'woocommerce'));
}
}
}
}
add_action( 'woocommerce_cancel_unpaid_orders', 'wc_foo_cancel_unpaid_onhold_orders');
function wc_foo_get_unpaid_onhold_orders( $date ){
global $wpdb;
$args = array(
'date_modified' => '>' . ( time() - HOUR_IN_SECONDS ),
'status' => 'on-hold',);
$orders = wc_get_orders( $args );
$unpaid_orders = $wpdb->get_col( $wpdb->prepare( "
SELECT posts.id
FROM {$wpdb->posts} AS posts
WHERE posts.posts_type IN ('" . implode( "','", wc_get_order_types()). "')
AND posts.post_status = 'wc-on-hold'
AND posts.date_modified < %s
", date( 'Y-m-d H:i:s', absint( $date)) ) );
}
?>
【问题讨论】:
-
@LoicTheAztec 是原始代码的一部分:user-images.githubusercontent.com/6853605/…
-
它正在复制原始的 wc_cancel_unpaid_orders(据我了解
-
这基本上是 Webdados 在这里试图实现的目标:github.com/woocommerce/woocommerce/issues/18191
-
无论如何,您的复制无法输出任何内容……我会看看并告诉您……
-
@LoicTheAztec true...我在互联网上跑来跑去,并在我想要实现的目标方面得到了一些帮助
标签: php wordpress woocommerce hook-woocommerce