Wildcard in WP_User_Query()

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 9 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Für nutzerbezogene Daten steht in WordPress die Klasse WP_User_Query() zur Verfügung. Üblicherweise gibt man dort einen Schlüssel mit und bekommt die entsprechenden Werte zum User zurück. Durch ein Entwicklungsthema ist mir eine Besonderheit in der Query aufgefallen, die diesen kleinen Beitrag als Folge hat. Die Klasse erlaubt das Ergänzen von * als Wildcard. Innerhalb der Klasse wird dieser Stern dann für die SQL Abfrage ersetzt (%).

Im Codex findet man beispielsweise folgendes einfaches Beispiel zur User-Abfrage.


$user_query = new WP_User_Query( array( 'search' => 'Rami' ) );

Will man vor oder nach diesem String „Rami“ per Wildcard schauen, was es weiter gibt, oder flexibler suchen, dann ist lediglich das Ergänzen von * notwendig. Dazu finde ich aktuell nichts im Codex, so dass der Hinweis hier ggf. hilfreich ist.

Im Core wird dies betrachtet:


// @see wp-includes/user.php#L599
if ( $search ) {
        $leading_wild = ( ltrim($search, '*') != $search );
        $trailing_wild = ( rtrim($search, '*') != $search );
        if ( $leading_wild && $trailing_wild )
                $wild = 'both';
        elseif ( $leading_wild )
                $wild = 'leading';
        elseif ( $trailing_wild )
                $wild = 'trailing';
        else
                $wild = false;
        if ( $wild )
                $search = trim($search, '*');

Damit kann also vor oder nach dem String ein Wildcard mitgegeben werden.


$user_query = new WP_User_Query( array( 'search' => '*Rami*' ) ); //%Rami%

$user_query = new WP_User_Query( array( 'search' => 'Rami*' ) ); //Rami%

Zum Ende nochmal der Hinweis, die Wildcard ist nur am Anfang oder Ende des Suchstrings möglich, nicht innerhalb des Strings.

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.