2 回答

TA貢獻1790條經驗 獲得超9個贊
以下略有不同的代碼將顯示標簽和所有可用運輸方式的成本(在一個數組 | 一個 foreach 循環中):
add_action( 'woocommerce_checkout_create_order', 'action_wc_checkout_create_order' );
function action_wc_checkout_create_order( $order ) {
$shipping_data = array(); // Initializing
// Get shipping packages keys from cart
$packages_keys = (array) array_keys(WC()->cart->get_shipping_packages());
// Loop through shipping packages keys (when cart is split into many shipping packages)
foreach( $packages_keys as $key ){
// Get available shipping rates from WC_Session
$shipping_rates = WC()->session->get('shipping_for_package_'.$key)['rates'];
// Loop through shipping rates
foreach( $shipping_rates as $rate_key => $rate ){
// Set all related shipping rate data in the array
$shipping_data[] = array(
'id' => $rate_key,
'method_id' => $rate->method_id,
'instance_id' => (int) $rate->instance_id,
'label' => $rate->label,
'cost' => (float) $rate->cost,
'taxes' => (array) $rate->taxes,
'package_key' => (int) $key,
);
}
}
// Save shipping data as order custom field
if( ! empty($shipping_data) ) {
$order->update_meta_data( '_shipping_data', $shipping_data );
}
}
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'available_shipping_rates_after_shipping_address' );
function available_shipping_rates_after_shipping_address( $order ) {
// Get shipping rates custom meta data
$shipping_data = $order->get_meta( '_shipping_data' );
if ( ! empty($shipping_data) ) {
echo '<p><strong>Shipping Methods: </strong><br>';
// Loop through shipping rates data
foreach( $shipping_data as $rate ) {
// Calculate cost with taxes
$rate_cost = $rate['cost'] + array_sum($rate['taxes']);
// Output
echo $rate['label'] . ( $rate_cost > 0 ? ': '. wc_price($rate_cost) : '' ) . '<br>';
}
echo '</p>';
}
}
代碼位于活動子主題(或活動主題)的functions.php 文件中。經過測試并有效。

TA貢獻1883條經驗 獲得超3個贊
如果有人碰巧有和我一樣的問題,我是這樣做的:
function action_woocommerce_admin_order_data_after_shipping_address( $order ) {
// Get meta
$rate_labels = $order->get_meta( '_available_shipping_methods' );
$rate_costs = $order->get_meta( '_available_shipping_method_cost' );
$methods = array ( $rate_labels, $rate_costs );
// True
if ( $rate_labels ) {
// Loop
echo '<p><strong>Shipping Methods: </strong>';
foreach(array_combine($rate_labels, $rate_costs) as $rate_label => $rate_cost) {
echo '<p>' . $rate_label . ' - $' . $rate_cost . '</p>';
}
}
}
- 2 回答
- 0 關注
- 167 瀏覽
添加回答
舉報