【问题标题】:Saving a product meta field to order item meta in WooCommerce保存产品元字段以在 WooCommerce 中订购项目元
【发布时间】:2021-08-31 13:47:14
【问题描述】:

第一次发帖……希望我做得正确。 :)

我目前正在使用 sn-p 将自定义产品字段(购买价格)保存到订单项元数据中。我们想要这样做的原因是在接受订单期间购买价格会发生变化。为了生成准确的报告 - 我们需要知道下订单时设置的采购价格字段(自定义产品字段)。只需导出自定义字段 (_wcj_purchase_price) 即可提供当前值,该值可能不是当前值。

存储购买价格的自定义字段名为 _wcj_purchase_price,我正在尝试创建一个名为 _purchase_price 的自定义订单项目元字段,该字段在下订单时添加已创建。

这是我到目前为止所获得的代码,从我的尝试来看,但它的工作并不完全正确。我确信答案对某人来说是显而易见的,但我现在非常困惑!

add_action( 'wc_add_order_item_meta', 'save_item_sku_order_itemmeta', 10, 3 );

function save_item_sku_order_itemmeta( $item_id, $values, $cart_item_key ) {
        $purchasep = get_post_meta( $values[ 'product_id' ], '_wcj_purchase_price', true );
        wc_add_order_item_meta( $item_id, '_purchase_price', $purchasep , false );
}

有什么想法或建议吗?如果有什么不清楚的地方请告诉我。

非常感谢!

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    您确定有一个名为“wc_add_order_item_meta”的过滤器吗?

    这种情况下的正确过滤器可以是 woocommerce_new_order。

    add_action('woocommerce_new_order', function ($order_id) {
         // your code here
    }, 10, 1);
    

    例如,您可以使用这样的代码:

    add_action('woocommerce_new_order', function ($order_id) {
         $order = wc_get_order( $order_id );
         foreach( $order->get_items() as $item_id => $item ){
           $product_id = $item->get_product_id();
           $purchasep = get_post_meta( $product_id, '_wcj_purchase_price', true );
           wc_add_order_item_meta($item_id, '_purchase_price', $purchasep , false );
         }
     }, 10, 1);
    

    【讨论】:

    • 感谢您的帮助!我想我对钩子和过滤器感到困惑。我刚刚尝试了您的代码,但不幸的是,我在报告(来自 db)或订单摘要中都没有看到新产品元数据。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多