WordPress.org

Plugin Directory

Changeset 479574


Ignore:
Timestamp:
12/22/11 22:25:49 (2 years ago)
Author:
danielbachhuber
Message:

Co-Authors Plus: Modify get_users() SQL query so that we search display_name instead of user_nicename. This should lead to much better usability

Fixes #1434

File:
1 edited

Legend:

Unmodified
Added
Removed
  • co-authors-plus/trunk/co-authors-plus.php

    r479423 r479574  
    533533     
    534534    /** 
    535      * Main function that handles search-as-you-type 
     535     * Main function that handles search-as-you-type for adding authors 
    536536     */ 
    537537    function ajax_suggest() { 
    538         global $wpdb; 
    539          
    540         global $user_level; 
    541538         
    542539        if( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'coauthors-search' ) ) 
     
    565562             
    566563    } 
    567      
     564 
     565    /** 
     566     * Get matching authors based on a search value 
     567     */  
    568568    function search_authors( $search = '' ) { 
    569         $authors = array(); 
    570         $author_fields = array( 'ID', 'display_name', 'user_login', 'user_email' ); 
    571          
    572         if ( function_exists( 'get_users' ) ) {          
    573             $search = sprintf( '*%s*',  $search ); // Enable wildcard searching 
    574             $authors = get_users( array( 'search' => $search, 'who' => 'authors', 'fields' => $author_fields ) );            
    575         } else { 
    576             // Pre 3.1 support 
    577             // This might not be the most eloquent way of doing things, but it's better than a nasty SQL query 
    578             $matching_authors = get_editable_authors( get_current_user_id() ); 
    579              
    580             foreach( $matching_authors as $matching_author ) { 
    581                 foreach( $author_fields as $author_field ) { 
    582                     if( isset( $matching_author->$author_field ) && strpos( strtolower( $matching_author->$author_field ), $search ) !== false ) { 
    583                         $authors[] = $matching_author; 
    584                         break; 
    585                     } 
    586                 } 
    587             } 
    588         } 
     569         
     570        $args = array( 
     571            'search' => sprintf( '*%s*',  $search ), // Enable wildcard searching 
     572            'who' => 'authors', 
     573            'fields' => array( 
     574                'ID', 
     575                'display_name', 
     576                'user_login', 
     577                'user_email' 
     578            ), 
     579        ); 
     580        add_filter( 'pre_user_query', array( &$this, 'filter_pre_user_query' ) ); 
     581        $authors = get_users( $args ); 
     582        remove_filter( 'pre_user_query', array( &$this, 'filter_pre_user_query' ) ); 
    589583         
    590584        return (array) $authors; 
     585    } 
     586 
     587    /** 
     588     * Modify get_users() to search display_name instead of user_nicename 
     589     */ 
     590    function filter_pre_user_query( &$user_query ) { 
     591        if ( is_object( $user_query ) ) 
     592            $user_query->query_where = str_replace( "user_nicename LIKE", "display_name LIKE", $user_query->query_where ); 
     593        return $user_query; 
    591594    } 
    592595     
Note: See TracChangeset for help on using the changeset viewer.