WooCommerce 訂單搜尋強化:為什麼輸入姓名或 Email 找不到訂單?

因為 WooCommerce 預設只搜尋部分欄位

後台搜尋(右上角搜尋框)預設會搜尋:

  • 訂單編號(ID)

  • 帳單姓氏(Billing Last Name)

  • 交易編號 (data-order-id)

  • 客製欄位

但「名字」、「Email」、「電話」這些我們最需要搜尋的欄位,有時並沒有被加入搜尋條件。

尤其是輸入:

這些其實都存在於:


_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. 加入後的效果是什麼?

後台搜尋時,輸入:

名字

姓氏

Email

手機

WooCommerce 都會從 postmeta 裡比對並且找出符合的訂單。

 

總結

WooCommerce 預設搜尋條件有限,導致用姓名、Email、電話常常找不到訂單。只要加入一段簡單的 Hook後,讓後台能搜尋姓名、Email、電話,搜尋結果更準確客服處理更快,而且不會影響網站其他區塊,是非常安全且實用的優化。