我试图通过使用Ready_by
设置的时间并从中减去一个小时来将元Order Due Date
添加到订单中。该Order Due Date
使用插件Order Delivery Date Pro进行设置,该插件向结帐添加了日历日期/时间选择器。
我一直在尝试在钩子woocommerce_checkout_create_order
和woocommerce_thankyou
之间进行操作,但无法正常工作。
这是我到目前为止在functions.php中拥有的代码:
// Assign default ready by time by deducting an hour from the delivery due time
add_action('woocommerce_thankyou', 'define_default_ready_by_time', 10, 1);
function define_default_ready_by_time( $order_id ) {
$order = wc_get_order($order_id);
$order_due_time = get_post_meta($order, 'Order Due Date', true);
$ready_by_default = date('H:i',strtotime('-1 hour',strtotime(date('Y-m-d H:i:s',strtotime(str_replace('/','-',$order_due_time))))));
$order->update_meta_data( 'Ready_by', $ready_by_default);
}
如果任何人都能对此有所了解,将不胜感激。谢谢!
答案 0 :(得分:0)
在此行
$order_due_time = get_post_meta($order, 'Order Due Date', true);
$ order是需要发布ID的对象。 See here 因此您可以使用
$order_due_time = get_post_meta($order_id, 'Order Due Date', true);
或者
This answer提供了更深入的描述,但是以下代码应该可以工作。
add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
$order_due_time = $order->get_meta('_order_due_date'); //better way to get order meta
//I'm unsure if this works from your code, need to test it, but assuming it does
$ready_by_default = date('H:i',strtotime('-1 hour',strtotime(date('Y-m-d H:i:s',strtotime(str_replace('/','-',$order_due_time))))));
$order->update_meta_data( '_order_due_date', $ready_by_default );
}