Benutzerdefinierte Post-Typen archivieren

Ich entwickle mein erstes eigenes Thema von Grund auf (mit Roots als Basisframework). Das Thema hat 2 CPT, einen für Ereignisse und einen für Assoziationen mit einer Korrelation eins zu vielen zwischen den beiden (eine Assoziation kann viele assoziierte Ereignisse haben).

Ich änderte die Hauptabfrage mit pre_get_posts, um Ereignisse in homepage anzuzeigen.

Jetzt möchte ich ein Widget in der Seitenleiste erstellen, um eine Liste der Assoziationen anzuzeigen, denen Ereignisse zugeordnet sind. Ich möchte auch die Anzahl der Ereignisse in der Nähe des Namens jeder Assoziation anzeigen. Wenn ich auf einen von ihnen klicke, möchte ich auf eine Archivseite mit einer Liste von Ereignissen nur für diese Assoziation gehen.

Stellen Sie es sich wie das Standardarchiv-Plugin vor, aber mit Assoziationen anstelle von Monaten.

Ich habe keine Ahnung, welche Art von Abfrage ich in der benutzerdefinierten Widget-Hauptfunktion ausführen muss. Dies ist mein Code im Moment:

private function getAssociationsList(){ // The Query $associations = new WP_Query( array('post_type' => 'associations' ) ); if($associations->found_posts > 0) { echo '
    '; while ($associations->have_posts()) { $associations->the_post(); $events_query = array( 'post_type' => 'events', 'meta_query'=> array( array( 'key' => 'mlw_event_association', 'value' => get_the_ID() ) ) ); $events_for_this_association = new WP_Query($events_query); if($events_for_this_association->found_posts > 0){ $listItem = '
  • '; $listItem .= ''; $listItem .= get_the_title() . ''; $listItem .= ' ('. $events_for_this_association->post_count . ')
  • '; echo $listItem; } } echo '
'; wp_reset_postdata(); }else{ echo '

_("No association with upcoming events at the moment")

'; } }

Das Problem hierbei ist, dass get_permalink () der Link zur Assoziationsseite ist, nicht zu einer “gefilterten” Archivseite. Auch bei dieser Abfrage wird das Tag immer angezeigt, auch wenn keine Assoziationen mit Ereignissen bestehen.

Jeder Vorschlag würde sehr geschätzt werden.

Vielen Dank!

Solutions Collecting From Web of "Benutzerdefinierte Post-Typen archivieren"

Ich habe die function neu geschrieben und ein paar Freiheiten mitgenommen.

Die get_permalink war die ID der Assoziation, zu der in deinem Aufruf get_permalink und einfach $association->ID anstatt get_the_title (obwohl du einfach die gleiche ID in den Titel get_the_title könntest).

Ich wechselte auch von der Verwendung von the_post () zur Verwendung von next_post (), die den nächsten Post in eine Variable statt Stampfen auf die verschiedenen Post globalen Variablen zieht.

Schließlich, da die function getAssociationsList ist, musste ich die Ausgabe zurückgeben, anstatt sie zu echotieren. (und ich ändere den Namen … wie Unterstriche hilft, wenn Leute Ihre functionsnamen ein wenig übersetzen müssen)

Irgendwie hoffe ich, dass das hilft!

 private function get_associations_list(){ $associations = new WP_Query( array('post_type' => 'associations' ) ); $output = ''; if( $associations->found_posts > 0 ) { $output .= '
    '; while ($associations->have_posts()) { # changed to use next_post() so we can avoid messing with the global query # which avoids needing to use reset below. $association = $associations->next_post(); # block this out as we no longer need it # $associations->the_post(); # Changed value to use the objects ID rather than calling an extra function to get it $events_query = array( 'post_type' => 'events', 'meta_query'=> array( array( 'key' => 'mlw_event_association', 'value' => $association->ID ) ) ); # Checked via have_posts # - added target object to get permalink and title for # - changed count to use found_posts instead of post_count $events_for_this_association = new WP_Query($events_query); if ( $events_for_this_association->have_posts() ) { # There is at least one $association_link = get_permalink( $association->ID ); $association_title = $association->post_title; $association_event_count = $events_for_this_association->found_posts; $output .= < <{$association_title} ({$association_event_count}) HTML; } } $output .= '
'; # no longer needing to reset post data as we never used the global space # wp_reset_postdata(); }else{ $output = '

' . __("No association with upcoming events at the moment") . '

'; } # Maybe give caller option to echo it immediately instead of echoing it. return $output; }