【问题标题】:Save custom delivery date from product attribute on WooCommerce order从 WooCommerce 订单的产品属性中保存自定义交货日期
【发布时间】:2020-07-13 18:57:35
【问题描述】:

我有一个自定义属性,其中产品有不同的取货时间。我想将此日期作为自定义字段添加到我的 wc 订单中,以通过 cronjob 通知我的客户订单已准备好取货。

使用下面的代码我得到了错误的日期,谁能告诉我这里出了什么问题?

foreach ( $order->get_items() as $item_id => $item ) {
    $product_id = $item->get_product_id();
    $order_id = $order->get_id();
    $new_product = new WC_Product( $product_id );  // create an object of WC_Product class

    //$product_attribut = $new_product->get_attribute( 'pa_lieferfrequenz' );  // call get_attribute method
    $product_attribut = '1week';
    $date = date('d-m-Y', strtotime("+ ' . $product_attribut . '"));
    add_post_meta( $order_id, 'lwb_pickup_time_email_notification', $date );
}

【问题讨论】:

    标签: php wordpress woocommerce strtotime orders


    【解决方案1】:

    最好在这个自定义挂钩函数中循环浏览购物车项目并保存日期,一旦下订单,然后保存数据:

    add_action( 'woocommerce_checkout_create_order', 'wc_checkout_create_order_action_callback' );
    function wc_checkout_create_order_action_callback( $order ) {
        // Loop through cart items
        foreach ( WC()->cart->get_cart() as $cart_item ) {
            $lieferfrequenz = $cart_item['data']->get_attribute( 'pa_lieferfrequenz' );
            
            if ( ! empty( $lieferfrequenz ) ) {
                // Save the date as custom order meta data
                $order->update_meta_data( 'lwb_pickup_time_email_notification', date('d-m-Y', strtotime("+ '.$lieferfrequenz.'") ) );
                break; /// stop the loop
            }
        }
    }
    

    代码在您的活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。

    但是,如果订单上有许多不同的购物车物品,您应该重新考虑不同的事情,因为此代码将采用第一个购物车物品的交货日期(或最后一个,如果您删除 break;.

    相关: Get Order items and WC_Order_Item_Product in WooCommerce 3

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 1970-01-01
      • 2021-07-10
      • 2016-12-20
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      相关资源
      最近更新 更多