it-swarm.com.de

Wie filtere ich benutzerdefinierte Posts nach Tags und benutzerdefinierten Feldern?

Ich plane eine Website für einen Kunden, der möchte, dass Benutzer anstehende Ereignisse nach folgenden Kriterien filtern können:

Typ d. H. Komödie, Theater, Musik usw.

Datum Täglich oder am Wochenende

Dauer Täglich oder halber Tag

Ich möchte mich eingehender mit benutzerdefinierten Beiträgen befassen. Daher wird ein benutzerdefinierter Beitragstyp für "Ereignisse" (nicht hierarchisch) eingerichtet und beim Erstellen eines neuen Beitrags werden benutzerdefinierte Felder für Typ, Datum und Dauer hinzugefügt.

Die Frage, die ich habe, ist, wie ich query_posts () verwenden würde, um:

  1. Listen Sie die Ereignisse so auf, dass das früheste (d. H. Das nächste eintretende) Ereignis zuerst und spätere Ereignisse zuletzt angezeigt werden.
  2. Filtern nach mehreren Meta-Werten (Typ, Datum und Dauer)?

Ich nehme an, ich muss eine Reihe von Optionen in den Dropdown-Listen meines Formulars basierend auf den benutzerdefinierten Feldwerten erstellen, oder?

Ich habe bereits eine Liste mit Ereignissen für einen Kunden erstellt, jedoch ohne Filtermöglichkeiten. Ich habe diesen query_posts () -Code verwendet, um die benutzerdefinierten Posts abzurufen und Dinge zu bestellen:

// List the events by custom field 'Date':
$todaysDate = date('Y/m/d'); // set todays date to check against custom field

// query posts
query_posts('post_type=Event&meta_key=Date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC');

Ich kann jedoch nicht erkennen, wie ich diesen Code so ändern kann, dass er nach mehreren benutzerdefinierten Feldern filtert. Irgendwelche Ideen?

Vielen Dank

5
Osu

sie können benutzerdefinierte Taxonomien verwenden und Ihre query_posts viel einfacher machen! Damit meine ich eine benutzerdefinierte Taxonomie für Typ erstellen, Dauer wie folgt:

add_action('init','register_event_tax');

function register_event_tax(){
register_taxonomy('even_type',array('events'), array(
    'hierarchical' => false,
    'labels' => 'type',
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'type' ),
  ));

register_taxonomy('even_duration',array('events'), array(
    'hierarchical' => false,
    'labels' => 'type',
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'duration' ),
  ));
}

dann können Sie Beiträge wie folgt abfragen:

query_posts('post_type=Event&duration=DAILY&type=COMEDY&meta_key=Date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC');

und Sie können die Dauer und den Typ ändern, um zu filtern, welchen Typ oder welche Dauer Sie möchten.

hoffe das hilft.

3
Bainternet