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カスタマイズ依頼

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

[C] ナビカードでパスワード保護投稿...
 
共有:
通知
すべてクリア

[解決済] [C] ナビカードでパスワード保護投稿のタイトルに「保護中:」が付かない

11 投稿
2 ユーザー
17 Reactions
105 表示
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3613
トピックスターター  

----------------------------------------------
テーマ名:Cocoon
バージョン:2.8.5.6
カテゴリー数:18
タグ数:122
ユーザー数:1
----------------------------------------------

●現象

パスワード保護された投稿は、[C]新着記事や[C]人気記事の一覧ではタイトルの前に「保護中:」と表示されるが、ナビカードでは表示されない。


●原因

WordPressの仕様によるもの。
「保護中:」などのタイトル接頭辞はthe_titleフィルターなどで付加されるが、wp_get_nav_menu_items()を使うとメニュー項目の「生のタイトル」が取得されるため、接頭辞は付かない。


●対応案

現状のまま?対応する?

以下を追加し、タイトルを取得しなおす。

$title = get_the_title($object_id);

https://github.com/xserver-inc/cocoon/blob/b9df195808c7743799019912b76c629d7d4ff0ed/lib/html-forms.php#L1650


●補足

上記のことからナビゲーション(グローバルナビ)、[C]ボックスメニューにも付かない。


大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3613
トピックスターター  

●追記

ナビカードのCSSクラスは固定となってる。
これを投稿・固定ページ、カスタム投稿のとき、新着記事同様、get_post_classで投稿クラスが付けばと思います。

https://github.com/xserver-inc/cocoon/blob/b9df195808c7743799019912b76c629d7d4ff0ed/lib/html-forms.php#L1630


エックスサーバー 高澤
(@s_takazawa)
Trusted Member Moderator
結合: 8か月前
投稿: 56
 

@chu-ya さん

 

ご意見いただき、誠にありがとうございます!

 

取り急ぎのご返信、失礼いたします。

おっしゃる通り「保護中:」が表示されないため、新着記事や人気記事と統一感がなく、保護中記事であることがわかりずらいデメリットがあるかと思います。

その一方で、タイトルをget_the_title()関数とすると、メニュー項目の「ナビゲーションラベル(生のタイトル)」にて入力したタイトルが表示されなくなってしまう懸念があるかもしれません。

「ナビゲーションラベル」にて手動で「保護中:」と設定できなくもなかったり、また、自動化するためにハンドリングする場合にコード量が増え複雑化してしまう懸念があるため、それらを踏まえると私としては現状のままでもいいのではないかと思っている部分もあるのですが、chu-yaさんとしてはいかがでしょうか?

この投稿は3週間前 2回ずつエックスサーバー 高澤に変更されました

   
エックスサーバー 高澤
(@s_takazawa)
Trusted Member Moderator
結合: 8か月前
投稿: 56
 

@chu-ya さん

 

またナビカードのCSSクラスは固定になっている件に関しても、ありがとうございます。

各カードごとにクラス名が付与されていると何かと便利かと思いますため、確認し、私の方でご対応できればと思います。


   
わいひら reacted
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3613
トピックスターター  

「ナビゲーションラベル」にて手動で「保護中:」と設定できなくもなかったり、また、自動化するためにハンドリングする場合にコード量が増え複雑化してしまう懸念があるため、それらを踏まえると私としては現状のままでもいいのではないかと思っている部分もあるのですが、chu-yaさんとしてはいかがでしょうか?

どの部分でコード量が増えると言ってるのでしょうか?

仕様面で[C]ナビカードは「保護中:」と表示するのが望ましいと思います。
これは投稿を「非表示」とした場合も同様に「非表示:」が表示されません。

wp_get_nav_menu_itemsで取得したタイトルを出力するのではなく、上記の通り以下を追加するだけ「保護中:」となります。

$title = get_the_title($object_id);

https://github.com/xserver-inc/cocoon/blob/b9df195808c7743799019912b76c629d7d4ff0ed/lib/html-forms.php#L1629-L1633

また、以下に変更すれば、投稿クラスは追加できます。(新着記事と重複する部分があり汚いですが)

  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') )).'"';
  }

大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3613
トピックスターター  

上記のことからナビゲーション(グローバルナビ)、[C]ボックスメニューにも付かない。

ここまでの対応は不要です。

 

その一方で、タイトルをget_the_title()関数とすると、メニュー項目の「ナビゲーションラベル(生のタイトル)」にて入力したタイトルが表示されなくなってしまう懸念があるかもしれません。

上記はメニュー作成のナビゲーションラベルのことを指していますか?
それについては触れていません、対策案をよく読んでください。


大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3613
トピックスターター  

●対策内容

  1. 従来、[C]新着記事のとき、投稿のクラスを反映し、[C]ナビカードのときは固定としていた。
    これを修正し、[C]ナビカードで投稿・固定ページ、カスタム投稿のときも、投稿のクラスを取得し反映
  2. [C]ナビカードで投稿・固定ページ、カスタム投稿のとき、wp_get_nav_menu_itemsで取得した生の投稿タイトルでなく、get_the_titleで再取得し、カードに反映する。

get_the_title内で投稿ステータスが反映され「保護中:」が付いたタイトルなる。(WordPressの以下のコードを参照)

https://github.com/WordPress/wordpress-develop/blob/1651947e3dc6ba14e227cf5f2045df6c16908045/src/wp-includes/post-template.php#L128


●対策コード

以下の部分を

https://github.com/xserver-inc/cocoon/blob/366dae71b29897213e3fd202f29a44844b7cb01e/lib/html-forms.php#L1596-L1698

以下に差し替える

https://notepad.pw/share/cFmmpkJ4OJBuAGoxoYih


大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3613
トピックスターター  

●追記

上記のコードは[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;
});
 
 

大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3613
トピックスターター  

上記の投稿は一部無視してください。
すみません、勘違いしていました。

「ナビゲーションラベル」にて手動で「保護中:」と設定できなくもなかったり、また、自動化するためにハンドリングする場合にコード量が増え複雑化してしまう懸念があるため

言われる通り、メニュー作成の際、ナビゲーションラベルは人手入力可能なので、ナビゲーションラベル≠投稿タイトルと言うケースがありますね。

単にメニュー置き換えは難しく、get_the_titleで行っているように、投稿ステータスに応じナビゲーションラベルに「保護中:」を付加することとなり。

結果、今回のタイトルのサポートは止めましょう。


[C]ナビカードの以下の投稿クラスの反映は欲しいです。
CSSクラスが付けば、投稿ステータスを判別して「保護中:」を疑似クラスで追加すれば、デザインの統一は可能なので。

 

上記でタイトルのサポート部分で、以下のget_the_title($object_id)の部分は削除してください。

https://notepad.pw/share/cFmmpkJ4OJBuAGoxoYih


大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3613
トピックスターター  

投稿クラスの追加も含め、本件を取り下げます。

そもそも、「非公開」「パスワード保護」のページをメニューに追加するか?と言う話かと思います。
このため運用でカバーと思え。

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

エックスサーバー 高澤
(@s_takazawa)
Trusted Member Moderator
結合: 8か月前
投稿: 56
 

@chu-ya さん

 

上記承知いたしました。
また、諸々の貴重なご意見、ありがとうございます。

chu-yaさんの追加のご意見をいただき、内容に関して再認識できました。

いただいた参考のソースコードについては、今後の実装等に役立ててまいります。

引き続き、どうぞよろしくお願いいたします。


   
わいひら reacted
共有:

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

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

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

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

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

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

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

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