こういった疑問に答えます。
本記事の内容
- 年別一覧リンクの作成のやり方
- 年別一覧リンクの作成のやり方【wp_get_archives()関数】
- 年別一覧リンクの作成のやり方【調整したコードを紹介】
Webエンジニア歴1年
WordPressの運営&立ち上げ70サイト以上かかわっている
こういった私が解説していきます。
1. 年別一覧リンクの作成のやり方
- その①:やり方はこの2つ
その①:やり方はこの2つ
WordPressの関数で出力する方法
WordPressにはwp_get_archives()という一覧表示できる関数があります。
『2. 年別一覧リンクの作成のやり方【wp_get_archives()関数】』で詳しく紹介していきます。
また、もっとカスタマイズをして使うには、phpのループ処理をする必要があります。
そちらもご紹介しているので、ぜひ見ていってくださいね。
それでは、さっそく解説をはじめていきます。
2. 年別一覧リンクの作成のやり方【wp_get_archives()関数】
- その①:wp_get_archives()でカンタンに実装
- その②:コードの解説をします
その①:wp_get_archives()でカンタンに実装
次のような感じでカンタンに出力できます。
1 2 3 4 |
/* wp_get_archives()で出力する */ <ul class="monthly-list"> <?php wp_get_archives( 'post_type=post&type=yearly&show_post_count=1' ); ?> </ul> |
このコードの解説をしていきますね。
その②:コードの解説をします
投稿タイプの指定
『post_type=post』で投稿タイプを指定します。
カスタム投稿タイプ『works』であれば、『post_type=works』といった感じ。
月、年などの指定
『type』で月(monthly)や年(yearly)を指定できます。
投稿数の表示
『show_post_count』で投稿数を表示するかを指定できます。
‘1’なら表示、’0’なら非表示です。
自動でHTMLが出力されるので、もっとカスタマイズをしたい方は次をご覧くださいね。
年別一覧リンクの作成のやり方【調整したコードを紹介】
- その①:コードをご紹介
- その②:コードの解説をします
その①:コードをご紹介
私が実際に使ったコードです
下記は投稿を年でまとめて、年をクリックしたら月別が表示されるアコーディオンメニューを作ったときのコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/* 年ごとに分けて月を表示する */ <?php // 投稿年ごとにグループ化 $blog_by_year = array(); $the_query = new WP_Query(array( 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => -1, )); while ($the_query->have_posts()) : $the_query->the_post(); $year = get_the_date('Y'); $month = get_the_date('n'); $blog_by_year[$year][$month][] = $post; endwhile; wp_reset_postdata(); // 投稿年でループ foreach ($blog_by_year as $year => $years) : ?> <li class="year-ttl"><?php echo esc_html($year); ?>年</li> <li class="month-area"> <ul class="blog-items"> <?php // 投稿をループ foreach ($years as $month => $blog) : setup_postdata($post); $post_count = count($blog); // 投稿数をカウント ?> <li class="month-ttl"> <a id="post-<?php the_ID(); ?>" href="<?php echo esc_url(home_url('/date/'.$year.'/'.$month.'/')); ?>"><?php echo esc_html($month); ?>月</a> <span class="post-count"><?php echo $post_count; ?></span> <!-- 投稿数を表示 --> </li><!-- month-ttl --> <?php endforeach; ?> </ul><!-- blog-items --> </li><!-- month-area --> <?php endforeach; ?> |
その①:コードの解説をします
投稿を配列で入れる準備
1 2 3 4 |
/* 年ごとに分けて月を表示する */ <?php // 投稿年ごとにグループ化 $blog_by_year = array(); |
年と月で投稿を格納する配列の関数を宣言します。
Queryを指定
1 2 3 4 5 6 |
/* 年ごとに分けて月を表示する */ $the_query = new WP_Query(array( 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => -1, )); |
次に、『post_type』に投稿タイプをいれます。
公開状態のすべての投稿を取得するために上記のように指定しています。
投稿を配列で格納
1 2 3 4 5 6 7 |
/* 年ごとに分けて月を表示する */ while ($the_query->have_posts()) : $the_query->the_post(); $year = get_the_date('Y'); $month = get_the_date('n'); $blog_by_year[$year][$month][] = $post; endwhile; wp_reset_postdata(); |
$year = get_the_date(‘Y’);では投稿の年を取得し、$month = get_the_date(‘n’);では投稿の月を取得しています。
それを$blog_by_year[$year][$month][] = $post;で投稿を格納しています。
年でループ処理
1 2 3 4 |
/* 年ごとに分けて月を表示する */ // 投稿年でループ foreach ($blog_by_year as $year => $years) : ?> |
年でループするforeach文を使います。
取得した投稿『$blog_by_year 』をその年『$year』でループ指定していきます。
月でループ処理
1 2 3 4 5 6 7 |
/* 年ごとに分けて月を表示する */ <?php // 投稿をループ foreach ($years as $month => $blog) : setup_postdata($post); $post_count = count($blog); // 投稿数をカウント ?> |
年のforeach文の中で、月のforeach文を使います。
代入された$yearsを月『$month』ごとに『$blog』へ格納していきます。
$post_count = count($blog);で自動で投稿数を出力するようにしていますね。
リンク先などはご自身のリンク先にあうように記述してくださいね。
もし、コードを調整してほしいなどのご要望がありましたら、お問い合わせからご相談ください。
私の方で、調整できるところまでやってみたいと思います。
以上、年別一覧リンクの作成のやり方についてご紹介しました。
ではまた。