Nachdem hier ja nicht sonderlich viele Antworten kamen*g*, habe ich das Problem erst ein Weilchen ignoriert und dann halt doch selber gelöst. Für alle, die das vielleicht auch interessiert, will ich hier kurz schildern, wie ich es angegangen bin.
Noch mal kurz zum Problem: Auf der Seite einer Kategorie die Beiträge gruppiert nach Unterkategorien ausgeben. Innerhalb der Unterkategorien habe ich die Sortierung dann doch beim Standard gelassen, chronologisch absteigend. Alphabetisch wäre aber auch kein Problem gewesen.
Also zuerst mal: Template für die Oberkategorie anlegen, in meinem Fall die Datei "category-47.php". Und das sieht dann so aus, leicht gekürzt:
PHP-Code:
<?php
// change the loop query so that it stays intact but returns as few results as possible
$posts = query_posts($query_string . '&showposts=1');
// build an array of sub-category IDs
$dor_subcategories = array(48, 49, 50);
?>
<!-- Page-Header, Seitenüberschrift etc. -->
<?php if (have_posts()) : ?>
<?php
// query posts of sub-categories
for ($dor_i = 0; $dor_i < count($dor_subcategories); $dor_i++) {
// get the sub-category ID
$dor_subcat = $dor_subcategories[$dor_i];
// query posts of the sub-category
$dor_query = new WP_Query('cat=' . $dor_subcat . '&showposts=50');
// output the result if anything was found
if ($dor_query->have_posts()) {
// output the headline
?>
<h3 class="pagetitle"><?php dor_print_category_name($dor_subcat); ?></h3>
<div class="entry"><ul class="categoryListExtended">
<?php
// output the posts
while ($dor_query->have_posts()) : $dor_query->the_post();
?>
<li>
<a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanenter Link zu <?php the_title(); ?>"><?php the_title(); ?></a><br />
<?php the_excerpt('weiterlesen', 'den ganzen Beitrag lesen', true, '[', ']'); ?>
</li>
<?php
endwhile;
?>
</ul></div>
<?php
} /* end if posts for category */
} /* end for sub-categories */
?>
<?php endif; ?>
<!-- Sidebar & Footer --> Ich ändere also die ursprüngliche Query, so dass sie nur einen Beitrag zurückgibt. Das mache ich, damit die Query an sich intakt bleibt. Sonst können wohl Seiteneffekte auftreten, habe ich gelesen.
Darunter kommt dann pro Unterkategorie eine eigene Query, mit neuem WP_Query-Objekt und 50 Beiträgen. Das ganze ist so angelegt, dass alle Beiträge der Unterkategorien ausgegeben werden, 50 ist ein willkürlicher Wert, der im Moment groß genug ist, dass alle Beiträge der Kategorie angezeigt werden.
dor_print_category_name ist eine eigene Funktion, die den Titel der Kategorie ausgibt:
PHP-Code:
/**
* Prints the title of the category with the given ID. Equals the function
* single_cat_title, but can print the title of any category.
*/
function dor_print_category_name($cat) {
if (!empty($cat)) {
$my_cat_name = apply_filters('single_cat_title', get_the_category_by_ID(intval($cat)));
if (!empty($my_cat_name)) {
echo strip_tags($my_cat_name);
}
}
}
Das ganze funktioniert soweit gut. Natürlich geht die Zahl der Queries auf der Seite etwas hoch, aber in vertretbarem Rahmen. Ansonsten ist die Seite meinem Empfinden nach nicht langsamer als alle anderen Seiten auch. Diese Lösung ist aber sicher nicht ohne Ende skalierbar. Ich habe im Moment zwei Testbeiträge in zwei Unterkategorien. Demnächst werden es um die 40 Beiträge in drei Kategorien sein. Da werde ich dann sehen, wie es sich mit den Ladezeiten verhält. Für viel größere Seiten würde ich das eher nicht verwenden.
