Help us understand the problem. What is going on with this article?

【wordpress】月別アーカイブの作り方

More than 1 year has passed since last update.

■テンプレート作成

年別アーカイブ・月別アーカイブ・日付アーカイブを表示することができるテンプレートは、以下の3種類になります。(1,2,3の順で使用される優先度が高いです。)
参考:Word Press Codex

  1. date.php
  2. archive.php
  3. index.php

コード記述

date.phpで作成することとします。

date.php
<?php /* postSingle:START */ ?>
<?php /* 注)表示投稿数はfunctions.phpで設定 */ ?>
    <?php if(have_posts()): ?>
        <?php while(have_posts()):the_post(); ?>

            <?php /* ここにやりたいことを書く */ ?>

        <?php endwhile; ?>
    <?php else: ?>
        <p>記事が見つかりませんでした。</p>
    <?php endif; ?>
<?php /* postSingle:END */ ?>

functions.php
<?php

function change_posts_per_page($query) {
 /* 管理画面,メインクエリに干渉しないために必須 */
 if ( is_admin() || ! $query->is_main_query() ){
     return;
 }

 /* 日付アーカイブページの表示件数を5件にする */
 if ( $query->is_date() ) {
     $query->set( 'posts_per_page', '5' );
     return;
 }

}
add_action( 'pre_get_posts', 'change_posts_per_page' );

?>

カテゴリー一覧や、アーカイブ一覧など、ページによって表示させたい件数が違うことがあると思います。
表示件数の設定は管理画面側で設定したり、テーマテンプレートの中で'posts_per_page'を記述して設定できますが、筆者はこの場合functions.phpで設定する方法をとっています。

参考:【wordpress】pre_get_postsを使ってみませんか? 

wordpress管理画面の「表示設定」で設定すると、ページによって2ページ目以降が表示されない不具合が生じることがあるのであまりおすすめしません。ページによって表示件数を変える場合は、管理画面「表示設定」内の「1ページに表示する最大投稿数」は1にしておくのがおすすめです。

■サイドバー表示

年ごとに表示させて、アコーディオンで月別アーカイブを表示させます。
イメージ ▼
サイドバーのイメージ

sidebar.php
<h1>過去の投稿</h1>
<?php
$year_prev = null;
$postType = get_post_type( );
$months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month ,
                                    YEAR( post_date ) AS year,
                                    COUNT( id ) as post_count FROM $wpdb->posts
                                    WHERE post_status = 'publish' and post_date <= now( )
                                    and post_type = '$postType'
                                    GROUP BY month , year
                                    ORDER BY post_date DESC");
foreach($months as $month):
    $year_current = $month->year;
    if ($year_current != $year_prev) { ?>
        <?php if($year_prev != null): ?>
            </ul>
        <?php endif; ?>

        <h2><?php echo $month->year; ?></h2>
        <ul>
    <?php } ?>
            <li>
                <a href="<?php echo esc_url(home_url()); ?>/date/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>">
                    <?php echo date("n", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>月(<?php echo $month->post_count; ?>)
                </a>
            </li>
            <?php $year_prev = $year_current; ?>
<?php endforeach; ?>
        </ul>

参考:WordPressで年別に分けて月のアーカイブリストを表示する方法 

css、アコーディオンを動かすjsは適宜記述。

こんな感じのhtmlが生成されると思います ▼

<h1>過去の投稿</h1>
<h2>2017年</h2>
<ul>
<li><a href="{site url}/date/2017/10">10月(1)</a></li>
<li><a href="{site url}/date/2017/08">8月(1)</a></li>
<li><a href="{site url}/date/2017/07">7月(1)</a></li>
<li><a href="{site url}/date/2017/05">5月(1)</a></li>
</ul>
<h2>2016年</h2>
<ul>
<li><a href="{site url}/date/2016/12">10月(5)</a></li>
<li><a href="{site url}/date/2016/11">11月(4)</a></li>
<li><a href="{site url}/date/2016/10">10月(8)</a></li>
<li><a href="{site url}/date/2016/09">9月(11)</a></li>
<li><a href="{site url}/date/2016/06">6月(10)</a></li>
</ul>
<h2>2015年</h2>
<ul>
<li><a href="{site url}/date/2015/09">9月(9)</a></li>
<li><a href="{site url}/date/2015/07">7月(3)</a></li>
<li><a href="{site url}/date/2015/04">4月(1)</a></li>
</ul>

関連記事:【wordpress】タームを指定した年別アーカイブリストを出力する

m_t_of
wordpressのカスタマイズ制作をしていることが多いです。 自分用のスニペット集代わりに記事を書いていこうと思います。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした