Bereits in meiner Einführung zu WP_Date_Query
habe ich angemerkt, dass get_users()
und die WP_User_Query
-Klasse zu kurz kam oder vergessen wurde. Deshalb möchte ich euch heute ein kleines Mini-Plugin vorstellen, welches die Funktionalität nachrüstet.
WP_Date_Query erweitern
Zuerst erweitern wir unsere WP_Date_Query
-Klasse um eine weitere erlaubte Spalte: "user_registered"
. Dazu filtern wir in "date_query_valid_columns"
, welche ein Array mit bereits allen registrierten Spalten übergibt. Unsere definierte Funktion fügt die fehlende Spalte hinzu, damit diese auch in der Klasse verwendet werden kann:
add_filter( 'date_query_valid_columns', 'marketpress_date_query_column_user_registered' ); /** * Adding the column "user_registered" to WP_Date_Query * * @param Array $columns * @return Array $columns */ function marketpress_date_query_column_user_registered( Array $columns ) { $columns[] = 'user_registered'; return $columns; }
WP_User_Query anpassen
Jetzt wollen wir unsere get_users()
-Funktion, bzw. WP_User_Query
erweitern. Dazu hängen wir uns einfach in "pre_user_query"
und suchen nach dem "date_query"
im internen Array "query_vars"
. Wenn der vorhanden ist, instantiieren wir unsere WP_Date_Query
-Klasse und generieren uns die WHERE-Klausel welche wir an das WHERE im WP_User_Query
noch anfügen. Ich habe mit Absicht auf die einfache Variante wie bei get_posts()
verzichtet, da diese keine komplexen WHERE-Klauseln generieren kann und ein hohes Fehlerrisiko birgt.
add_action( 'pre_user_query', 'marketpress_get_users_date_query' ); /** * Adding the missing WP_Date_Query to WP_User_Query on "user_registered" * * @param WP_User_Query $user_query * @internal WP_Date_Query * @return WP_User_Query */ function marketpress_get_users_date_query( WP_User_Query $user_query ) { if ( isset( $user_query->query_vars[ 'date_query' ] ) ) { $date_query = new WP_Date_Query( $user_query->query_vars[ 'date_query' ], 'user_registered' ); $user_query->query_where .= ' ' . $date_query->get_sql(); } return $user_query; }
Beispiele
Nun können wir User mit Datumseingrenzung laden:
Lade alle Benutzer, die sich im aktuellen Monat registriert haben.
$user_query_args = array( 'date_query' => array( array( 'month' => gmdate( 'n' ) ) ) ); $users = get_users( $user_query_args );
Lade alle neuen Benutzer, die sich in den letzten 30 Tagen registriert haben.
$user_query_args = array( 'date_query' => array( array( 'after' => '-30 days' ) ) ); $users = get_users( $user_query_args );
Fazit
Ich hoffe, wir konnten in diesem kleinen Beispiel euch noch einmal das neue WP_Date_Query
-Feature und dessen Einsatzgebiet näher bringen. An dieser Stelle möchte ich gerne noch einmal aufrufen, uns tatkräftig bei den noch 2 offenen Tickets (#25835 und #25834) im Core-Trac zu helfen.
Den kompletten Quellcode des Plugins bekommt ihr in unserem Mini-Plugins-Repository auf Github.