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. ブラウザ環境チェックツール
  8. Cocoonカスタマイズ依頼

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

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

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

18 投稿
4 ユーザー
19 Reactions
2,264 表示
(@manappy)
Active Member Registered
結合: 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)
Famed Member Registered
結合: 7年前
投稿: 1657
 

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

   
わいひら and manappy reacted
chu-ya
(@chu-ya)
Famed Member Registered
結合: 2年前
投稿: 2685
 

●ご参考
勉強になりました、ありがとうございます。
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 );

   
わいひら and manappy reacted
(@manappy)
Active Member Registered
結合: 2年前
投稿: 9
Topic starter  

@akira さん

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

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

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


   
(@manappy)
Active Member Registered
結合: 2年前
投稿: 9
Topic starter  

@chu-ya さん

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

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

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

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

 

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

 

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

 

理科

- 物理

-- 量子力学

-- 統計力学

- 化学

- 生物

- 地学

 

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

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

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

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

 

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

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

 

理科 (5)

- 物理 (2)

-- 量子力学 (1)

-- 統計力学 (1)

- 化学 (1)

- 生物 (1)

- 地学 (1)

 

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

 

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

 

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


   
(@manappy)
Active Member Registered
結合: 2年前
投稿: 9
Topic starter  

@chu-ya さん

 

連投失礼します。

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

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

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

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

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

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

 

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

 

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

 


   
(@akira)
Famed Member Registered
結合: 7年前
投稿: 1657
 

@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

   
(@manappy)
Active Member Registered
結合: 2年前
投稿: 9
Topic starter  

@akira さん

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

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


   
(@manappy)
Active Member Registered
結合: 2年前
投稿: 9
Topic starter  

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

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

 

@akira さん

@chu-ya さん

 

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

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

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


   
わいひら reacted
chu-ya
(@chu-ya)
Famed Member Registered
結合: 2年前
投稿: 2685
 

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


   
わいひら reacted
chu-ya
(@chu-ya)
Famed Member Registered
結合: 2年前
投稿: 2685
 

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

  • navi_list
  • box_menu

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

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


   
わいひら reacted
(@akira)
Famed Member Registered
結合: 7年前
投稿: 1657
 

@manappy さん

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

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

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


   
わいひら reacted
(@akira)
Famed Member Registered
結合: 7年前
投稿: 1657
 

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

参考:WP_Term_Query cache problem


   
わいひら reacted
chu-ya
(@chu-ya)
Famed Member Registered
結合: 2年前
投稿: 2685
 

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


   
わいひら reacted
(@manappy)
Active Member Registered
結合: 2年前
投稿: 9
Topic starter  

@akira さん

 

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

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

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

 

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

This post was modified 2年前 by manappy

   
わいひら reacted
mk2
(@mk2_mk2)
Illustrious Member Moderator
結合: 4年前
投稿: 7672
 

各位

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

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


   
manappy and わいひら reacted
(@akira)
Famed Member Registered
結合: 7年前
投稿: 1657
 

@manappy さん

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


   
manappy and わいひら reacted
(@manappy)
Active Member Registered
結合: 2年前
投稿: 9
Topic starter  

@akira さん

@mk2_mk2 さん

 

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

 

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

 

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


   
わいひら reacted
共有:

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

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

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

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

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

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

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

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