投稿タイプ別!記事一覧にカテゴリー・年別・月別・投稿数を表示する方法

投稿タイプ別!記事一覧にカテゴリー・年別・月別・投稿数を表示する方法のアイキャッチ

このページにはプロモーションが含まれています。

目次
プログラミング言語の人気オンラインコース

はじめに

今回は、こちらの本でWordPressの勉強中に、サンプルをアレンジしてみたことについて書きました。

「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」[第3版]水野史土(著)

この記事はこんな方に向けて書きました

WordPressの記事一覧で、投稿タイプ別に記事一つひとつに

カテゴリーや年別・月別アーカイブ、投稿数を表示したい方

アーカイブ表示の勉強中に、

「記事一覧の一つひとつにカテゴリーや年別・月別の表示をするには、どうやるんだろう?」

「さらに投稿数を表示するには、どうするんだろう?」

こんな疑問が浮かんできました。

WordPressの勉強はこの本が初めてだったので、

手探り状態でたくさん調べ、悩みながらなんとか形にしました。

たくさん調べてみたところ、

私がやろうとしていることが全然見つからなかったので、

同じようなことを探している方がもしいたら、

参考になるのではと思い、今回の記事を書きました。

結果画面

投稿の一覧ページ(抜粋)

投稿の一覧ページの画像

カスタム投稿の一覧ページ(抜粋)

カスタム投稿の一覧ページの画像

プログラムの前提条件

このプログラムは、投稿とカスタム投稿でそれぞれ分けて、リスト形式ではなく、記事一つひとつにカテゴリーや年別・月別アーカイブ、投稿数を表示させるものです。

カスタム投稿名は「news」です。

excerpt.phpファイルはテンプレートファイルです。

記事を表示するループ処理内で、get_template_part(‘excerpt’)のようにして、

パーツファイルを読み込んでください。

ソースコード

投稿タイプ別に年・月を表示させる関数

//投稿タイプ別に年・月を表示させる関数

function by_type_date($post_type = "post")
{

	$current_year = get_the_date('Y');
	$current_month = get_the_date('n');

	$args = array(
		'post_type' => $post_type,
		'posts_per_page' => -1,
		'date_query' => array(
			array(
				'year' => $current_year,
				'month' => $current_month,


			),
		),
	);
	$query = new WP_Query($args); //年と月



	$args = array(
		'post_type' => $post_type,
		'posts_per_page' => -1,
		'date_query' => array(
			array(
				'year' => $current_year,

			),
		),
	);
	$query_year = new WP_Query($args); //年


	if ('news' === get_post_type()) {
		$args = array(
			'type' => 'yearly', // 種類を指定。
			'post_type' => 'news', // カスタム投稿タイプを指定。
			'echo' => false, // 値を出力するではなく、取得する。
			// →str_replace関数で情報を更新するため。
		);

		echo '<span>年別:';
		$year_url = esc_url(get_year_link($current_year));
		echo '<a href="/archives/date/' . $current_year . '?post_type=news ">' . $current_year . '年' . '</a>';
		echo '(' . count($query_year->posts) . ')';
		echo '</span>';
		echo '<span>月別:';
		$month_url = esc_url(get_month_link($current_year, $current_month));
		echo '<a href="/archives/date/' . $current_year . '/' . $current_month . '?post_type=news">' . $current_year . '年' . $current_month . '月' . '</a>';
		echo '(' . count($query->posts) . ')';
		echo '</span>';
	} else {
		echo '<span>年別:';
		$year_url = esc_url(get_year_link($current_year));
		echo '<a href="' . $year_url . '">' . $current_year . '年' . '</a>';
		echo '(' . count($query_year->posts) . ')';
		echo '</s>';
		echo '<span>月別:';
		$month_url = esc_url(get_month_link($current_year, $current_month));
		echo '<a href="' . $month_url . '">' . $current_year . '年' . $current_month . '月' . '</a>';
		echo '(' . count($query->posts) . ')';
		echo '</span>';
	}
}

投稿タイプ別にカテゴリーを表示

カテゴリーを表示し、上記の関数を呼び出して、年・月、投稿数を表示します。

        <?php

		if ('post' === get_post_type()) {
			$cateName = get_the_category()[0]->cat_name;
			$cateCount = get_the_category()[0]->category_count;
			the_category(', ');
			echo ':';
			echo '(' . $cateCount . ')';
			echo by_type_date();
			
		} elseif (!empty($term)) {
			$terms = get_the_terms($post->ID, 'news-cat');
			foreach ($terms as $term) {
				$link = get_term_link($term->term_id, 'news-cat');
				echo '<a href="' . $link . '">' . $term->name . ' </a>' . ':' . '(' . $term->count . ')';
				by_type_date('news');
			}
		} else {
			echo 'カテゴリーが未分類です';
			by_type_date('news');
		}
		?>
		<?php the_tags('<span class="tags-links">タグ: ', ', ', '</span>'); //タグを表示 
		?>

おわりに

今回はWordPress初心者がサンプルコードをアレンジしたものをご紹介しました。

この記事がお役に立てれば嬉しいです。

この記事の内容はこちらの本で勉強しました🔽

よかったらシェアしてください!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

フリーランスとしてWeb制作をしています。
Webアプリ開発・セキュリティの勉強中です。
学んだことをアウトプットしてみたいと思い、ブログでの発信に挑戦中!
[保有資格:基本情報技術者]

コメント

コメントする

CAPTCHA


目次