web-dev-qa-db-de.com

Durchsuchen der Spalte Anzeigename bei Verwendung von WP_User_Query

Ich verwende WP_User_Query, um eine Liste der Benutzer zurückzubringen. Gemäß diesem Artikel kann ich die Abfrage mithilfe des Parameters search_columns auf bestimmte Spalten konzentrieren (ich gehe davon aus, dass in der Tabelle wp_users).

Meine Frage:

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

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

Wie kann ich die Spalte display_name durchsuchen, wenn ich WP_User_Query verwende?

3
henrywright

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 user_search_columns Filter, um die verfügbaren Suchspalten 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 einer x markiert habe.

12
birgire

Laut dem Codex wird display_name nicht unterstützt.

Sie können den Filter pre_user_query 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 Funktion hinzufügen und entfernen.

3
shanebp