サポート » テーマ » 年別?アーカイブの表示方法について

  • 解決済 b23synchronicity

    (@b23synchronicity)


    こんにちは、はじめまして。
    年別?アーカイブの表示方法についてアドバイスが頂けたら嬉しいです。
    2009
    2009-03-26 タイトル
    2009-03-25 タイトル
    2009-03-24 タイトル

    2008
    2008-03-23 タイトル
    2008-03-22 タイトル
    2008-03-21 タイトル

    のようなアーカイブページを作るにはどうしたらよいでしょうか?
    以下のように作ってみたのですが、投稿記事が年ごとに1件表示されなくなります。
    query_postsの後にthe_postを記述後、ループ前にthe_timeを記述しているのが原因だと思います。the_postを記述しない場合、年が表示させるのが難しいです。

    <?php
    if(have_posts()) : query_posts('posts_per_page=-1&year=2009');the_post();
    the_time('Y');
    while(have_posts()) : the_post();
    the_time('Y-m-j');
    the_title();
    endwhile; endif; wp_reset_query();
    
    if(have_posts()) : query_posts('posts_per_page=-1&year=2008');the_post();
    the_time('Y');
    while(have_posts()) : the_post();
    the_time('Y-m-j');
    the_title();
    endwhile; endif; wp_reset_query();
    ?>

    分かりづらいトピックで申し訳ありません。
    何かよい方法がありましたらアドバイスを頂けると嬉しいです。
    よろしくお願いします。

    あと、僕だけかもしれませんが、このフォーラムの検索がいまいちよろしくないような気がします。日本語に対応していないのか分からないのですが、検索ができませんでした。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック投稿者 b23synchronicity

    (@b23synchronicity)

    正しいやり方なのかは分からないのですが、関数を作って解決しました。

    <?php
    /*==============================================
    	年別アーカイブ表示
    ==============================================*/
    function archiveFunc($year){
    	if(have_posts()) : query_posts('posts_per_page=-1&year='.$year.'');
    ?>
    	<div class="archives">
    	<h2><?php print $year; ?></h2>
    	<dl>
    <?php while(have_posts()) : the_post(); ?>
    	<dt><?php the_time('Y-m-d'); ?></dt>
    	<dd><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></dd>
    <?php endwhile; ?>
    	</dl>
    	</div>
    <?php endif; wp_reset_query(); ?>
    <?php
    }
    ?>

    ありがとうございました。

    t.okubo

    (@tokubo)

    遅レスですが丁度同じようなことをやっていたのでとても参考になりました。
    ありがとうございました。

    解決済みですが投稿させていただきます。
    上記方法を使用させて頂いたのですが私の場合は何も表示されませんでした。
    なぜでしょうか?

    使用バージョン 3.1.1

    私も同様の問題に行き当たり、こちらにたどり着きました。
    使用バージョン 3.1.1 でやはり何も表示されません。
    過去バージョンと最新バージョンでは記述の仕方が違うのでしょうか?

    ポイント1:query_posts() してから if ( have_posts() ) します。
    ポイント2:$year を「文字」にします。

    query_posts( "posts_per_page=-1&year='$year'" );
    if( have_posts() ) :

    でOK◎

    ご回答ありがとうございます。何も表示されないのは変わらずでした。

    最初にお約束から・・・
    このwordpressフォーラムは、「質問するたびに新たにトピックを立て、便乗質問をしないで」というルールなので、今後、質問したいときは、新たにトピックを立ててください。
    でないと、最初に質問した人が他の人に気遣って[解決済み] にできなるなりますし、
    回答する人が[解決済み] の質問も見なければならなくなります。
    まぁ、質問する人も回答する人もルール無視になって、指摘する人もいなくなってしまったので、これを言うのも、いまさら感はありますが。

    バージョンうんぬんではなく、b23synchronicityさんの、関数を作って解決しましたという
    コードは関数だけなので、当然表示したい場所で呼び出してあげなければ、何も表示されま
    せん。

    <?php archiveFunc('2009') ?>

    のように呼び出せば、表示されるはずです。2009年の一覧が表示されるはずです。
    但し、kzさんが指摘されているように、b23synchronicityさんのコードは、
    query_posts の前に have_posts があるので、条件によっては正しく動きません。

    年数を指定せずに(関数も使わずに)一覧だけ出したければ、

    <?php
    	query_posts('posts_per_page=-1&order=ASC');
    	$year=0;
    	while (have_posts()) : the_post();
    		if ($year!=get_the_date('Y')) { $year=get_the_date('Y');?>
    	<h2><?php echo $year; ?></h2>
    	<?php } ?>
    	<?php the_time('Y 年 n 月 j 日'); ?> &middot; <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
    <?php
    	endwhile;
    	wp_reset_query();
    ?>

    を書けば、書いた場所に表示されるはずです。
    参考になれば。

    申し訳ございません、今後気をつけます。
    またアドバイスありがとうございます。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「年別?アーカイブの表示方法について」には新たに返信することはできません。