我正在使用下面的代码来更改woocommerce网站中订单的状态,当给定字段'ship_by_date_dont_edit'在2(或更少)天的今天日期(通过cron job).一切都很好,但我也需要考虑负天数,因为有时我们会得到最后一分钟的紧急订单,“按日期发货”将被设置为过去的日期.经过测试,似乎不包括小于0的天数,因此这些订单的状态不会改变。我希望得到一些帮助,以便我的函数适用于2天以内的日期(或更少,包括负数)。
下面是原始的(凌乱的)代码:
//==== status change to 'preparing to ship'
add_action( 'new_cron_status_update_lessthan_two_days', 'wp_order_status_update', 10, 1 );
function wp_order_status_update() {
global $wpdb;
$my_query = "SELECT * FROM wp_wc_order_stats where STATUS='wc-processing'";
$result2 = $wpdb->get_results($my_query);
foreach ($result2 as $results2) {
$order_id = $results2->order_id;
$thisacof7 = get_post_meta( $order_id, 'ship_by_date_dont_edit', true );
$date1=$thisacof7; // date("Y-m-d h:i:s");
$thisdate=date("Y-m-d h:i:s");
$dateStart = new DateTime($date1);
$datetoday = new DateTime($thisdate);
$dteDiff = $dateStart->diff($datetoday);
$Diff = $dteDiff->format("%a");
if($Diff<2) {
$order = new WC_Order($order_id);
if (!empty($order)) {
$order->update_status( 'wc-preparing-to-ship' );
}
}
}
}
我尝试添加“$Diff-〉invert;“变量,并使用else函数测试结果是否为1(这不是应该表示负数吗?),但它使我所有的订单都发生了变化,甚至包括那些日期超过60天的订单,因此我显然在那里做错了什么。
$resultPos = $Diff->invert;
elseif ($resultPos=1) {
$order = new WC_Order($order_id);
if (!empty($order)) {
$order->update_status( 'wc-preparing-to-ship' );
}
}
1条答案
按热度按时间2guxujil1#
这是最后更新的(工作的)代码。只需要在格式中应用%r来反映负数,并在invert函数中使用$Diff变量,以便为负数返回“1
'//====状态更改为'准备发货' add_action('新cron状态更新少于两天','wp订单状态更新',10,1);函数wp订单状态更新(){全局$wpdb;
}`