【发布时间】:2018-07-16 13:34:45
【问题描述】:
我正在使用 WooCommerce,并尝试检查是否存在逾期付款。每天下午 6 点之后支付的任何订单(有时支付网关有点慢),都会恢复到“暂停”状态。我希望此处理仅适用于明天交货日期的订单。
这不起作用(“暂停”状态从未实现):
add_action( 'woocommerce_order_status_processing', 'check_late_payment' );
function check_late_payment( $order_id ){
date_default_timezone_set('Asia/Jakarta');
if (time() > strtotime("18:00:00")) {
$order = wc_get_order( $order_id );
if ( get_post_meta( $order_id, '_orddd_timestamp', true ) == strtotime('tomorrow') ) {
$order->update_status( 'on-hold' );
}
}
}
但是,这是有效的:
add_action( 'woocommerce_order_status_processing', 'check_late_payment' );
function check_late_payment( $order_id ){
date_default_timezone_set('Asia/Jakarta');
if (time() > strtotime("18:00:00")) {
$order = wc_get_order( $order_id );
if ( get_post_meta( $order_id, '_orddd_timestamp', true ) == '1531785600' ) {
$order->update_status( 'on-hold' );
}
}
}
唯一的区别是 strtotime 和常量字符串。我检查了元值,它与 strtotime ('明天')完全相同。
任何想法为什么这不起作用?
因为我需要它始终是明天的时间戳。
谢谢。
【问题讨论】:
-
为什么要与单个固定的 unix 时间戳值进行比较?你知道这不是“一天”,而是一秒钟,对吧?因此,您想要在这里获得的所有相关订单,都将当天的特定秒数设置为订单时间戳......?
-
您是否尝试将
strtotime('tomorrow')分配给变量并进行比较? -
@CBroe 你说得对,所有交货日期格式都设置为该特定时间,日期为 00:00:00。这很不寻常,我知道。
-
@OutsourceWordPress 是的,我确实尝试过,甚至将元值放在变量中并尝试比较它,但不起作用。
-
您是否尝试过回显
strtotime('tomorrow'),它回显相同的“1531785600”(只是为了确认时区问题)?
标签: php wordpress woocommerce