WordPress: WP_User_Query Benutzer-IDs mittels include immer in den Ergebnissen zeigen

In diesem Beitrag geht es um die pre_user_query-Hook in WordPress. Der nachfolgende Code kann in WordPress verwendet werden, um sicherzustellen, dass bestimmte Benutzer immer in den Ergebnissen einer WP_User_Query enthalten sind, auch wenn andere Abfrageoptionen wie die Suche verwendet werden.

Beispiel

add_action( 'pre_user_query', 'add_included_users_to_query' );

function add_included_users_to_query( $user_query ) {
    if ( ! empty( $user_query->query_vars['include'] ) ) {
        $included_users = $user_query->query_vars['include'];

        if ( ! empty( $user_query->query_vars['search'] ) ) {
            // Füge die in der 'include'-Option angegebenen Benutzer-IDs zu den Suchkriterien hinzu
            $user_query->query_where .= " OR ID IN (" . implode( ',', $included_users ) . ")";
        } else {
            // Füge die in der 'include'-Option angegebenen Benutzer-IDs als weitere Abfrageoption hinzu
            $user_query->query_vars['include'] = array_merge( $included_users, $user_query->query_vars['include'] );
        }
    }
}Code-Sprache: PHP (php)

Verwendung

Der Code wird normalerweise in der functions.php-Datei eines WordPress-Themas oder in einem Plugin verwendet. Die Funktion add_included_users_to_query ist der Callback, der ausgeführt wird, wenn die pre_user_query-Hook von WordPress ausgelöst wird.

Funktionsweise

Die Funktion add_included_users_to_query nimmt die $user_query-Variable entgegen, die eine Instanz der WP_User_Query-Klasse darstellt. Wenn die include-Option in der Abfrage vorhanden ist, wird der Code dafür sorgen, dass die in der include-Option angegebenen Benutzer-IDs immer in den Ergebnissen enthalten sind, unabhängig von anderen Abfrageoptionen.

Funktionsweise im Detail

Der Code if ( ! empty( $user_query->query_vars['include'] ) ) überprüft, ob die include-Option in der WP_User_Query-Abfrage vorhanden ist. Wenn dies der Fall ist, wird die in der include-Option angegebene Liste von Benutzer-IDs in der Variablen $included_users gespeichert.

Als Nächstes wird geprüft, ob auch eine Suche in der Abfrage enthalten ist. Wenn ja, werden die in der include-Option angegebenen Benutzer-IDs zu den Suchkriterien hinzugefügt, indem die $user_query->query_where-Variable manipuliert wird. Wenn die Suche jedoch nicht vorhanden ist, werden die in der include-Option angegebenen Benutzer-IDs als weitere Abfrageoption hinzugefügt, indem die $user_query->query_vars-Variable manipuliert wird.

Die Abfrageoptionen von WP_User_Query können auf verschiedene Weise manipuliert werden, um die Suche nach Benutzern in WordPress zu optimieren. Mit diesem Code können Entwickler sicherstellen, dass bestimmte Benutzer immer in den Ergebnissen enthalten sind, was insbesondere dann nützlich ist, wenn diese Benutzer für die Funktionsweise der Website oder des Plugins unerlässlich sind.

Fazit

Der Code kann also in WordPress dazu verwendet werden, um bestimmte Benutzer immer in den Ergebnissen einer WP_User_Query enthalten sind, auch wenn andere Abfrageoptionen wie die Suche verwendet werden. Normalerweise wird innerhalb des WP_User_Query innerhalb der include-Option gesucht und dann doch nicht alles zurückgegeben. Mit dem obigen Code ist dies nicht der Fall und die Benutzer-IDs wandern immer mit in die Ergebnisse.

Alle Benutzer-Metafelder durchsuchen

Wenn du in WordPress nach einer Funktion suchst, die es dir ermöglicht, alle Metafelder von Benutzern in der Datenbank zu durchsuchen und dabei alle Benutzer-IDs zurückzugeben, kann der folgende Code nützlich sein:

function search_in_user_meta( string $search ) {
    global $wpdb;

    $search = $wpdb->esc_like( $search );

    $results = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT user_id FROM $wpdb->usermeta WHERE meta_value LIKE %s",
            '%' . $search . '%'
        )
    );

    return $results;
}Code-Sprache: PHP (php)

Die Funktion search_in_user_meta durchsucht alle Metafelder von Benutzern in der Datenbank nach einem Suchbegriff, der als Parameter string $search übergeben wird. Der Code verwendet die globale $wpdb-Variable, um auf die WordPress-Datenbank zuzugreifen.

Zunächst wird der Suchbegriff mit der Funktion $wpdb->esc_like() escaped, um eine sichere Suche durchzuführen und SQL-Injektionen zu vermeiden.

Dann wird eine SQL-Abfrage mit der prepare()-Funktion von $wpdb erstellt, um alle Metafelder in der usermeta-Tabelle der Datenbank zu durchsuchen, die den Suchbegriff enthalten. Die Ergebnisse werden dann als Benutzer-IDs in einem Array mit der get_col()-Funktion von $wpdb zurückgegeben.

Dieser Code ist besonders nützlich, wenn du in deinem WordPress-Projekt eine benutzerdefinierte Suche oder Filterfunktion implementieren möchtest, bei der du alle Metafelder von Benutzern durchsuchen musst. Du kannst diesen Code aber auch verwenden, um im ersten Beispiel weiter oben, im WP_User_Query die include-Option zu füllen. Dann werden die so herausgefundenen Benutzer-IDs immer mit in die Ergebnisse des WP_User_Query inkludiert.

Hinweis: Es ist wichtig zu beachten, dass der Code nur nach Metafeldern in der usermeta-Tabelle sucht und nicht in anderen Tabellen, die möglicherweise benutzerdefinierte Metafelder enthalten.