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.

Newsletter abonnieren

Schaue unsere Datenschutzverordnung an

Das könnte dich auch interessieren

Anleitung: WooCommerce mit den Gutenberg Blocks verwenden

Seit WordPress 5.0 hast du die Möglichkeit, WooCommerce Produkte einfach per Drag & Drop in deine Beiträge und Seiten einzufügen - der neue Gutenberg Ed ...

Mehr erfahren

Neues Plugin: B2B Market für WooCommerce

B2B Market ist die erste deutschsprachige Lösung für B2B-Shops mit WooCommerce und WordPress. Verkaufe an B2B und an B2C, erfülle die gesetzlichen Anfor ...

Mehr erfahren

WooCommerce Projekte vorgestellt: Die Beer Ambassadors - Bierspezialitäten im Abo

Die Beer Ambassadors haben einen ganz besonderen Onlineshop auf die Beine gestellt - mit WooCommerce und German Market. Wir haben die beiden Gründer Thoma ...

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>