我正在尝试在 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);
您的代码中有多个错误,并且您没有使用正确的钩子和正确的方法来执行此操作。始终使用
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 文件中(或插件中)。已测试并工作。
相关: