it-swarm.com.de

Filtern von Admin-Einträgen nach benutzerdefiniertem Beitragstyp

Ich habe einen Beitragstyp events , der die Spalte event_date auf der Bearbeitungsseite des Administrators enthält. Ereignisdatum sind Metadaten, die von einem benutzerdefinierten Feld im Format "2016-12-31" gespeichert wurden. Ich habe ein Auswahlfeld mit Filtern für Monat/Jahr meiner Ereignisse erstellt, genau wie der Standard-WordPress-Filter für Beiträge, die auf dem Erstellungsdatum basieren. Meine Frage ist: Wie kann ich sie arbeiten lassen? Welche Filter soll ich verwenden? Ich mag es zwar, Que-Abfragen abzufangen und die Meta-Abfrage zu konfigurieren, aber ich weiß nicht, wie.

3
juniorgarcia

Sie können den Hook pre_get_posts verwenden. Im folgenden Code wird davon ausgegangen, dass Ihr Eingabename event_date lautet und die Werte im Format YYYY-MM vorliegen.

Es führt einige Überprüfungen durch (ist die Eingabe nicht leer, sind wir im Admin, ist dies die Hauptabfrage und ist dies für events?), Bevor eine Metaabfrage generiert wird, die eine SQL-IN für alle möglichen Daten innerhalb der ist angegebener Monat:

add_action( 'pre_get_posts', function ( $wp_query ) {
    if (
        ! empty( $_REQUEST['event_date'] ) &&
        is_admin() &&
        $wp_query->is_main_query() &&
        $wp_query->get( 'post_type' ) === 'events'
    ) {
        // Assuming $_REQUEST['event_date'] is in the format YYYY-MM
        $year_month = $_REQUEST['event_date'];
        $dates      = [];

        for ( $day = 1; $day <= 32; $day++ ) {
            $dates[] = "$year_month-$day";
        }

        $wp_query->set( 'meta_query', [[
            'key'     => 'event_date',
            'compare' => 'IN',
            'value'   => $dates,
        ]]);
    }   
});
3
TheDeadMedic