因為 WooCommerce 預設只搜尋部分欄位。
後台搜尋(右上角搜尋框)預設會搜尋:
-
訂單編號(ID)
-
帳單姓氏(Billing Last Name)
-
交易編號 (data-order-id)
-
客製欄位
但「名字」、「Email」、「電話」這些我們最需要搜尋的欄位,有時並沒有被加入搜尋條件。
尤其是輸入:
-
「王小明」
-
「name@example.com」
-
「0912xxxxxx」
這些其實都存在於:
_billing_first_name
_billing_last_name
_billing_email
_billing_phone
但 WooCommerce 不是全部都會搜尋到 → 所以就出現「找不到訂單」的情況。
解決方法:手動加入需要搜尋的欄位
以下程式碼就是補上上述缺失:
add_filter( 'woocommerce_shop_order_search_fields', 'custom_woocommerce_order_search_fields' );
function custom_woocommerce_order_search_fields( $search_fields ) {
$search_fields[] = '_billing_first_name';
$search_fields[] = '_billing_last_name';
$search_fields[] = '_billing_email';
$search_fields[] = '_billing_phone';
return $search_fields;
}
為什麼這樣修?
1. WooCommerce 的訂單資訊存在哪裡?
WooCommerce 的訂單資料大多存成 Post Meta(wp_postmeta)。
例如:
訂單欄位 Meta Key
姓氏 _billing_last_name
名字 _billing_first_name
Email _billing_email
電話 _billing_phone
這些欄位雖然存在,但 WooCommerce 沒有告訴後台「請把這些也當作搜尋條件」。
2. woocommerce_shop_order_search_fields 是什麼?
它是一個 WooCommerce 的 filter,允許你:
「告訴 WooCommerce 後台搜尋訂單時,必須額外搜尋哪些 post meta」
所以我們用這個 filter,把四個必要欄位加入搜尋範圍。
3. 加入後的效果是什麼?
後台搜尋時,輸入:
名字
姓氏
手機
WooCommerce 都會從 postmeta 裡比對並且找出符合的訂單。
總結
WooCommerce 預設搜尋條件有限,導致用姓名、Email、電話常常找不到訂單。只要加入一段簡單的 Hook後,讓後台能搜尋姓名、Email、電話,搜尋結果更準確客服處理更快,而且不會影響網站其他區塊,是非常安全且實用的優化。
