PR

【WordPress】カテゴリごとの記事数を表示させるには?【Cocoon】

【Wordpress】カテゴリごとの記事数を表示させるには?【Cocoon】 Wordpress

先日、本ブログで「カテゴリごとの記事数を表示させる」という改修を行ったので、その時の備忘録を残していこうと思います。

▼赤枠の数字部分(パソコン画面幅のとき)

▼赤枠の数字部分(スマホ画面幅のとき)

上記は改修後のブログのスクショです。現在のブログの状態とは大幅に異なりますので、スクショに関しては参考程度にご覧ください。

開発環境

今回の改修時点での開発環境は以下の通りです。

  • 使用PCのOS → macOS Mojave(バージョン10.14.6)
  • 使用CMS → wordpress(バージョン6.3)
  • wordpress使用テーマ → Cocoon
  • ローカル環境構築ツール → Local

参考記事

今回、以下の記事を参考にしました。「Cocoonフォーラム」の中の1記事です。

グローバルメニューにカテゴリーごとの投稿数を表示させたい(親カテゴリーの投稿数を0でなく子カテゴリーの投稿数の合計で表示...
初めて質問させていただきます。 不具合・カスタマイズ対象ページのURL: 相談内容: サイドバーだけでなく、グローバルメニューにもカテゴリーごとの投稿数を表示させたいのですが、調べて見つけた方法だと、親カテゴリーの投稿数が0と表示されてしま...

こちらの内容を参考にして「カテゴリごとの記事数を表示させる」ことに成功しました。

上記記事では、「親カテゴリーの投稿数を子カテゴリーの投稿数の合計で表示させる方法」についての投稿と回答があり、掲載されているコードを本ブログのfunctions.phpに追記することで、「カテゴリごとの記事数を表示させる」ことができました。

追記したコードについて

以下、functions.phpに追記したコードです。

function my_the_title_menu_category( $title, $post_ID ) {
	if ( 'nav_menu_item' == get_post_type( $post_ID ) ) {
		if ( 'taxonomy' == get_post_meta( $post_ID, '_menu_item_type', true ) && 'category' == get_post_meta( $post_ID, '_menu_item_object', true ) ) {
			$category = get_category( get_post_meta( $post_ID, '_menu_item_object_id', true ) );
			if ( $category->count >= 0) {
				$title .= sprintf( ' (%d)', $category->count );
			}
		}
	}
	return $title;
}
add_filter( 'the_title', 'my_the_title_menu_category', 10, 2 );

上記コードについてChatGPTに質問してみました。

以下、僕がChatGPTに投げかけた内容です。

上記はwordpressのfunctions.phpに追記するコードです。 このコードを追記すると、カテゴリ別の記事数が表示されるようになりました。 このコードの解説を日本語でお願いいたします。

これに対して、ChatGPTは以下の回答を返してくれました。

このWordPressのfunctions.phpに追記するコードは、カテゴリ別の記事数を表示するためのものです。以下はそのコードの解説です:

  1. my_the_title_menu_category 関数: この関数は、記事タイトルを修正するためのフィルター ‘the_title’ にフックするために使用されます。フィルター ‘the_title’ は、記事のタイトルを表示する際に適用されるフィルターであり、タイトルに対してカスタムの修正や追加を行うことができます。
  2. add_filter 関数: この関数は、’the_title’ フィルターに対して my_the_title_menu_category 関数を追加するために使用されます。フィルターが呼び出される際に、この追加された関数が実行されて、タイトルに変更を加えます。
  3. 条件チェック: まず、関数の中で条件をチェックしています。if 文を使って、次の条件を確認しています。
    • if ( 'nav_menu_item' == get_post_type( $post_ID ) ): これは、対象の投稿がナビゲーションメニューアイテム(メニューの項目)であるかどうかを確認しています。WordPressでは、メニュー項目も実際の投稿として扱われるため、メニューアイテムかどうかを判定しています。
    • if ( 'taxonomy' == get_post_meta( $post_ID, '_menu_item_type', true ) && 'category' == get_post_meta( $post_ID, '_menu_item_object', true ) ): これは、メニューアイテムがタクソノミー(分類)型であり、かつ対象のタクソノミーオブジェクトがカテゴリーであるかどうかを確認しています。
  4. カテゴリ別記事数の表示: 上記の条件がすべて満たされる場合、カテゴリ別の記事数を取得し、タイトルに追加しています。get_post_meta() 関数を使って、メニューアイテムのオブジェクトID(カテゴリーID)を取得し、get_category() 関数を使ってそのカテゴリーの情報を取得しています。その後、カテゴリーの記事数を確認し、タイトルに表示する形式で追加しています。例えば、カテゴリーが「技術」で記事数が5件の場合、タイトルは「技術 (5)」のように表示されることになります。
  5. 最終的なタイトルの返却: 最後に、修正や追加が行われたタイトルを返却しています。

このようにして、カテゴリ別の記事数をタイトルに追加することで、ナビゲーションメニューなどでカテゴリー毎の記事数を表示できるようになるでしょう。

以上、ChatGPTの回答でした。

my_the_title_menu_category 関数」「add_filter 関数」といったwordpressで使われている関数などについて詳しく解説してもらいました。

正直、回答内容の半分くらいしか理解できませんでしたが、やりたかった改修は実現できたし、ChatGPTから見ても問題のないコードだったみたいなので、一旦、この改修は成功と捉えています。

(改修のたびにバックアップを取っているので、問題が発生したら元に戻すだけですし、、)

wordpress学習書籍について

先日、本屋でwordpress関連の書籍を何冊か拝見した中で、wordpressで使われている関数についての解説が豊富な書籍を見つけ、Amazonで以下の本を買いました。

(買った後に持ち運ぶのがしんどいので、結局Amazonで買ってしまいます。。)

僕の職場ではLaravelというphpフレームワークが使われているため、wordpressを使う機会はあまりないのですが、趣味 兼 勉強ということで、最近こちらの本を読み進めています。

最初は紙の本をAmazonで買ったのですが、テキストエディタ(vsCodeなど)を使って実際に手を動かしながら読み進めるには不便だと感じました。

そのため、こちらの書籍のKindle版もAmazonで買って、Kindle for Macで読みながらテキストエディタを使って作業をするというスタイルに変更しています。

不要になった紙の本はメルカリで出品し、2,499円で売れました。

WordPress 6.x対応版ということもあり、現在、人気の書籍だそうです。

近々、読み進めて学んだことなどをまとめて記事投稿したいと思います。

タイトルとURLをコピーしました