“Seitenumbruch” (aber nicht wirklich) und Abfragen mit benutzerdefinierten Beitragstypen

Hier eher eine konzeptionelle Frage als eine strenge Code-Frage:

Arbeiten auf einer Website für einen Musiker, der Konzerte auflisten möchte, sowohl in der Zukunft als auch in der Vergangenheit. Dies sind benutzerdefinierte Post-Typen, die ein benutzerdefiniertes Feld für das Datum der Show verwenden (formatiert als JJJJMMTT). Für Abfragen und Sortierungen ist das Datum der Show das kritische Bit der Daten, im Gegensatz zum Veröffentlichungsdatum des Posts, was irgendwie irrelevant ist.

Hier ist die Seite, die zukünftige und vergangene Shows für das laufende Jahr zeigt: http://dev.bobpassaro.com/david/concerts/

Die Abfrage, um dies zu generieren (eigentlich zwei Abfragen und Schleifen):

 'concert', 'meta_key' => 'date', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => 'date', 'value' => date('Ymd'), 'compare' => '>=', ), ) ); //Query $args for past concerts, ordered most recent to oldest $past_args = array( 'post_type' => 'concert', 'meta_key' => 'date', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => 'date', 'value' => array(date('Y') . '0101',date('Ymd')), 'compare' => 'BETWEEN', ), ) ); ?> 

Du wirst auch (am Ende dieser Seite) sehen, dass ich die älteren Konzerte “paginiert” habe und sie nach Jahren gruppiert habe. (Reguläre WP-Paginierung mit benutzerdefinierten Post-Typen ist ein Schmerz, aber es ist sowieso nicht das, was ich will. Ich möchte keine Seiten mit gleicher Anzahl von Konzerten, ich möchte Seiten mit Konzerten gruppiert nach Jahr.) Also was ich getan habe ist Erstellen Sie eine andere Vorlage mit einer ähnlichen Abfrage:

 post_name,0,4); $year_args = array( 'post_type' => 'concert', 'meta_key' => 'date', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => 'date', 'value' => array($concert_year . '0101', $concert_year . '1231'), 'compare' => 'BETWEEN', ), ) ); ?> 

Dies wird in einer benutzerdefinierten Vorlage verwendet, die ich Seiten zuweisen, die ich für jedes Jahr eingerichtet habe. (Der Inhalt dieser Seiten ist eigentlich leer, aber der Seiten-Slug wird verwendet, um die Variable $ concert_year oben zu setzen, die es dann der Abfrage erlaubt, den richtigen Satz von Konzerten zu ziehen.) Ich benutze dann ein normales WP-Menü unten Diese Seiten enthalten alle diese Seiten und ermöglichen es den Menschen, auf die in den Vorjahren durchgeführten Ausstellungen zurückzuschauen.

Das alles funktioniert wie ich will, aber es ist eine ziemlich kluge Lösung. Ich meine, wenn wir bis 2015 kommen, muss ich für 2014 eine neue Seite erstellen, sonst werden die Konzerte 2014 nirgends auftauchen. Ich möchte, dass das dynamisch passiert. Ich habe auch alle diese im Wesentlichen leeren / leeren Seiten (eine für jedes vergangene Jahr), deren einzige function ist, die Vorlage aufzurufen und im WP-Menü verwendet werden (das heißt, ihre einzige function ist es, Benutzern zu ermöglichen, die zugeordnete URL auszuwählen jedes Jahr und setzen $ concert_year für die Verwendung in der Abfrage.)

Gedanken zu einem besseren Ansatz dieses Problem?

Solutions Collecting From Web of "“Seitenumbruch” (aber nicht wirklich) und Abfragen mit benutzerdefinierten Beitragstypen"

Das ist eine schwierige Frage, denn es gibt so viele mögliche Lösungen. 😉

Ich denke, der einfachste Weg besteht darin, eine benutzerdefinierte Taxonomie “Jahr” zu erstellen und sie automatisch dem CPT-Beitrag beim Speichern hinzuzufügen, indem Sie den Haken save_post () und wp_set_object_terms () verwenden .

Sie könnten dann einfach get_terms () verwenden , um eine Liste von Jahren zu erhalten (Sie erhalten nur diejenigen, die standardmäßig Konzerte haben) und einfach mit get_term_link () auf das Archiv der Begriffe verlinken . Sie können immer noch das Standard-CPT-Archiv verwenden, um die Konzerte des aktuellen Jahres anzuzeigen.

Sie könnten eine benutzerdefinierte Abfrage-Var- und Rewrite-Regel hinzufügen, um Jahr-Archive zu verwalten:

 function wpd_concert_query_var( $query_vars ){ $query_vars[] = 'concert_year'; return $query_vars; } add_filter( 'query_vars', 'wpd_concert_query_var' ); function wpd_concert_rewrite(){ add_rewrite_rule( 'concerts/([0-9]+)/?$', 'index.php?pagename=concerts&concert_year=$matches[1]', 'top' ); } add_action( 'init', 'wpd_concert_rewrite' ); 

Dann können Sie in Ihrer Konzertvorlage prüfen, ob ein Jahr gewünscht wurde mit:

 get_query_var( 'concert_year' ); 

und Abfragen von Ereignissen aus diesem Jahr.