如何获取和更新订单元?

时间:2019-01-17 21:28:53

标签: php wordpress woocommerce

我试图通过使用Ready_by设置的时间并从中减去一个小时来将元Order Due Date添加到订单中。该Order Due Date使用插件Order Delivery Date Pro进行设置,该插件向结帐添加了日历日期/时间选择器。

我一直在尝试在钩子woocommerce_checkout_create_orderwoocommerce_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);
}

如果任何人都能对此有所了解,将不胜感激。谢谢!

1 个答案:

答案 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  );
}