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; // 確保符合的作者再進行查詢

目錄

發佈留言

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

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

Picture of 賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2024 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!