So suchen Sie die Spalte display_name bei der Verwendung von WP_User_Query

Ich verwende WP_User_Query, um eine Liste von Benutzern zurück zu holen. Laut diesem Artikel kann ich die Abfrage auf bestimmte Spalten (ich nehme in der Wp_users-Tabelle) mit dem search_columns-Parameter konzentrieren.

Meine Anfrage:

$args = array( 'search' => 'Rami', 'search_columns' => array( 'user_login', 'user_email', 'display_name' ), ); $user_query = new WP_User_Query( $args ); 

Mein Ziel ist es, meine Abfrage in der Spalte display_name aussehen zu lassen, aber das scheint nicht zu funktionieren. Interessanterweise ist display_name im Artikelbeispiel keine erwähnte Spalte, aber definitiv eine Spalte in der Tabelle wp_users.

Wie kann ich die Spalte display_name durchsuchen, wenn Sie WP_User_Query verwenden?

Solutions Collecting From Web of "So suchen Sie die Spalte display_name bei der Verwendung von WP_User_Query"

Sie können dies versuchen:

 /** * 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; } ); 

Hier verwenden wir den Filter user_search_columns , um die verfügbaren user_search_columns zu ändern.

Welche Felder können wir mit diesem Filter verwenden? Hier ist die Liste aller Felder in der Tabelle 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 

wo ich die Standardsuchspalten mit einem x markiert habe.

Entsprechend dem Codex wird display_name nicht unterstützt.

Sie können den pre_user_query-Filter verwenden.

 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' ); 

Wahrscheinlich möchten Sie den Filter in einer function hinzufügen und entfernen.