ACF-Beziehung: Gruppiert Beiträge nach Elternkategorien, dann nach Kinder

Ich habe eine CPT- locations mit einer benutzerdefinierten Taxonomie regions mit hierarchischen Begriffen (State ist der übergeordnete Begriff, City ist der untergeordnete Begriff.

Regionen Benutzerdefinierte Taxonomie

  • North Carolina (Eltern)
    • Charlotte (Kind)
    • Raleigh (Kind)
  • Georgien (Eltern)
    • Atlanta (Kind)

Unter Verwendung eines ACF-Beziehungsfelds versuche ich, ein flexibles Inhaltsfenster zu erstellen, das es Benutzern ermöglicht, Standorte auszuwählen und sie über den übergeordneten Begriff und dann den untergeordneten Begriff wie folgt gruppiert anzeigen zu lassen:

Anzeige / Ergebnis

  • North Carolina
    • Charlotte
      • Wynnchester Road Lage (post)
      • Tryon Road Lage (Post)
    • Raleigh
      • Boylan Street Lage (post)
  • Georgia
    • Atlanta
      • Wynnchester Road Lage (post)

Hat jemand jemals so etwas versucht? Ich habe eine Menge Zeit und könnte Hilfe gebrauchen.

Solutions Collecting From Web of "ACF-Beziehung: Gruppiert Beiträge nach Elternkategorien, dann nach Kinder"

Warum brauchst du ein Beziehungsfeld? Können Sie die regions nicht direkt mit Ihrem CPT verwenden, damit die Verknüpfung erfolgt?

Jetzt kann das Filtern von Beiträgen nach regions einfach mit einem Filter-Plugin wie FacetWP (bezahlt), Search & Filter (kostenlos) erfolgen. Um die Ergebnisse zu gruppieren, haben Plugins wie FacetWP eine Sortierfunktion, die nach Ihrer Taxonomie gruppiert werden kann. Andernfalls, ohne ein Plugin, sollte es ein komplizierter und langwieriger Code sein.

Ich habe es nach einem guten Stück Zeit und mehreren Abfragen / Loops etc. herausgefunden. Ich bin mir sicher, dass das gesäubert oder besser geschrieben werden könnte, aber in der Zwischenzeit funktioniert das für mich!

 < ?php // Loop through Categories and Display Posts within // ACF Relationship Field based on CPT 'Locations' - Post ID $locations_field = $panel['locations']; // CPT 'Locations' $post_type = 'locations'; // Get all the state taxonomy terms used $state_terms = get_terms( array( 'taxonomy' => 'states', 'hide_empty' => false, 'parent' => 0 ) ); // Foreach term, loop through Locations posts selected in the relationship field filtered via the state terms. Not actually displaying anything with this query, but creating an array of post IDs. foreach( $state_terms as $state_term ) : ?> < ?php $args = array( 'post_type' => $post_type, 'posts_per_page' => -1, //show all posts 'post__in' => $locations_field, 'tax_query' => array( array( 'taxonomy' => 'states', 'field' => 'slug', 'terms' => $state_term->slug, ) ) ); $new_posts = new WP_Query($args); $ids = array(); if( $new_posts->have_posts() ): while( $new_posts->have_posts() ) : $new_posts->the_post(); ?> < ?php array_push( $ids, get_the_ID() ); ?> < ?php endwhile; endif; ?> < ?php // Begin to display groups starting with the State term if (!empty($ids)) : // CHECK TO MAKE SURE THERE ARE POSTS! ?> 

< ?php echo $state_term->name; // State name ?>

< ?php // Get all the city taxonomy terms used $city_terms = get_terms( array( 'taxonomy' => 'cities', 'hide_empty' => false, 'parent' => 0 ) ); foreach( $city_terms as $city ) : ?> < ?php $args2 = array( 'post_type' => $post_type, 'posts_per_page' => -1, //show all posts 'tax_query' => array( array( 'taxonomy' => 'cities', 'field' => 'slug', 'terms' => $city->slug, ) ), 'post__in' => $ids // The array of IDs previously gathered ); $posts2 = new WP_Query($args2); if( $posts2->have_posts() ): ?>

< ?php echo $city->name; // City name ?>

< ?php while( $posts2->have_posts() ) : $posts2->the_post(); ?>

< ?php echo get_the_title(); ?>

< ?php endwhile; ?>
< ?php endif; ?> < ?php endforeach; ?> < ?php endif; ?> < ?php endforeach; ?>