![](/img/trans.png)
[英]Display billing and shipping fields in "Pay to order" page Woocommerce
[英]Display Products Shipping Classes in WooCommerce order edit page
我正在使用一個函數,它允許我根據每種產品的運輸類別計算購物車中的多個運費。 功能沒有問題,很完美。 但是我在woocommerce的管理領域查看請求的時候,需要在提交的方法中標識每個item對應的類名。
也就是說,我需要區分每個類別的物品,因為我使用運輸類別來通知不同的供應商在商店下的訂單。
但我不知道如何進行這種調整。
下面是我使用的函數,使用基於創建的類的包。 該函數負責根據運輸等級計算購物車中的運費。 如何在商店管理的訂單頁面上顯示運輸類別名稱?
function custom_split_shipping_packages_shipping_class( $packages ) {
// Reset all packages
$packages = array();
$regular_package_items = array();
$split_package_items = array();
$split_shipping_class = 'da-vinci'; // Shipping class slug
foreach ( WC()->cart->get_cart() as $item_key => $item ) {
if ( $item['data']->needs_shipping() ) {
if ( $split_shipping_class == $item['data']->get_shipping_class() ) {
$split_package_items[ $item_key ] = $item;
} else {
$regular_package_items[ $item_key ] = $item;
}
}
}
// Create shipping packages
if ( $regular_package_items ) {
$packages[] = array(
'contents' => $regular_package_items,
'contents_cost' => array_sum( wp_list_pluck( $regular_package_items, 'line_total' ) ),
'applied_coupons' => WC()->cart->get_applied_coupons(),
'user' => array(
'ID' => get_current_user_id(),
),
'destination' => array(
'country' => WC()->customer->get_shipping_country(),
'state' => WC()->customer->get_shipping_state(),
'postcode' => WC()->customer->get_shipping_postcode(),
'city' => WC()->customer->get_shipping_city(),
'address' => WC()->customer->get_shipping_address(),
'address_2' => WC()->customer->get_shipping_address_2()
)
);
}
if ( $split_package_items ) {
$packages[] = array(
'contents' => $split_package_items,
'contents_cost' => array_sum( wp_list_pluck( $split_package_items, 'line_total' ) ),
'applied_coupons' => WC()->cart->get_applied_coupons(),
'user' => array(
'ID' => get_current_user_id(),
),
'destination' => array(
'country' => WC()->customer->get_shipping_country(),
'state' => WC()->customer->get_shipping_state(),
'postcode' => WC()->customer->get_shipping_postcode(),
'city' => WC()->customer->get_shipping_city(),
'address' => WC()->customer->get_shipping_address(),
'address_2' => WC()->customer->get_shipping_address_2()
)
);
}
return $packages;
}
add_filter( 'woocommerce_cart_shipping_packages', 'custom_split_shipping_packages_shipping_class' );
我還沒有辦法在訂單運輸項目中顯示運輸類別。 但我可以通過這種方式在訂單編輯“line_items”中顯示此運輸類別:
// Display the shipping classes names in Order edit line items
add_action( 'woocommerce_after_order_itemmeta', 'custom_admin_order_itemmeta', 15, 3 );
function custom_admin_order_itemmeta( $item_id, $item, $product ){
if( ! is_admin() ) return; // only backend
// Display the shipping class names if they exist
if( $item->is_type( 'line_item' ) ){
$label = __( 'Shipping class:', 'woocommerce' );
$class_id = $product->get_shipping_class_id();
if( $class_id > 0 ){
$term = get_term_by( 'id', $class_id, 'product_shipping_class' );
$class_name = esc_html($term->name);
}
if( isset($class_name) )
echo '<div class="wc-order-item-ship-class"><strong>' . $label . '</strong> <span style="color:#ca4a1f;">' . $class_name . '</span></div>';
}
}
代碼位於活動子主題(或活動主題)的 function.php 文件或任何插件文件中。
測試和工作。 你會得到類似的東西:
注意:在 Woocommerce 3.2.x 上,我在結賬時遇到錯誤,與您的實際代碼有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.