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.