WEB系キャンパス

sidebarとかに表示させるアーカイブリストの種類まとめ(WordPress)

ブログ系のサイトとかである月別アーカイブページ
記事の分量やデザインのタイプによって表示方法は色々あるので、特にコーディングからのWordPress案件とかで違うパターンをリストで持っておけば何かと便利なので、まとめておきます。

【1】一般的な月別アーカイブリスト

自分がよく使うのはカウント(記事数)部分を<span>で囲み、数字部分だけ個別にレイアウトできるようにアーカイブリストを表示させます。

1<ul class="archive_list">
2  <?php
3      $string = wp_get_archives(array(
4                      'show_post_count' => 1,
5                      'echo' => 0
6                  ));
7      echo preg_replace('/<\/a>&nbsp;(\([0-9]*\))/', ' <span class="count">$1</span></a>', $string);
8      ?>
9</ul>

【抽出されるHTML】

1<ul class="archive_list">
2  <li><a href=''>2018年11月 <span class="count">(1)</span></a></li>
3  <li><a href=''>2018年10月 <span class="count">(14)</span></a></li>
4  <li><a href=''>2018年9月 <span class="count">(1)</span></a></li>
5</ul>

【2】一般的な年月アーカイブリスト

wp_get_archivesはデフォルトが月別リストになるので、年月リストを出したい場合は、単純にtypeを「yearly」にするだけ

1<ul class="archive_list">
2 <?php
3     $string = wp_get_archives(array(
4                     'show_post_count' => 1,
5                     'type' =>  yearly,
6                     'echo' => 0
7                 ));
8     echo preg_replace('/<\/a>&nbsp;(\([0-9]*\))/', ' <span class="count">$1</span></a>', $string);
9   ?>
10 </ul>

【抽出されるHTML】

1<ul class="archive_list">
2  <li><a href=''>2018 <span class="count">(16)</spn></a></li>
3</ul>

【3】セレクトボックス型のアーカイブリスト(月別)

セレクトボックスの初期値を「月を選択して下さい」とする場合

1<select name="archive-dropdown" onChange='document.location.href=this.options[this.selectedIndex].value;'>
2  <option value=""><?php echo attribute_escape(__('月を選択してください')); ?></option>
3  <?php wp_get_archives (array(
4      'type' => 'monthly',
5      'format' => 'option',
6      'show_post_count' => '1'
7      ));
8  ?>
9</select>
1<select name="archive-dropdown" onChange='document.location.href=this.options[this.selectedIndex].value;'>
2  <option value="">月を選択してください</option>
3  <option value=''> 2018年11月 (1)</option>
4  <option value=''> 2018年10月 (14)</option>
5  <option value=''> 2018年9月 (1)</option>
6</select>

※こちらもtypeを「monthly」から「yearly」に変更すると年月アーカイブを出せます。

【4】カスタム投稿のアーカイブリスト

こちらもけっこうシンプルです。
カスタム投稿タイプが「product」の場合は「post_type」を指定して上げる以外は一緒です。

1<?php
2    $string = wp_get_archives(array(
3      'post_type'     => 'product',
4      'show_post_count' => 1,
5      'echo' => 0
6    ));
7    echo preg_replace('/<\/a>&nbsp;(\([0-9]*\))/', ' <span class="count">$1</span></a>', $string);
8?>

【5】アーカイブリストをアコーディオンにする

年別リストだけ並んでいて、その2019年(5)とかのテキストをクリックすると、月別リストが出てくるあのタイプですね。

1<div class="side_archive_menu">
2    <?php
3    $year_prev = null;
4    $months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month ,
5                                      YEAR( post_date ) AS year,
6                                      COUNT( id ) as post_count FROM $wpdb->posts
7                                      WHERE post_status = 'publish' and post_date <= now( )
8                                      and post_type = 'post'
9                                      GROUP BY month , year
10                                      ORDER BY post_date DESC");
11    foreach($months as $month) :
12    $year_current = $month->year;
13    if ($year_current != $year_prev){
14    if ($year_prev != null){?>
15        <?php } ?>
16  <p class="toggle_btn"><?php echo $month->year; ?>年</p>
17  <ul class="child">
18    <?php } ?>
19    <li>
20        <a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>">
21            <?php echo date("n", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>月
22            (<?php echo $month->post_count; ?>)
23        </a>
24    </li>
25    <?php $year_prev = $year_current;
26    endforeach; ?>
27  </ul>
28</div>
29<!-- /.side_archive_menu -->

【抽出されるHTML】

1<div class="side_archive_menu">
2<p class="toggle_btn">2018年</p>
3  <ul class="child">
4    <li><a href="">11月(1)</a></li>
5    <li><a href="">10月(14)</a></li>
6    <li><a href="">9月(1)</a></li>
7  </ul>
8</div>
9<!-- /.side_archive_menu -->

年号を抽出して、その下に月別リストを出します。
あとは、CSSとjQueryでアコーディオンを入れます。

【CSS】

※基本的なCSSしか入れてません。レイアウトは適正調整して下さい。

【jQuery】

1$(".toggle_btn").on("click", function() {
2     $(this).next().slideToggle();
3     $(this).toggleClass("active");
4 });

参考サイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です