WP Query 作者模糊搜尋

我需要的功能是在搜尋時可以輸入關鍵字找到特定作者的文章。由於 WP_Query 預設只能用 user_id 跟 user_nicename 去篩選文章作者,如果使用者輸入的關鍵字並非作者的精準名字就會搜尋不到。

我採用的解法是先用 WP_User_Query 找出符合條件的 user_id 後再丟進去 WP_Query 裡面當參數,這樣就能很彈性的針對作者的特定欄位來做搜尋,像是 display_nameuser_login 以及 email 等欄位進行搜尋。

在使用 WP_User_Query 可以帶入三個參數,第一個是 search,也就是要比對的關鍵字,比較特別的地方是它可以帶入萬用字元 * 來判斷比對的關鍵字是在開頭、結尾還是中間,第二個參數是 search_columns,也就是要進行比對的使用者欄位,可以用陣列帶入多個欄位。

最後是 fields,也就是查詢完成後要回傳的資料內容,由於 WP_Query 的參數可以直接吃使用者 ID 的陣列,因此直接回傳 ID 是最方便的。在取得 WP_User_Query 物件後,最後用 get_reults() 方法就能得到查詢結果。

$args_user = array(
	'search'         => '*' . $keyword . '*',
	'search_columns' => array( 'user_login', 'user_email', 'display_name', 'first_name', 'last_name' ),
	'fields'         => 'ID',
);

$users = new WP_User_Query( $args_user );

$args_post_author = array(
	'posts_per_page' => 20,
	'post_type'      => 'mcs',
	'author__in'     => $users->get_results(),
);

$query_post_author = count( $users->get_results() ) > 0 ? new WP_Query( $args_post_author ) : 0; // 確保符合的作者再進行查詢
AI 文章延伸

讓 AI 幫你讀這篇文章

選擇平台後會自動帶入閱讀脈絡,快速整理重點、補齊盲點,並延伸到同站相關文章。

發佈留言

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

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料