最後更新:2026/10/15
一張訂單成立之後,同一份資料會出現在三個地方:你出貨時看的後台訂單頁、客人收到的通知信、客人下單後看到的謝謝頁(以及「我的帳戶」裡的訂單)。三個地方只要有一處看不清楚,就會多一通確認電話。
這篇處理三件常見的事:結帳時多問客人一個問題,例如希望到貨的時段;後台編輯訂單地址時,姓氏排在名字前面;謝謝頁上的電話和 Email 加上欄位名稱。
不想自己改?把這篇交給 AI
把這篇的網址(或全文)連同下面這段話貼給 AI:
我的網站是 WordPress,有裝 WooCommerce。我想照下面這篇文章,在結帳頁多問客人一個問題,並且整理後台訂單和謝謝頁的資料顯示。
請先問我:我的結帳頁是新版區塊結帳還是傳統結帳、想多問客人什麼問題、選項有哪些。
問清楚之後,再一步一步告訴我:要用哪一段程式碼、貼在哪裡、哪些地方要換成我自己的資料,以及改完怎麼測試。
如果文章的做法不適合我的網站,請直接告訴我原因和替代做法。
文章:(貼上這篇的網址,或整篇內容)
改之前先備份,密碼不要貼給 AI。
第一步:結帳時多問一題「希望到貨時段」
新版 WooCommerce 的區塊結帳頁,有一個內建的方法可以加欄位:woocommerce_register_additional_checkout_field。用它加的欄位,客人填的答案會自動存進訂單,後台訂單頁、通知信、謝謝頁也會自動顯示,不用自己寫存檔和顯示的程式碼。
// 1. 新版區塊結帳頁多問一題「希望到貨時段」(會自動存進訂單、顯示在後台和通知信)
add_action('woocommerce_init', function () {
if (!function_exists('woocommerce_register_additional_checkout_field')) {
return;
}
woocommerce_register_additional_checkout_field([
'id' => 'mimi/delivery-time',
'label' => '希望到貨時段',
'location' => 'order',
'type' => 'select',
'required' => false,
'options' => [
['value' => 'any', 'label' => '不指定'],
['value' => 'am', 'label' => '上午(9:00~13:00)'],
['value' => 'pm', 'label' => '下午(13:00~18:00)'],
],
]);
});
幾個地方可以照你的需要改:
id是這個欄位的代號,格式是「自己取的前綴/欄位名稱」,中間一定要有斜線,取了就不要再改,改了之前訂單的資料會對不上。location決定欄位放在哪一區。order放在結帳頁的「其他訂單資訊」,適合問跟這張訂單有關的事;address會放進地址欄位裡,客人每個地址都要填;contact放在聯絡資訊,跟著客人的帳號走。type除了下拉選單select,還有文字欄text和勾選框checkbox。勾選框適合「我同意客製商品不接受退換貨」這類確認。required改成true就是必填。沒有必填的欄位,標題後面會自動加上「(選填)」。
我們在測試站用區塊結帳下單,選了「下午」:結帳頁「其他訂單資訊」出現「希望到貨時段 (選填)」的下拉選單;下單後,謝謝頁、寄給客人和寄給店家的通知信、後台訂單頁都顯示了「希望到貨時段:下午(13:00~18:00)」。
要注意,這個方法只對新版區塊結帳頁有效。如果你的結帳頁是傳統的短代碼版本,欄位不會出現。怎麼分辨是哪一種結帳頁,見〈WooCommerce 結帳頁改成台灣習慣〉;傳統結帳頁要加欄位,用結帳欄位編輯類的外掛比較省事。
第二步:後台訂單的地址,姓氏排在名字前面
前台的結帳欄位改成台灣習慣之後,後台還有一個地方是外國的順序:在訂單頁按地址旁邊的鉛筆編輯時,欄位是「名字」在上、「姓氏」在下。每天處理訂單的人,常常因此把名字填進姓氏那格。
// 2. 後台編輯訂單地址時,姓氏排在名字前面(帳單、運送地址都改)
function mimi_last_name_first($fields) {
if (isset($fields['first_name'], $fields['last_name'])) {
$last = ['last_name' => $fields['last_name']];
unset($fields['last_name']);
$fields = $last + $fields;
}
return $fields;
}
add_filter('woocommerce_admin_billing_fields', 'mimi_last_name_first');
add_filter('woocommerce_admin_shipping_fields', 'mimi_last_name_first');
WooCommerce 用一個清單決定後台地址欄位的順序,我們把「姓氏」從清單裡拿出來,放回最前面。測試站的訂單編輯頁,帳單地址和運送地址都變成「姓氏、名字、公司」的順序。這段只影響後台的編輯欄位,不會改到訂單裡存的資料。
第三步:謝謝頁的電話、Email 加上欄位名稱
客人下單後的謝謝頁,帳單地址下面會列出電話和 Email,但只有號碼和信箱,沒有寫這是什麼。加上欄位名稱,客人一眼就能確認自己有沒有填錯:
// 3. 謝謝頁、我的帳戶的訂單頁:電話和 Email 前面加上欄位名稱
add_action('wp_enqueue_scripts', function () {
$css = '
.woocommerce-customer-details--phone::before { content: "電話:"; }
.woocommerce-customer-details--email::before { content: "Email:"; }
';
wp_register_style('mimi-order-labels', false);
wp_enqueue_style('mimi-order-labels');
wp_add_inline_style('mimi-order-labels', $css);
});
這段用 CSS 在電話和 Email 前面加上文字,不需要改 WooCommerce 的範本檔。傳統佈景主題(例如 Storefront)的謝謝頁,電話和 Email 都加上了;新版區塊佈景主題的「訂單確認」頁,地址區只列出電話,所以只有電話會加上「電話:」,這是區塊本身的設計,Email 不在那裡顯示。
三段程式碼可以一起貼,也可以只挑需要的。放法見〈WooCommerce 結帳頁改成台灣習慣〉。
通知信裡的資料,要不要刪?
網路上有不少教學教你把通知信裡的價格、運費那一列拿掉,常見的理由是「信要轉寄給倉庫或代工廠,不想讓他們看到售價」。這類需求比較好的做法,是另外寄一封給倉庫的信,內容只放出貨需要的品項和地址,給客人的信照樣完整。客人的通知信是他的購買憑證,金額、運費都應該寫清楚。另外寄倉庫信的做法,見〈WooCommerce 訂單通知信怎麼改〉。
訂單資料,是寫給出貨的人看的
結帳頁每多一個欄位,客人就多一個要填的地方,所以只問出貨真的需要的事。問了,就要確保它一路出現在後台、通知信和出貨單上,不然客人填了也是白填。改完之後,自己用測試訂單從結帳走到後台,看一次每個地方顯示得對不對。
如果你想一開始就把結帳流程和訂單資料規劃好,可以先看〈IG 帳號不是你的資產〉想想網站要做到什麼。MIMI 專做客製化網頁設計,購物車電商網站可以照你的出貨流程設計結帳欄位。MIMI 提供新北網頁設計服務,新北的店家可以用電話、Email 直接和設計師討論;費用可以先看首頁的製作費用參考,歡迎聯絡 MIMI。
