我需要的功能是在搜尋時可以輸入關鍵字找到特定作者的文章。由於 WP_Query
預設只能用 user_id
跟 user_nicename
去篩選文章作者,如果使用者輸入的關鍵字並非作者的精準名字就會搜尋不到。
我採用的解法是先用 WP_User_Query
找出符合條件的 user_id
後再丟進去 WP_Query
裡面當參數,這樣就能很彈性的針對作者的特定欄位來做搜尋,像是 display_name
、user_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; // 確保符合的作者再進行查詢