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 值後填入。邏輯是有順序會先照順序,其他照排。

消費者結帳的流程中需要選擇的這些項目都是會影響到成交,能夠自訂性越大就是對流程掌控越高。

Facebook 外掛功能


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *