J'utilise WP_User_Query pour ramener une liste d'utilisateurs. Selon cet article , je peux concentrer la requête sur des colonnes particulières (je suppose dans la table wp_users) à l’aide du paramètre search_columns.
Ma requête:
$args = array(
'search' => 'Rami',
'search_columns' => array( 'user_login', 'user_email', 'display_name' ),
);
$user_query = new WP_User_Query( $args );
Mon objectif est que ma requête soit examinée dans la colonne display_name, mais cela ne semble pas fonctionner. Fait intéressant, display_name n'est pas une colonne mentionnée dans l'exemple de article mais c'est définitivement une colonne de la table wp_users.
Comment puis-je rechercher la colonne display_name lorsque j'utilise WP_User_Query?
Vous pouvez essayer ceci:
/**
* Add support for the "display_name" search column in WP_User_Query
*
* @see http://wordpress.stackexchange.com/a/166369/26350
*/
add_filter( 'user_search_columns', function( $search_columns ) {
$search_columns[] = 'display_name';
return $search_columns;
} );
où nous utilisons le filtre user_search_columns
pour modifier les colonnes de recherche disponibles.
Alors, quels champs pouvons-nous utiliser avec ce filtre? Voici la liste de tous les champs de la table wp_users
:
x ID
x user_login
user_pass
x user_nicename
x user_email
x user_url
user_registered
user_activation_key
user_status
display_name
où j'ai marqué les colonnes de recherche par défaut avec une x
.
Selon le codex , display_name n'est pas supporté.
Vous pouvez utiliser le filtre pre_user_query.
function henry_display_name_find( $query ) {
global $wpdb;
/* you don't say where the name comes from - this assumes a $_POST field */
$display_name = $_POST['display_name'];
$use_like_syntax = false;
if ( $use_like_syntax = true ) {
$query->query_where .= $wpdb->prepare( " AND $wpdb->users.display_name LIKE %s", '%' . like_escape( $display_name ) . '%' );
} else {
$query->query_where .= $wpdb->prepare( " AND $wpdb->users.display_name = %s", $display_name );
}
}
add_action( 'pre_user_query', 'henry_display_name_find' );
Vous voudrez probablement ajouter et supprimer le filtre dans une fonction.