0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

WooCommerce 結帳欄位怎麼改?移除、改名、設為必填的程式碼與區塊結帳注意事項

用CSS的cursor 語法,變更滑鼠游標的形狀

WooCommerce 預設的結帳欄位是照國外的習慣設計的:名字和姓氏分開、國家、州/省、郵遞區號、地址第二行……對台灣的消費者來說,欄位太多會讓人懶得填,結帳到一半就放棄。

這篇整理怎麼用程式碼調整結帳欄位:移除、改名稱、設為必填或選填、調整順序。(原本另外兩篇〈WooCommerce 改變欄位名稱〉與〈WooCommerce「公司名稱」欄位設為必填〉的內容已經整合到這裡。)

先確認:你的結帳頁是區塊版還是傳統版?

這一步很重要,它決定了下面的程式碼有沒有用。

新版 WooCommerce 新安裝的網站,結帳頁預設是用「結帳」區塊(Checkout block)做的;比較早架設的網站,結帳頁通常是 [woocommerce_checkout] 短代碼的傳統版。

確認方式:

  1. 到後台「WooCommerce → 設定 → 進階」,在頁面設定裡看「結帳頁面」是哪一頁。
  2. 到「頁面」打開那一頁編輯:
    • 看到一整個「結帳」區塊,裡面有聯絡資訊、地址、付款等子區塊:區塊結帳。
    • 看到 [woocommerce_checkout] 短代碼,或「傳統結帳」區塊:傳統結帳。

本文的 woocommerce_checkout_fields 寫法只對傳統結帳有效。 區塊結帳頁不會套用這個 filter,程式碼加了也不會有任何反應。區塊結帳的處理方式請看後面「區塊結帳頁怎麼辦?」。

開始之前

  • 程式碼加在子主題的 functions.php,或用 Code Snippets 外掛新增,主題更新時才不會被覆蓋。
  • 動手前先備份網站,能在測試站先試過最好。

先看看不用寫程式的設定

使用傳統主題的話,「外觀 → 自訂 → WooCommerce → 結帳」裡可以直接把公司名稱、地址第二行、電話這三個欄位設成隱藏、選填或必填。只要調整這三個欄位,用這裡設定就好,不需要寫程式。

結帳欄位的名稱

woocommerce_checkout_fields 會拿到一個陣列,欄位分成四組:

  • billing:帳單資料
  • shipping:運送地址(勾選「運送到不同地址」時才會出現)
  • account:建立帳號用的欄位
  • order:訂單備註

帳單欄位的名稱:

  • billing_first_name:名字
  • billing_last_name:姓氏
  • billing_company:公司名稱
  • billing_country:國家
  • billing_address_1:地址
  • billing_address_2:地址第二行(公寓、樓層等)
  • billing_city:城市
  • billing_state:州/省
  • billing_postcode:郵遞區號
  • billing_phone:電話
  • billing_email:電子郵件

運送欄位是把 billing_ 換成 shipping_,例如 shipping_address_1;訂單備註是 order 那一組裡的 order_comments。

移除用不到的欄位

用 unset() 把欄位從陣列裡拿掉:

PHP
add_filter( 'woocommerce_checkout_fields', 'ahwei_remove_checkout_fields' );

function ahwei_remove_checkout_fields( $fields ) {
    unset( $fields['billing']['billing_last_name'] );  // 姓氏
    unset( $fields['billing']['billing_company'] );    // 公司名稱
    unset( $fields['billing']['billing_address_2'] );  // 地址第二行
    unset( $fields['billing']['billing_state'] );      // 州/省
    unset( $fields['billing']['billing_postcode'] );   // 郵遞區號

    // unset( $fields['order']['order_comments'] );   // 訂單備註

    return $fields;
}

前面加了 // 的那一行是「註解」,不會執行。想連訂單備註也移除,把那一行前面的 // 刪掉就好。反過來,想保留某個欄位,就在那一行前面加上 //,這也是舊版文章的用法。

有開啟「運送到不同地址」的話,shipping 那一組也要做一樣的調整。

哪些欄位不要刪?

  • 電子郵件(billing_email):訂單通知信要寄到這裡,不能刪。
  • 國家(billing_country):運費、稅金的計算都會用到,刪掉可能讓運送方式算不出來。只賣台灣的話,到「WooCommerce → 設定 → 一般」把銷售地點與運送地點都設成只有台灣,國家欄位就不會出現下拉選單讓客人選。
  • 金流、物流、電子發票外掛需要的欄位:例如超商取貨需要電話、宅配需要地址。刪之前先確認你用的外掛需要哪些資料。

修改欄位名稱與提示文字

每個欄位都有 label(欄位名稱)、placeholder(輸入框裡的灰色提示字)、required(是否必填)、class(寬度等樣式)、priority(排序)等屬性。只改你需要的那一個屬性就好:

PHP
add_filter( 'woocommerce_checkout_fields', 'ahwei_rename_checkout_fields' );

function ahwei_rename_checkout_fields( $fields ) {
    $fields['billing']['billing_first_name']['label'] = '姓名';
    $fields['billing']['billing_phone']['label']      = '手機號碼';
    $fields['order']['order_comments']['placeholder'] = '有什麼需要特別交代的嗎?';

    return $fields;
}

舊版文章的寫法是把整個欄位換成 array( 'label' => '詳細收件地址' ),這樣會把欄位原本的必填、寬度、排序等設定全部洗掉,欄位可能跑位或變成選填。正確的做法是像上面一樣,只修改 ['label'] 這一項。

地址類欄位要改用另一個 filter

地址、城市、州/省、郵遞區號這幾個欄位比較特別:WooCommerce 會依照客人選的國家,用 JavaScript 重新套用地址格式,所以用上面的方法改了名稱,畫面載入後可能又被換回原本的文字。

這幾個欄位改用 woocommerce_default_address_fields 修改,名稱不用加 billing_ 或 shipping_,帳單與運送地址會一起套用:

PHP
add_filter( 'woocommerce_default_address_fields', 'ahwei_address_fields' );

function ahwei_address_fields( $fields ) {
    $fields['address_1']['label']       = '詳細收件地址';
    $fields['address_1']['placeholder'] = '縣市、區、路名、門牌、樓層';

    return $fields;
}

設為必填或選填

把 required 設成 true(必填)或 false(選填)。例如公司行號的客戶多,想讓公司名稱變成必填:

PHP
add_filter( 'woocommerce_checkout_fields', 'ahwei_required_checkout_fields' );

function ahwei_required_checkout_fields( $fields ) {
    $fields['billing']['billing_company']['required'] = true;  // 公司名稱必填
    $fields['billing']['billing_phone']['required']   = true;  // 電話必填

    return $fields;
}

欄位名稱是文字,要加引號;true、false 是布林值,不用加引號。

連「我的帳號」的地址頁一起改

woocommerce_checkout_fields 只影響結帳頁。會員在「我的帳號 → 地址」編輯帳單地址時,用的是另一個 filter:woocommerce_billing_fields(運送地址是 woocommerce_shipping_fields)。想兩邊一致,改用這個寫法,注意陣列少了 ['billing'] 這一層:

PHP
add_filter( 'woocommerce_billing_fields', 'ahwei_billing_fields' );

function ahwei_billing_fields( $fields ) {
    $fields['billing_company']['required'] = true;

    return $fields;
}

woocommerce_billing_fields 會同時影響結帳頁與我的帳號頁的帳單欄位。

調整欄位順序與寬度

priority 決定欄位的順序,數字越小越前面。預設是姓名最前面、電話和電子郵件在最後。想把電話移到姓名後面:

PHP
$fields['billing']['billing_phone']['priority'] = 25;

欄位寬度用 class 控制:form-row-first、form-row-last 是左右各半,form-row-wide 是整行。移除姓氏之後,名字欄位會只剩半行寬,改成整行比較好看:

PHP
$fields['billing']['billing_first_name']['class'] = array( 'form-row-wide' );

完整範例:適合台灣的結帳欄位

把上面的調整合在一起,例如:

PHP
add_filter( 'woocommerce_checkout_fields', 'ahwei_custom_checkout_fields' );

function ahwei_custom_checkout_fields( $fields ) {
    // 移除:姓氏、地址第二行、州/省、郵遞區號
    unset( $fields['billing']['billing_last_name'] );
    unset( $fields['billing']['billing_address_2'] );
    unset( $fields['billing']['billing_state'] );
    unset( $fields['billing']['billing_postcode'] );

    // 名字改成「姓名」,並改成整行寬度
    $fields['billing']['billing_first_name']['label'] = '姓名';
    $fields['billing']['billing_first_name']['class'] = array( 'form-row-wide' );

    // 電話:改名、必填,移到姓名後面
    $fields['billing']['billing_phone']['label']    = '手機號碼';
    $fields['billing']['billing_phone']['required'] = true;
    $fields['billing']['billing_phone']['priority'] = 25;

    // 公司名稱維持選填
    $fields['billing']['billing_company']['required'] = false;

    // 訂單備註的提示文字
    $fields['order']['order_comments']['placeholder'] = '有什麼需要特別交代的嗎?';

    return $fields;
}

同一個欄位不要在好幾段程式碼裡重複修改,之後很難找出到底是哪一段生效。

區塊結帳頁怎麼辦?

結帳頁如果是區塊版,上面的 woocommerce_checkout_fields 程式碼都不會生效,有兩個方向:

方向一:用區塊編輯器調整

編輯結帳頁,點選「結帳」區塊或裡面的地址區塊,右側的設定面板可以控制公司名稱、地址第二行、電話等欄位要不要顯示、是否必填(實際的選項與位置,會依 WooCommerce 版本而有些不同)。區塊結帳的介面比較新、手機上也好填,是 WooCommerce 之後主要發展的方向。

需要新增欄位(例如統一編號)時,WooCommerce 替區塊結帳提供了「Additional Checkout Fields」的開發介面,要用新的寫法處理,舊的 woocommerce_checkout_fields 程式碼不能直接沿用。

方向二:切回傳統結帳

需要大量客製欄位,或是你用的金流、物流、電子發票外掛只支援傳統結帳時,可以把結帳頁換回短代碼:

  1. 編輯結帳頁,刪除「結帳」區塊。
  2. 加入「短代碼」區塊,填入 [woocommerce_checkout]。
  3. 更新頁面,到前台確認結帳頁正常顯示。

切回之後,本文的程式碼就會生效。切換前後,都要確認金流、物流外掛支援你用的結帳頁版本。

不想寫程式:結帳欄位編輯外掛

wordpress.org 上有不少「Checkout Field Editor」類的外掛,可以用介面新增、刪除、排序欄位。安裝前一樣要確認它支援的是傳統結帳還是區塊結帳,也不要跟自己寫的程式碼同時修改同一個欄位。

改完一定要實際下一筆訂單

  • 用無痕視窗、以訪客身分,從加入購物車一路走到付款完成。
  • 確認後台的訂單資料、客人收到的通知信,欄位都正確。
  • 金流與物流(超商取貨、宅配)都要實際測試一次。

延伸閱讀

結帳流程越順,客人越不容易在最後一步放棄。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供客製化網頁設計,也服務台北與全台客戶,購物網站的需求歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。

讓我們一起打造
您的專屬網站!