我无法找到对我有用的答案,但我发现:https://danielbachhuber.com/2012/02/07/include-posts-by-matching-authors-in-your-search-results/
在未进行任何编辑的情况下工作。以下是链接过期时的代码:
/**
* Include posts from authors in the search results where
* either their display name or user login matches the query string
*
* @author danielbachhuber
*/
add_filter( \'posts_search\', \'db_filter_authors_search\' );
function db_filter_authors_search( $posts_search ) {
// Don\'t modify the query at all if we\'re not on the search template
// or if the LIKE is empty
if ( !is_search() || empty( $posts_search ) )
return $posts_search;
global $wpdb;
// Get all of the users of the blog and see if the search query matches either
// the display name or the user login
add_filter( \'pre_user_query\', \'db_filter_user_query\' );
$search = sanitize_text_field( get_query_var( \'s\' ) );
$args = array(
\'count_total\' => false,
\'search\' => sprintf( \'*%s*\', $search ),
\'search_fields\' => array(
\'display_name\',
\'user_login\',
),
\'fields\' => \'ID\',
);
$matching_users = get_users( $args );
remove_filter( \'pre_user_query\', \'db_filter_user_query\' );
// Don\'t modify the query if there aren\'t any matching users
if ( empty( $matching_users ) )
return $posts_search;
// Take a slightly different approach than core where we want all of the posts from these authors
$posts_search = str_replace( \')))\', ")) OR ( {$wpdb->posts}.post_author IN (" . implode( \',\', array_map( \'absint\', $matching_users ) ) . ")))", $posts_search );
return $posts_search;
}
/**
* Modify get_users() to search display_name instead of user_nicename
*/
function db_filter_user_query( &$user_query ) {
if ( is_object( $user_query ) )
$user_query->query_where = str_replace( "user_nicename LIKE", "display_name LIKE", $user_query->query_where );
return $user_query;
}