Einzelnen Beitrag anzeigen
Alt 02.03.2008, 12:34   #4 (permalink)
Ammaletu
PostRank: 9
 
Benutzerbild von Ammaletu
 
Registriert seit: 14.07.2007
Beiträge: 1.457
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(484950);
?>

<!-- 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.
__________________
"Life brings hope and pain, but revenge never brings redemption." || Mein Blog
Ammaletu ist offline   Mit Zitat antworten