Wie automatisiere ich mehrere Kategorienschleifen?

Ich habe diese Frage schon im WordPress-Forum gestellt, aber es ist wie ein Stein gesunken, was gar nicht ungewöhnlich ist.

Ich habe eine allgemeine Artikelseite mit mehreren Schleifen eingerichtet, um die ersten drei Artikel aus einer beliebigen Kategorie innerhalb des benutzerdefinierten Beitragstyps “Artikel” anzuzeigen. Diese sind alle fest in die Vorlage kodiert, wie die unten stehende, und ändern nur die Kategorie-ID-Nummer:

 13, 'posts_per_page' => 3, 'post_type' => Article ); query_posts( $args ); if( have_posts() ):?> 

..und so weiter. Was folgt, ist der notwendige Code, um den Titel, den Permalink, den Auszug usw. zu erstellen.

Die Schleifen funktionieren gut. Das Problem ist, dass sie in der Vorlage fest codiert sind. Das würde bedeuten, dass ich bei jeder neuen Kategorie eine Schleife zur Vorlagendatei hinzufügen müsste. Ich muss eine Lösung finden, so dass jedes Mal, wenn eine neue Kategorie erstellt wird, diese automatisch als Block zur Artikelseite hinzugefügt wird. Außerdem muss ich einen Link erstellen lassen, so als ob ich wp_get_archives verwenden würde, so dass jeder Kategorieblock mit einer eigenen Seite verlinkt ist, die ALLE Beiträge innerhalb dieser Kategorie enthält (mit Paginierung, falls erforderlich).

Ich kann mir keine function vorstellen, die dies bewirkt. Ist schon einmal jemand auf dieses Problem gestoßen? Oder erfordert dies einige schwere benutzerdefinierte PHP-Codierung, die WordPress nicht unterstützt, außer gehackt?

Solutions Collecting From Web of "Wie automatisiere ich mehrere Kategorienschleifen?"

Sie erhalten alle Kategorien mit:

 $categories = get_categories( array ( 'fields' => 'ids' ) ); 

Dies gibt ein Array mit allen Kategorien zurück.

Dann sollten Sie get_posts() oder eine new WP_Query , da query_posts() viele Nebeneffekte hat und nicht mehr verwendet werden sollte.

Beispielcode, als Beispiel:

 $categories = get_categories( array ( 'number' => 5 ) ); print '
$categories = ' . htmlspecialchars( var_export( $categories, TRUE ), ENT_QUOTES, 'utf-8', FALSE ) . '

'; $boxes = array(); foreach ( $categories as $category ) { $boxes[ $category->term_taxonomy_id ]['posts'] = get_posts( array( 'numberposts' => 5, 'category' => $category->term_taxonomy_id, 'posts_per_page' => 3, 'post_type' => 'post' ) ); $boxes[ $category->term_taxonomy_id ]['title'] = $category->category_nicename; } foreach ( $boxes as $cat_id => $box ) { printf( '

%2$s

', get_category_link( $cat_id ), $box['title'] ); print '

    '; foreach ( $box['posts'] as $post ) printf( '

  • %2$s
  • ', get_permalink( $post->ID ), esc_html( $post->post_title ) ); print '

'; }

Das ist eigentlich ganz einfach! Verwenden Sie zuerst get_categories , um eine Liste aller Kategorien zu erhalten. Als nächstes wiederhole diese Kategorien und erhalte Beiträge in diesen Kategorien wie oben.

Als Randnotiz sollten Sie vermeiden, query_posts für mehrere Schleifen zu verwenden. Sehen Sie sich diese Seite an, die das Thema ausführlich behandelt.

Beispielcode

 $categories = get_categories(); foreach ( $categories as $category ) : $category_query = new WP_Query( array( 'cat' => $category->term_id, 'posts_per_page' => 3, 'post_type' => 'Article' ) ); while ( $category_query->have_posts() ) : $category_query->the_post(); # Your existing code... endwhile; wp_reset_postdata(); endforeach; 

Innerhalb der foreach Schleife können Sie einen Link zur Kategorie mit get_category_link()