web-dev-qa-db-fra.com

Comment utiliser search_columns dans WP_User_Query?

J'utilise WP_User_Query pour effectuer une recherche par nom, identifiant, adresse électronique, etc. Dans ce cas, je dois utiliser le champ search_columns pour transmettre l'identifiant ou l'adresse électronique de l'utilisateur.

Ce que je fais est

$my_users = new WP_User_Query( 
                    array( 
                        'role' => $role,
                        'offset' => $offset ,
                        'number' => $number,
                        'fields' => 'all',
                        'search_columns'=> array( '5','', '[email protected]','',''),
                        //'search_columns'=> $search_columns_array,
                        'meta_query' => $meta_query_array,
                    ));

Pour référence http://wpsmith.net/2012/wp/an-introduction-to-wp_user_query-class/

2
Ajay Patel

Ceci est couvert dans le lien que vous référencez: l'attribut search_columns ne définit pas ce qui doit être recherché dans chaque colonne, mais spécifie plutôtquelcolonnes devrait être recherché pour le terme défini dans 'recherche'.

Plus précisément, vous ne pouvez rechercher qu'un seul terme - mais vous pouvez également rechercher dans une ou plusieurs colonnes.

//Search user logins & emails for 'foo'.
$my_users = new WP_User_Query( 
              array( 
                'fields' => 'all',
                'search'=>'foo',
                'search_columns'=> array('user_login', 'user_email'),
            ));

À partir de source , les valeurs par défaut sont les suivantes:

  • user_email - si un '@' est présent dans le terme de recherche
  • user_login, ID - sinon, mais le terme est numérique
  • user_url - sinon, mais le terme ressemble à une URL (et vous avez moins de 10000 utilisateurs).
  • À défaut de respecter l'un des critères ci-dessus, il recherche par défaut user_login et user_nicename

La source:

$search_columns = array();
if ( $qv['search_columns'] )
    $search_columns = array_intersect( $qv['search_columns'], array( 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename' ) );
if ( ! $search_columns ) {
    if ( false !== strpos( $search, '@') )
        $search_columns = array('user_email');
    elseif ( is_numeric($search) )
        $search_columns = array('user_login', 'ID');
    elseif ( preg_match('|^https?://|', $search) && ! wp_is_large_network( 'users' ) )
        $search_columns = array('user_url');
    else
        $search_columns = array('user_login', 'user_nicename');
}
2
Stephen Harris