サイト内検索
Cocoonフォーラム

書き込みの前に以下の3点をご確認ください。
何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。
不具合・カスタマイズ対象ページのURL:
相談内容:
不具合の発生手順:
解決のために試したこと:
※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。
環境情報の取得方法はこちら。
→ https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
→ https://wp-cocoon.com/theme-trouble/
フォーラム利用ガイドリンク
- フォーラムガイドライン
- よくある質問と答え(FAQ)
- サポート対象外のケース
- 原因不明の不具合用トラブルシューティング
- トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw)
- 真っ白画面でのエラーメッセージの確認方法
- ブラウザ環境チェックツール
- Cocoonカスタマイズ依頼
フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。
Cocoonテーマに関する質問
11
投稿
2
ユーザー
17
Reactions
105
表示
トピックスターター 2025年5月21日 14:21
----------------------------------------------
テーマ名:Cocoon
バージョン:2.8.5.6
カテゴリー数:18
タグ数:122
ユーザー数:1
----------------------------------------------
●現象
パスワード保護された投稿は、[C]新着記事や[C]人気記事の一覧ではタイトルの前に「保護中:」と表示されるが、ナビカードでは表示されない。
●原因
WordPressの仕様によるもの。
「保護中:」などのタイトル接頭辞はthe_titleフィルターなどで付加されるが、wp_get_nav_menu_items()を使うとメニュー項目の「生のタイトル」が取得されるため、接頭辞は付かない。
●対応案
現状のまま?対応する?
以下を追加し、タイトルを取得しなおす。
$title = get_the_title($object_id);
●補足
上記のことからナビゲーション(グローバルナビ)、[C]ボックスメニューにも付かない。
わいひら and エックスサーバー 高澤 reacted
トピックスターター 2025年5月21日 16:30
●追記
ナビカードのCSSクラスは固定となってる。
これを投稿・固定ページ、カスタム投稿のとき、新着記事同様、get_post_classで投稿クラスが付けばと思います。
わいひら and エックスサーバー 高澤 reacted
2025年5月21日 18:19
@chu-ya さん
ご意見いただき、誠にありがとうございます!
取り急ぎのご返信、失礼いたします。
おっしゃる通り「保護中:」が表示されないため、新着記事や人気記事と統一感がなく、保護中記事であることがわかりずらいデメリットがあるかと思います。
その一方で、タイトルをget_the_title()関数とすると、メニュー項目の「ナビゲーションラベル(生のタイトル)」にて入力したタイトルが表示されなくなってしまう懸念があるかもしれません。
「ナビゲーションラベル」にて手動で「保護中:」と設定できなくもなかったり、また、自動化するためにハンドリングする場合にコード量が増え複雑化してしまう懸念があるため、それらを踏まえると私としては現状のままでもいいのではないかと思っている部分もあるのですが、chu-yaさんとしてはいかがでしょうか?
この投稿は3週間前 2回ずつエックスサーバー 高澤に変更されました
トピックスターター 2025年5月21日 18:50
「ナビゲーションラベル」にて手動で「保護中:」と設定できなくもなかったり、また、自動化するためにハンドリングする場合にコード量が増え複雑化してしまう懸念があるため、それらを踏まえると私としては現状のままでもいいのではないかと思っている部分もあるのですが、chu-yaさんとしてはいかがでしょうか?
どの部分でコード量が増えると言ってるのでしょうか?
仕様面で[C]ナビカードは「保護中:」と表示するのが望ましいと思います。
これは投稿を「非表示」とした場合も同様に「非表示:」が表示されません。
wp_get_nav_menu_itemsで取得したタイトルを出力するのではなく、上記の通り以下を追加するだけ「保護中:」となります。
$title = get_the_title($object_id);
また、以下に変更すれば、投稿クラスは追加できます。(新着記事と重複する部分があり汚いですが)
if ($prefix === WIDGET_NAVI_ENTRY_CARD_PREFIX) { $post_types = get_custum_post_types(); if ($object === 'post' || $object === 'page' || in_array($object, $post_types)) { // 投稿・固定ページ・カスタム投稿 $div_class = 'class="'.implode(' ', get_post_class( array('post-'.get_the_ID(), $prefix.'-entry-card', 'widget-entry-card', 'e-card', 'cf') )).'"'; } else { $div_class = 'class="'.$prefix.'-entry-card widget-entry-card e-card cf"'; } } else { $div_class = 'class="'.implode(' ', get_post_class( array('post-'.get_the_ID(), $prefix.'-entry-card', 'widget-entry-card', 'e-card', 'cf') )).'"'; }
エックスサーバー 高澤 and わいひら reacted
トピックスターター 2025年5月21日 23:21
●対策内容
- 従来、[C]新着記事のとき、投稿のクラスを反映し、[C]ナビカードのときは固定としていた。
これを修正し、[C]ナビカードで投稿・固定ページ、カスタム投稿のときも、投稿のクラスを取得し反映。 - [C]ナビカードで投稿・固定ページ、カスタム投稿のとき、wp_get_nav_menu_itemsで取得した生の投稿タイトルでなく、get_the_titleで再取得し、カードに反映する。
get_the_title内で投稿ステータスが反映され「保護中:」が付いたタイトルなる。(WordPressの以下のコードを参照)
●対策コード
以下の部分を
以下に差し替える
わいひら and エックスサーバー 高澤 reacted
トピックスターター 2025年5月22日 00:09
●追記
上記のコードは[C]ナビカードの投稿タイトルを対象としています。
もっとも上位で、メニューで設定したメニューを使用する際、メニュー内に投稿・固定ページ・カスタム投稿が含まれる場合、それをget_the_titleに置き換えう方法もあります。
この場合、ナビゲーション、[C]ナビメニュー、[C]ボックスメニューにも反映されることとなります。
add_filter('wp_setup_nav_menu_item', function($menu_item) { // 投稿・固定ページ・カスタム投稿タイプに限定 if ( $menu_item->type === 'post_type' && $menu_item->object_id ) { // get_the_title() で保護中などを反映 $menu_item->title = get_the_title( $menu_item->object_id ); } return $menu_item; });
わいひら and エックスサーバー 高澤 reacted
トピックスターター 2025年5月22日 00:40
上記の投稿は一部無視してください。
すみません、勘違いしていました。
「ナビゲーションラベル」にて手動で「保護中:」と設定できなくもなかったり、また、自動化するためにハンドリングする場合にコード量が増え複雑化してしまう懸念があるため
言われる通り、メニュー作成の際、ナビゲーションラベルは人手入力可能なので、ナビゲーションラベル≠投稿タイトルと言うケースがありますね。
単にメニュー置き換えは難しく、get_the_titleで行っているように、投稿ステータスに応じナビゲーションラベルに「保護中:」を付加することとなり。
結果、今回のタイトルのサポートは止めましょう。
[C]ナビカードの以下の投稿クラスの反映は欲しいです。
CSSクラスが付けば、投稿ステータスを判別して「保護中:」を疑似クラスで追加すれば、デザインの統一は可能なので。
上記でタイトルのサポート部分で、以下のget_the_title($object_id)の部分は削除してください。
わいひら and エックスサーバー 高澤 reacted
トピックスターター 2025年5月22日 01:10
投稿クラスの追加も含め、本件を取り下げます。
そもそも、「非公開」「パスワード保護」のページをメニューに追加するか?と言う話かと思います。
このため運用でカバーと思え。
WordPressの仕様で「固定ページ」ウィジェットでも、パスワード保護がある場合、「保護中:」が付かず。
無理にサポートしても中途半端になってしまい。
●余談
参考までに、フックで投稿ステータスに応じ、ナビゲーションラベルの前に、「保護中:」などを付けることは可能です。
add_filter('wp_setup_nav_menu_item', function($menu_item) { // 投稿・固定ページ・カスタム投稿タイプに限定 if ( $menu_item->type === 'post_type' && $menu_item->object_id ) { $post = get_post( $menu_item->object_id ); $title = get_the_title( $post ); // タイトルの前にステータス情報を追加 if ( ! empty( $post->post_password ) ) { $title = '保護中: ' . $title; } elseif ( isset( $post->post_status ) && 'private' === $post->post_status ) { $title = '非公開: ' . $title; } $menu_item->title = $title; } return $menu_item; });
わいひら and エックスサーバー 高澤 reacted
問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。
また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。
(CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。
フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。
最近の書き込みはこちら。
詳細なカスタマイズ依頼をするならこちら。