根据特定订单状态更改自定义 WooCommerce 订单运送项目

问题描述 投票:0回答:1

我正在尝试在 WooCommerce 管理订单编辑页面中,当订单状态更改为“准备购物”时,将运输项目名称更改为“LCS Express”。另外,我正在尝试在编辑订单运输项目时更新运输选择的选项,以包括“LCS Express”运输方式

这是我的代码:

function customize_order_item_display($product, $item, $item_id) {
    // Get the order ID
    $order_id = $item->get_order_id();

    // Get the order object
    $order = wc_get_order($order_id);

    // Check if the payment status is "ready-to-ship"
    if ($order->get_status() === 'ready-to-ship') {
        // Modify the shipping method
        $new_shipping_method = 'LCS Express'; // Replace with your desired shipping method

        // Get the shipping method data
        $shipping_method_data = $item->get_data()['shipping'];

        // Set the new shipping method name
        $shipping_method_data['name'] = $new_shipping_method;

        // Set the new shipping method ID
        $shipping_method_data['method_id'] = sanitize_title($new_shipping_method);

        // Update the item with the modified shipping method data
        $item->set_props(array('shipping' => $shipping_method_data));
        $item->save();

        // Modify the shipping input fields using JavaScript
        ?>
        <script type="text/javascript">
            jQuery(document).ready(function($){
                // Set the shipping method name in the input field
                $('input.shipping_method_name').val('<?php echo esc_js($new_shipping_method); ?>');
                
                // Set the shipping method ID in the select field
                $('select.shipping_method').val('<?php echo esc_js($shipping_method_data['method_id']); ?>');
            });
        </script>
        <?php
    }
}
add_action('woocommerce_admin_order_item_values', 'customize_order_item_display', 10, 3);
php woocommerce hook-woocommerce orders shipping-method
1个回答
0
投票

您的代码中有多个错误,并且您没有使用正确的钩子和正确的方法来执行此操作。始终使用

WC_Order_Item
WC_Order_Item_Shipping
可用的 setter 方法来更改订单“运输”商品。

当订单状态更改为“准备发货”时,最好使用专用转换订单状态挂钩之一来更改订单。

尝试以下操作:

add_action( 'woocommerce_order_status_ready-to-ship', 'customize_order_shipping_item_on_ready_to_ship', 10, 2 );
function customize_order_shipping_item_on_ready_to_ship( $order_id, $order ) {
    // Iterating through order shipping items
    foreach( $order->get_items( 'shipping' ) as $item_id => $item ) {
        $method_name = __('LCS Express'); // New shipping method name 

        $item->set_name($method_name);
        $item->set_method_title($method_name);
        $item->set_method_id( sanitize_title($method_name) );
        $item->save();
    }
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并工作。

相关:

© www.soinside.com 2019 - 2024. All rights reserved.