WP_User_Query um WP_Date_Query erweitern

WP_User_Query um WP_Date_Query erweitern 1

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.

Newsletter abonnieren

Das könnte dich auch interessieren

Lokale Installation von WordPress und WooCommerce

Über eine lokale Installation von WordPress auf deinem Computer kannst du WooCommerce testen, Updates einspielen und Anpassungen durchführen - alles r ...

Mehr erfahren

WooCommerce einrichten Teil 1 - Grundeinstellungen & Produkte

Aktualisiert am 14.12.2020 Die Onlineshop-Erweiterung WooCommerce ist ein mächtiges Werkzeug mit unzähligen Einstellungsmöglichkeiten. Der nachfolgen ...

Mehr erfahren

Online-Kurse mit WordPress erstellen und mit WooCommerce verkaufen

Online-Kurse sind zeitgemäß und vermitteln ortsunabhängiges Wissen an Lernende. Über den Verkauf von Online-Kursen mit WooCommerce kannst du dein eigen ...

Mehr erfahren

Schreibe eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Du kannst folgende HTML Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>