WP_User_Query um WP_Date_Query erweitern
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.


