diff --git a/functions.php b/functions.php index 20099a3..33edbf1 100644 --- a/functions.php +++ b/functions.php @@ -13,20 +13,6 @@ function my_search_query( $query ) { } add_action( 'pre_get_posts', 'my_search_query' ); -// -// Order search results by post_title -// -function my_search_query( $query ) { - // not an admin page and is the main query - if ( !is_admin() && $query->is_main_query() ) { - if ( is_search() ) { - $query->set( 'orderby', 'post_title' ); - $query->set( 'order', 'ASC' ); - } - } -} -add_action( 'pre_get_posts', 'my_search_query' ); - function neag_scripts() { wp_enqueue_style( 'neag-style', get_stylesheet_directory_uri() . '/css/neag.css'); wp_enqueue_script('neag-custom', get_stylesheet_directory_uri().'/js/custom.js', array('jquery', 'cs')); @@ -195,5 +181,50 @@ if(function_exists("register_field_group")) 'menu_order' => 0, )); } - +//================================================== +// include authors in 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; +} ?> \ No newline at end of file