本篇文章更新時間:2019/06/15
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
WooCommerce 預設的運送方式順序可以從 WooCommerce->設定->運送方式
中的各個區域下 運送方式
裡的實際指定運送方式去調整順序。如下圖:
透過拖曳項目可以完成上下排序,這個排序可能會影響邏輯判斷的先後。對應前端的地方如下圖:
然後,總是會有神奇的時候需要去程式化改動前端順序,像是「希望運費能夠從低到高排序」,程式碼片段如下:
function mxp_sort_shipping_services_by_cost($available_shipping_methods, $package) {
if (!$available_shipping_methods) {
return;
}
$rate_cost_set = array();
// 抽出運費多寡
foreach ($available_shipping_methods as $rate) {
$rate_cost_set[] = $rate->cost;
}
// 排序
array_multisort($rate_cost_set, $available_shipping_methods);
return $available_shipping_methods;
}
add_filter('woocommerce_package_rates', 'mxp_sort_shipping_services_by_cost', 11, 2);
Gist: Link
再來是最直接的指定順序:
function mxp_sort_shipping_methods_order($available_shipping_methods, $package) {
if (!$available_shipping_methods) {
return;
}
// 運送方式,檢視 radio 元素,找到的 value 值
$sort_order = array(
'flat_rate:1' => null,
'some_other_shipping_method_slug:3' => null,
'flat_rate:2' => null,
);
$others = array();
// 拆解
foreach ($available_shipping_methods as $shipping_slug => $shipping_obj) {
if (array_key_exists($shipping_slug, $sort_order)) {
$sort_order[$shipping_slug] = $available_shipping_methods[$shipping_slug];
} else {
$others[$shipping_slug] = $available_shipping_methods[$shipping_slug];
}
}
// 重組合併
$sort_order += $others;
foreach ($sort_order as $id => $null_obj) {
if (empty($null_obj)) {
// 去除不存在的選項
unset($sort_order[$id]);
}
}
return $sort_order;
}
add_filter('woocommerce_package_rates', 'mxp_sort_shipping_methods_order', 11, 2);
Gist: Link
指定順序的做法還需要動到程式碼中 sort_order
陣列,要知道這個運送方法的 Slug
可以到前端畫面的單選按鈕去檢視 radio
元素,找到其 value
值後填入。邏輯是有順序會先照順序,其他照排。
消費者結帳的流程中需要選擇的這些項目都是會影響到成交,能夠自訂性越大就是對流程掌控越高。