特典機能について

グローバルメニューにカテゴリーごとの投稿数を表示させたい(親カテゴリーの投稿数を0でなく子カテゴリーの投稿数の合計で表示したい) | CSSカスタマイズ相談 | Cocoon フォーラム

サイト内検索
書き込みの前に以下の3点をご確認ください。
  1. 1つのトピックにつき1つの質問を書き込んでください
  2. 不具合・カスタマイズ対象ページのURLを提示高速化を無効にしてください
  3. 該当部分のキャプチャ・環境情報とともに書き込んでいただけると助かります

何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。

不具合・カスタマイズ対象ページのURL:

相談内容:

解決のために試したこと:

※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:

※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。

環境情報の取得方法はこちら。
https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
https://wp-cocoon.com/theme-trouble/

フォーラム利用ガイドリンク

  1. フォーラムガイドライン
  2. よくある質問と答え(FAQ)
  3. サポート対象外のケース
  4. 原因不明の不具合用トラブルシューティング
  5. トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw
  6. 真っ白画面でのエラーメッセージの確認方法 
  7. ブラウザ環境チェックツール

フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。

また、問題の解決に至った場合には、トピック冒頭の「解決済み」リンクをクリックしていただけますと幸いです。

wpForoの解決済みリンク

また、有用な返信があった場合は「いいね!」リンクもご活用ください。返信者の励みになります。

wpForoのいいねリンク

「いいね!」機能はフォーラム登録者のみが利用できる機能です。

CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。

フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。

最近の書き込みはこちら。

詳細なカスタマイズ依頼をするならこちら。

スポンサーリンク
グローバルメニューにカテゴリーごとの投...
 
共有:
通知
すべてクリア

[解決済] グローバルメニューにカテゴリーごとの投稿数を表示させたい(親カテゴリーの投稿数を0でなく子カテゴリーの投稿数の合計で表示したい)


manappy
(@manappy)
Active Memberサイト
結合: 2か月前
投稿: 9
Topic starter  

初めて質問させていただきます。

 

不具合・カスタマイズ対象ページのURL:

https://manappy.com/

 

相談内容:

サイドバーだけでなく、グローバルメニューにもカテゴリーごとの投稿数を表示させたいのですが、調べて見つけた方法だと、親カテゴリーの投稿数が0と表示されてしまいます。

 

投稿のカテゴリー選択で、子カテゴリーのみにチェックを入れており、親カテゴリーにはチェックを入れていないためにこのような表示になっているのだと思いますが、親カテゴリーと子カテゴリーの両方にチェックを入れるのはできれば避けたいため、親カテゴリーの投稿数を子カテゴリーの投稿数の合計で表示させる方法がありましたら教えていただけると幸いです。

 

具体的には、

親カテゴリー「外国語」

子カテゴリー「英語」

というカテゴリー階層の下、

投稿のカテゴリーで「英語」のみにチェックを入れた場合に、

 

外国語 (0)

- 英語 (1)

 

ではなく、

 

外国語 (1)

- 英語 (1)

 

となるようにしたいです。

 

なお、サイドバーのカテゴリーウィジェットに関しては、

外観 > ウィジェット > サイドバー > カテゴリー > 投稿数を表示

にチェックを入れることで、親カテゴリーにチェックを入れる・入れないに関わらず

外国語 (1)

- 英語 (1)

と表示されるため、この設定に関するソースコードが見れればカスタマイズの参考にできるかなと思った次第ですが、

「投稿数を表示」にチェックを入れることによって具体的にテーマファイルのどの部分に影響するのかがわかりませんでした。

 

解決のために試したこと:

 

①下記リンクの記事を参考にしてfunctions.phpに下記コードを追加しました。

「メニュー内のカテゴリー項目の件数表示の件で」

https://ja.wordpress.org/support/topic/%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E5%86%85%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%83%BC%E9%A0%85%E7%9B%AE%E3%81%AE%E4%BB%B6%E6%95%B0%E8%A1%A8%E7%A4%BA%E3%81%AE%E4%BB%B6%E3%81%A7/

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 );

 

※参考にした記事では、

if ( $category->count > 0 )

と書かれていましたが、投稿数が0件の場合も表示したかったため

if ( $category->count >= 0 )

と自分のほうで書き換えています。

 

その他、下記リンクの記事も読みましたが、内容があまり理解できませんでした。

 

「Wordpress カテゴリ 親子 合計記事数 表示したい」

https://teratail.com/questions/194787

 

「WordPressの親カテゴリーの件数に子カテゴリーの件数を含めて表示させたい」

https://teratail.com/questions/173703

 

※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:

----------------------------------------------
サイト名:まなっぴーブログ
サイトURL: https://manappy.com
ホームURL: https://manappy.com
コンテンツURL:/wp-content
インクルードURL:/wp-includes/
テンプレートURL:/wp-content/themes/cocoon-master
スタイルシートURL:/wp-content/themes/cocoon-child-master
親テーマスタイル:/wp-content/themes/cocoon-master/style.css
子テーマスタイル:/wp-content/themes/cocoon-child-master/style.css
スキン:/wp-content/themes/cocoon-child-master/skins/lightning-skin-customized/style.css
WordPressバージョン:6.0
PHPバージョン:7.4.28
ブラウザ:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
サーバーソフト:Apache
サーバープロトコル:HTTP/1.1
言語:ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7
----------------------------------------------
テーマ名:Cocoon
バージョン:2.4.5.4
カテゴリ数:18
タグ数:3
ユーザー数:1
----------------------------------------------
子テーマ名:Cocoon Child
バージョン:1.1.3
style.cssサイズ:845バイト
functions.phpサイズ:1834バイト

※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。


Akira
(@akira)
Noble Memberサイト
結合: 4年前
投稿: 1057
Akira - FacebookAkira - Twitter
 

WordPressの親カテゴリーの件数に子カテゴリーの件数を含めて表示させたい を参考に get_terms() でやってみました。

あまり詳しくチェックはしていませんが、投稿数は表示できると思います。

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 ) ) {
			$cats = get_terms([
				'taxonomy' => 'category',
				'pad_counts' => true,
				'hide_empty' => false
			]);
			foreach ( $cats as $cat ) {
				if ( $cat->name === $title ) {
					$title .= sprintf( ' (%d)', $cat->count );
				}
			}
		}
	}
	return $title;
}
add_filter( 'the_title', 'my_the_title_menu_category', 10, 2 );
This post was modified 2か月前 2回 by Akira

わいひらmanappy 件のいいね!
chu-ya
(@chu-ya)
Reputable Member
結合: 4か月前
投稿: 349
 

●ご参考
勉強になりました、ありがとうございます。
Akiraさんのコードですが、同一カテゴリ名称の時、問題かと?

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 ));

      $cnt = 0 ;
      if ($category -> parent) {
        // 孫子
        $cnt = $category->count;
      } else {
        // 親の場合
        $cats = get_categories(array(
          'child_of' => $category->term_id,
        ));

        // 親に属する孫子の情報取得
        foreach($cats as $cat) {
          $cnt += $cat->count;
        }
      }
      $title .= sprintf('(%d)', $cnt);
    }
  }
  return $title;
}
add_filter( 'the_title', 'my_the_title_menu_category', 10, 2 );

わいひらmanappy 件のいいね!
manappy
(@manappy)
Active Memberサイト
結合: 2か月前
投稿: 9
Topic starter  

@akira さん

早速のご返信ありがとうございます。

元々追加していたコードをコメントアウトして、

頂戴したコードに書き換えてみたのですが、親カテゴリーの投稿数は0のままでした...


manappy
(@manappy)
Active Memberサイト
結合: 2か月前
投稿: 9
Topic starter  

@chu-ya さん

元々追加していたコードをコメントアウトして、

頂戴したコードに書き換えてみたところ、実現したかった

「親カテゴリーの投稿数が子カテゴリーの投稿数の合計」で表示されました !

ありがとうございます !!

 

PHPにあまり詳しくなく、コードの意味をきちんと理解できていないので、返信後に一つ一つ読み解いて勉強させていただきます。

 

なお、コメントアウトのところに孫子と書いてあったので、孫カテゴリーを作っても同じことが成り立つのかなと思い、試しに

 

理科

- 物理

-- 量子力学

-- 統計力学

- 化学

- 生物

- 地学

 

というように孫カテゴリーまで用意してみたのですが、この場合は

親カテゴリー(理科)の投稿数は子カテゴリーと孫カテゴリーの合計になるものの、

子カテゴリー(物理)の投稿数は孫カテゴリーの合計にはならず0となるようでした。

(孫カテゴリーにチェックを入れる投稿は親カテゴリー・子カテゴリー共にチェックを入れない場合)

 

親カテゴリーの投稿数は全ての子カテゴリーと孫カテゴリーの投稿数の合計で表示して、

子カテゴリーの投稿数は全ての孫カテゴリーの投稿数の合計で表示する、つまり

 

理科 (5)

- 物理 (2)

-- 量子力学 (1)

-- 統計力学 (1)

- 化学 (1)

- 生物 (1)

- 地学 (1)

 

のように表示させるとなると、コードがかなり複雑になりそうですね💦

 

ただ、今のところ孫カテゴリーまで作る予定はなく、頂戴したコードでやりたいことが実現できたので、こちらを使わせていただきます。

 

改めてありがとうございました 😊 


manappy
(@manappy)
Active Memberサイト
結合: 2か月前
投稿: 9
Topic starter  

@chu-ya さん

 

連投失礼します。

先ほどコメントの返信で、

ただ、今のところ孫カテゴリーまで作る予定はなく、頂戴したコードでやりたいことが実現できたので、こちらを使わせていただきます。」と申し上げましたが、もし

「親カテゴリーの投稿数は全ての子カテゴリーと孫カテゴリーの投稿数の合計で表示して、

子カテゴリーの投稿数は全ての孫カテゴリーの投稿数の合計で表示する」

を実現できるようなコードが書けそうであれば、後学のために教えていただいてもよろしいでしょうか...?

(欲張りですみません...笑)

 

時間を要してchu-yaさんのご負担になるようでしたら無理なさらなくて大丈夫です💦

 

ちなみにサイドバーウィジェットでは添付のスクリーンショットのように「物理 (2)」と、孫カテゴリーの投稿数の合計で表示されているので、サイドバーの設定の裏側の仕組みが見れたら良いのですが...

 


Akira
(@akira)
Noble Memberサイト
結合: 4年前
投稿: 1057
Akira - FacebookAkira - Twitter
 

@manappy さん

Akiraさんのコードですが、同一カテゴリ名称の時、問題かと?

おっしゃる通りですね。ご指摘ありがとうございます。

また、メニューを変更するのにフィルターフック the_title を使うのが、私にはしっくりきません。

さらに、manappy さんの「親カテゴリーの投稿数は全ての子カテゴリーと孫カテゴリーの投稿数の合計で表示して、子カテゴリーの投稿数は全ての孫カテゴリーの投稿数の合計で表示する」を実現するために、このように書いてみました。

add_filter( 'wp_get_nav_menu_items', function( $items ) {
	$cats = get_categories([
		'pad_counts' => 1,
		'hide_empty' => 0
	]);
	foreach ( $items as $item ) {
		if ( $item->object === 'category' ) {
			foreach ( $cats as $cat ) {
				if ( $item->object_id === (string)$cat->term_id ) {
					$item->title .= ' (' . $cat->count . ')';
				}
			}
		}
	}
	return $items;
});

添付画像の右 4 つが、親 > 子 > 孫A と 孫B の階層になっているカテゴリーです。孫Aに 2 つ、孫B に 1 つの投稿があり、親と子は何も投稿がありません。また、親や子に投稿がある場合は、その投稿数が加算されます。左から 2 つ目の親は同じ名前のメニューがある場合のテスト用で、何も階層にはなっていません。

This post was modified 2か月前 2回 by Akira

わいひら, manappychu-ya 件のいいね!
manappy
(@manappy)
Active Memberサイト
結合: 2か月前
投稿: 9
Topic starter  

@akira さん

おお!できました!!ありがとうございます 😭 

意外と短いコードで書けるんですね ! 😲 


manappy
(@manappy)
Active Memberサイト
結合: 2か月前
投稿: 9
Topic starter  

おかげさまで本件解決しましたが、

「解決済」を押すともう誰も返信できなくなる?みたいなので、2~3日ほど様子を見てから「解決済」でクローズさせていただきたいと思います。

 

@akira さん

@chu-ya さん

 

迅速なご回答およびご協力ありがとうございました。

またお世話になるかもしれません。

今後ともよろしくお願いいたしますm(_ _)m


わいひら 件のいいね!
chu-ya
(@chu-ya)
Reputable Member
結合: 4か月前
投稿: 349
 

@akira さん

上記コードを実行した際、以下の現象となりました。

●現象
件数表示の対象が、ヘッダーメニューだけでなく、ボックスメニューのタイトルも件数表示される。

●疑問
何故か、ボックスメニューとヘッダーメニューで件数が異なり。
get_categoriesの配列を見ると、category_count、countの値が異なっており。

【ヘッダーメニュー】
[18] => WP_Term Object (
[term_id] => 10
[name] => 車
[slug] => %e8%bb%8a
[term_group] => 0
[term_taxonomy_id] => 10
[taxonomy] => category
[description] =>
[parent] => 0
[count] => 24
[filter] => raw
[term_order] => 3
[cat_ID] => 10
[category_count] => 24
[category_description] =>
[cat_name] => 車
[category_nicename] => %e8%bb%8a
[category_parent] => 0 )

【ボックスメニュー】
[term_id] => 10
[name] => 車
[slug] => %e8%bb%8a
[term_group] => 0
[term_taxonomy_id] => 10
[taxonomy] => category
[description] =>
[parent] => 0
[count] => 0
[filter] => raw
[term_order] => 3
[cat_ID] => 10
[category_count] => 0
[category_description] =>
[cat_name] => 車
[category_nicename] => %e8%bb%8a
[category_parent] => 0 )


わいひら 件のいいね!
chu-ya
(@chu-ya)
Reputable Member
結合: 4か月前
投稿: 349
 

少し調べましたが、wp_get_nav_menu_itemsを以下で用いており。
件数がタイトルに付加されてしまいます。

  • navi_list
  • box_menu

この時、先にも書きましたが、カテゴリが以下の時、
ヘッダーメニューは車(24)となるが、なぜかボックスメニューは車(0)となり。
同じメニューを、ヘッダーメニューと、ボックスメニューに設定しているのに、値が異なる原因が不明です。

車(0)
 + ポルシェ(4)
 + ラパン(20)


わいひら 件のいいね!
Akira
(@akira)
Noble Memberサイト
結合: 4年前
投稿: 1057
Akira - FacebookAkira - Twitter
 

@manappy さん

この方法はダメかもしれません。スマホでメニューを表示した際に、投稿数が正常に取得できていないです。

ちょうど不具合としてご報告のあった カテゴリーの記事数カウントがPCとスマホで異なる と同じ現象が起きています。

これが WordPress 、具体的には get_categories() の仕様なのか不具合なのか判断できていません。仕様との前提でコードを変更するのがいいように思えます。コードをどう書くか考えますが、申し訳ありませんが返事は遅くなると思います。


わいひら 件のいいね!
Akira
(@akira)
Noble Memberサイト
結合: 4年前
投稿: 1057
Akira - FacebookAkira - Twitter
 

WordPress の不具合のようですので、修正が予定されている 6.0.1 がリリースされるまで様子を見ます。

参考:WP_Term_Query cache problem


わいひら 件のいいね!
chu-ya
(@chu-ya)
Reputable Member
結合: 4か月前
投稿: 349
 

根本原因、まさかのオチで、上記の私の疑問はクローズです。


わいひら 件のいいね!
manappy
(@manappy)
Active Memberサイト
結合: 2か月前
投稿: 9
Topic starter  

@akira さん

 

お知らせありがとうございます。

スマホでメニューを開いたときの表示は確認しておらず気づいておりませんでした。

(スマホでサイドバーを開いたときのカテゴリーウィジェットに、PCでは表示されない投稿数0件のカテゴリーも表示されていることは先日気づいて、なんでだろうと思っていましたが、それは本件とは直接関係ないかなと思って一旦無視してしまっていました)

 

WordPressの不具合が修正されるまでは本件クローズせずに様子見とさせていただきます。

This post was modified 2か月前 by manappy

わいひら 件のいいね!
mk2
(@mk2_mk2)
メンバー Moderator
結合: 1年前
投稿: 3642
 

各位

WordPress 6.0.1がリリースされました。

ご確認をお願い致します。


manappyわいひら 件のいいね!
Akira
(@akira)
Noble Memberサイト
結合: 4年前
投稿: 1057
Akira - FacebookAkira - Twitter
 

@manappy さん

WordPress 6.0.1 にバージョンアップした私の環境では、パソコンでもスマホでも正常に動作しています。


manappyわいひら 件のいいね!
manappy
(@manappy)
Active Memberサイト
結合: 2か月前
投稿: 9
Topic starter  

@akira さん

@mk2_mk2 さん

 

すみません。気づくのが遅くなりました。

 

パソコンでもスマホでも正常に動作していることが確認できました。

 

どうもありがとうございました!


わいひら 件のいいね!
共有:
スポンサーリンク
SWELLと業務提携しています
WordPressテーマSWELL
わいひらをフォローする
おすすめサーバー(コスパ・バックアップ重視型)

性能も兼ね備えながら安くブログ運営を開始できる点においてのNo.1。
それでいてブログ成長後は、十分すぎるほどのスペックアップ余力も担保されている。

◎安く始められる
◎LiteSpeedを用いた高速サーバー(完全SSD)
◎http/3(高速化プロトコル)に対応
◎東京・大阪でリージョン選択が可能
◎プランのアップ・ダウングレードが自由自在
◎同サービス内でドメイン管理が可能
◎ディスク容量が多い
◎転送量が多い
◎毎日無料バックアップ(14日分)
◎DBは14日以内なら無料自動復旧可能
◎ファイルも14日以内なら無料自動復旧可能
◎アダルト・出会い系サイト可
◎ドメインとサーバー代のチャージ払いが可能
○サーバ引っ越し依頼が可能(有料)

サービス運営期間:4年

1年以上の契約をする場合は、クーポンコード入力でさらに50%割引キャンペーン中!
※BOX2 ~ BOX8プラン契約の場合

クーポンコード:PK4JK4RJ

クーポンの使用方法はこちら

安定感抜群のサーバーです。あまり急激なアクセス変動がないアフィリエイトサイトに向いています。

◎nginxを用いた高速サーバー(完全SSD)
◎老舗サーバーなので安定感抜群
◎ディスク容量が多い
◎転送量が多い
◎同サービス内でドメイン管理が可能
○http/2(高速化プロトコル)に対応
○毎日無料バックアップ(14日分)
◎DBは14日以内なら無料自動復旧可能
○ファイルは7日以内なら無料自動復旧可能
×プラン変更でCPUのスペックアップができない
×プラン変更しても即時反映されない
×アダルト・出会い系サイト不可

サービス運営期間:19年

とにかく速い。サイトに表示スピードを求めるならココ。
管理画面がシンプルで使いやすい。

◎nginxを用いた高速サーバー(完全SSD)
◎プランのアップ・ダウングレードが自由自在
◎同サービス内でドメイン管理が可能
◎ディスク容量が多い
◎転送量が多い
○http/2(高速化プロトコル)に対応
◎毎日無料バックアップ(14日分)
×DBは手動で復旧(データ取得は無料)
×ファイルも手動で復旧(データ取得は無料)
◎サーバ引っ越しツールあり(無料)
○サーバ引っ越し依頼が可能(有料)
◎ドメインとサーバー代のチャージ払いが可能

サービス運営期間:3年

常に新しいことに挑戦しているフロンティア精神あふるるレンタルサーバーです。
LiteSpeedやHTTP/2を日本で初めて導入したサーバー。

◎LiteSpeedを用いた高速サーバー(完全SSD)
◎http/3(高速化プロトコル)に対応
◎プランのアップ・ダウングレードが自由自在
◎同サービス内でドメイン管理が可能
◎転送量が多い
◎ディスク容量が多い
◎毎日無料バックアップ(14日分)
◎DBは14日以内なら無料自動復旧可能
×ファイルは手動復旧(データ取得は無料)
◎アダルト・出会い系サイト可
◎ドメインとサーバー代のチャージ払いが可能
○サーバ引っ越し依頼が可能(有料)

サービス運営期間:6年

格安な値段で始められる高機能サーバーです。
性能も備えつつ最安ならここ。
ただし少し機能は弱い。

◎LiteSpeedを用いた高速サーバー(完全SSD)
◎激安プランが用意してある
◎値段あたりのスペックが高い(コスパ良し)
◎サーバ引っ越し依頼が可能(無料)
◎アダルト・出会い系サイト可
○http/2(高速化プロトコル)に対応
△プランのアップは可能だがダウンは不可
△毎日自動バックアップ(1日分)
△前日のバックアップからのみ復元できる(無料)

サービス運営期間:6年

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