it-swarm.com.de

Archivliste der Beiträge nach Erscheinungsjahr (mehrere Jahre)

Ich habe eine Archivseite, auf der alle Blog-Beiträge (in einer bestimmten Kategorie) angezeigt werden. Mit einer wachsenden Anzahl von Posts möchte ich diese nach Veröffentlichungsjahren trennen. Zum Beispiel (vereinfacht) möchte ich Folgendes:

2012

  • post
  • post
  • post

2011

  • post

Ich teste dieses System, indem ich das Veröffentlichungsdatum meines ältesten Posts auf Mitte 2011 ändere. Derzeit scheint die Struktur größtenteils zu funktionieren, aber alle Posts werden unter 2012 und keine unter 2011 angezeigt, obwohl das Veröffentlichungsdatum des ältesten Posts auf 2011 festgelegt wurde.

2012

  • post
  • post
  • post
  • beitrag (Beitrag 2011)

2011


Ich verwende den folgenden Code (einige zusätzliche Elemente wurden zur Vereinfachung entfernt, haben jedoch keinen Einfluss auf das Ergebnis). Kann jemand sehen, warum der alte Beitrag unter 2012 und nicht im 2011 <ul> angezeigt wird? Danke für Ihre Hilfe.

<?php global $query_string; query_posts($query_string . '&posts_per_page=-1'); // Show all posts ?>
<?php if (have_posts() {
if (is_category('210')) { ?>
<div class="archive-posts-box">
    <?php $firstyear = '2011';
    $currentyear = date('Y');
    $postyear = get_the_time('Y', $post->ID);
    for ($i = $currentyear; $i >= $firstyear; $i--) { ?>
            <h4><?php echo $i ?></h4>
            <ul class="archive-posts">
            <?php while (have_posts() && $postyear == $i) {
                the_post(); ?>
                <li><span class="archive-post-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></span><span class="archive-post-date"><?php the_time(get_option('date_format')); ?></span></li>
            <?php } // end while ?>
            </ul>
        <?php } // end for ?>        
</div><!-- .archive-posts-box -->
<?php } // end if (category)
} // end if (have_posts)
wp_reset_query() ?>
1
t-jam

Mein ursprünglicher Eindruck war, dass ich glaube, was passiert ist, dass die Schleife nicht inkrementiert wird, bis the_post ausgeführt wird, sodass Ihre && $postyear == $i-Prüfung tatsächlich auf das zeigt vorheriger Beitrag nicht der aktuelle. Sie müssen dies neu organisieren, um diese Prüfung zu erhalten, nachdem die Schleife um the_post erhöht wurde.

Das heißt, ich glaube nicht, dass ich dieser Logik auf einer noch tieferen Ebene vertraue. Sie setzen $postyear vor eine umschließende Schleife ($postyear = get_the_time('Y', $post->ID);), damit dies nicht einmal von dem beeinflusst wird, was mit the_post passiert. Das macht mir Sorgen.

Ich weiß, dass Sie nicht so viel Überarbeitung wollen, aber für das, was es wert ist, denke ich, dass Sie etwas mehr brauchen wie:

 $oldyear = $postyear = get_the_time('Y', $post->ID);?>
 <h4><?php echo $postyear; ?></h4>
    <ul class="archive-posts"><?php
    while (have_posts()) {
      the_post();
      $postyear = get_the_time('Y', $post->ID);
      if ($oldyear != $postyear) {
    $oldyear = $postyear; ?>
    </ul><h4><?php echo $postyear; ?></h4><ul class="archive-posts">
    <?php
      } ?>
    <li><span class="archive-post-title">
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?>
    </a></span><span class="archive-post-date"><?php the_time(get_option('date_format')); ?></span></li><?php
    }
    echo '</ul>';
?>

Ich bin auf dem besten Weg, damit fertig zu werden. Es wurde kaum getestet, aber es sollte Ihnen eine Idee geben.

0
s_ha_dum