繁体   English   中英

在 WooCommerce 中自动添加自定义订单发货项目元数据

[英]Automatically add custom order shipping item meta data in WooCommerce

我知道如何在订单运输方式上添加元数据:

$shippingMethodItem->update_meta_data('num_packages', 0);

但是我想在下订单时自动添加/更新此元数据,或者当有人手动添加/编辑订单项目时。

我已经尝试过没有结果:

add_action( 'woocommerce_checkout_create_order_shipping_item', [$this, 'actionCheckoutCreateOrderShippingItem'] );

...

public function actionCheckoutCreateOrderShippingItem ($shippingMethodItem, $package_key, $package, $order)
{
    $shippingMethodItem->update_meta_data( 'num_packages', 0);
    $shippingMethodItem->save();
}

以下将通过结帐和/或手动管理订单在订单上添加自定义特定订单“运输”项目元数据:

// For new orders via checkout
add_action( 'woocommerce_checkout_create_order_shipping_item', 'action_checkout_create_order_shipping_item', 10, 4 );
function action_checkout_create_order_shipping_item ( $item, $package_key, $package, $order ){
    $item->update_meta_data( 'num_packages', 0 );
}

// For manual admin orders
add_action( 'woocommerce_saved_order_items', 'action_saved_order_items_callback', 10, 2 );
function action_saved_order_items_callback( $order_id, $items ) {
    if ( isset( $items['shipping_method_id'] ) ) {
        foreach( $items['shipping_method_id'] as $item_id ) {
            $num_packages = wc_get_order_item_meta($item_id, 'num_packages');

            if ( empty($num_packages) || $num_packages != 0 ) {
                wc_update_order_item_meta( $item_id, 'num_packages', 0 );
            }
        }
    }
}

代码进入活动子主题(或活动主题)的functions.php文件。 测试和工作。


要在带有 class (OOP) 的插件中使用此代码,请在构造函数 function 中添加以下内容:

// For checkout order
add_action( 'woocommerce_checkout_create_order_shipping_item', [$this, 'action_checkout_create_order_shipping_item'], 10, 4 );
// For checkout order
add_action( 'woocommerce_saved_order_items', [$this, 'action_saved_order_items_callback'], 10, 2 );

以及构造函数 function 之外的以下内容:

public function action_checkout_create_order_shipping_item ( $item, $package_key, $package, $order ){
    $item->update_meta_data( 'num_packages', 0 );
}

public function action_saved_order_items_callback( $order_id, $items ) {
    if ( isset( $items['shipping_method_id'] ) ) {
        foreach( $items['shipping_method_id'] as $item_id ) {
            $num_packages = wc_get_order_item_meta($item_id, 'num_packages');

            if ( empty($num_packages) || $num_packages != 0 ) {
                wc_update_order_item_meta( $item_id, 'num_packages', 0 );
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM