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; } add_filter( 'posts_search', 'db_filter_authors_search' ); /** * Modify get_users() to search display_name instead of user_nicename. Helper function used inside of db_filter_authors_search() */ 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; }
How to search posts using author display name or username
This code snippet will explain how to search post with using the author display name or username.