web-dev-qa-db-ja.com

発行年(複数年)ごとに投稿のアーカイブリスト

私はすべてのブログ記事を(特定のカテゴリで)表示するアーカイブページを持っています。投稿数が増えているので、これらを発行年ごとに分けたいと思います。たとえば(単純化した)、私は次のようにします。

2012年

  • 役職
  • 役職
  • 役職

2011年

  • 役職

私は最も古い投稿の発行日を2011年半ばに変更することによってこのシステムをテストしています。現時点では構造はほとんどうまくいっているようですが、最も古い投稿の発行日が2011年に設定されているにもかかわらず、すべての投稿は2012年以下に、2011年には表示されません。

2012年

  • 役職
  • 役職
  • 役職
  • 投稿(2011投稿)

2011年


以下のコードを使用しています(簡単にするためにいくつかの余分なものは削除されていますが、結果には影響しません)。なぜ古い投稿が2011年の<ul>の中ではなく2012年の下に表示されているのか、誰にでもわかりますか?ご協力いただきありがとうございます。

<?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

私の最初の印象は、 the_post が実行されるまでループがインクリメントされないため、&& $postyear == $iチェックが実際には前の投稿は現在の投稿ではありません。ループが the_post だけインクリメントされた後に、このチェックを受けるためにこれを再編成する必要があります。

とは言っても、私はこの論理をさらに深いレベルで信頼しているとは思わない。囲むループ($postyear = get_the_time('Y', $post->ID);)の前に$postyearを設定しているので、 the_post の場合でも影響はありません。それは私を心配させます。

私はあなたがこれほど多くの改訂を望んでいないことを知っていますが、それが私があなたがもっともっと何かを必要としていると思っている価値があるもののために。

 $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>';
?>

私は道を進んで、それで手足を踏み出します。それはほとんどテストされていませんが、それはあなたに考えを与えるべきです。

0
s_ha_dum