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

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

このフォーラムには初心者の方も多く参加されています。質問に不慣れな方も安心して相談できるよう、できるだけ穏やかな言葉でご案内いただけますと幸いです。

FAQPageに同じFAQブロックの情...
 
通知
すべてクリア

FAQPageに同じFAQブロックの情報が複数出力される

1 投稿
1 ユーザー
0 Reactions
11 表示
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 4年前
投稿: 4408
トピックスターター  

----------------------------------------------
テーマ名:Cocoon
バージョン:2.9.2.8
カテゴリー数:18
タグ数:124
投稿数:1750
固定ページ数:12
ユーザー数:1
----------------------------------------------

●補足記事

https://wp-cocoon.com/community/postid/88677/


●設定

スキン「メイド・イン・ヘブン」


●現象

FAQブロックを1つだけ配置したのに、FAQPageに同じFAQブロックの情報が複数出力される。

<!-- wp:cocoon-blocks/faq {"question":"デフォルト"} -->
<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">デフォルト</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content"><!-- wp:paragraph -->
<p>回答</p>
<!-- /wp:paragraph --></div></dd></dl></div>
<!-- /wp:cocoon-blocks/faq -->

 

<script type="application/ld+json">{
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
        {
            "@type": "Question",
            "name": "デフォルト",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "<p>回答</p>"
            }
        },
        {
            "@type": "Question",
            "name": "デフォルト",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "<p>回答</p>"
            }
        },
        {
            "@type": "Question",
            "name": "デフォルト",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "<p>回答</p>"
            }
        },
        {
            "@type": "Question",
            "name": "デフォルト",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "<p>回答</p>"
            }
        }
    ]
}</script>

 


●原因

他でもレンダリングフィルターが使用されることが考慮されていない。

スキンにおいてフィルターを用い、FAQ ブロックの HTML 構造を書き換える処理が行わる。

https://github.com/xserver-inc/cocoon/blob/add4cd367aedeafb4629a450b940a1d2525d6620/skins/skin-made-in-heaven/lib/hook-wp.php#L883

functions.php に定義されている cocoon_blocks_faq も同じ render_block_cocoon-blocks/faq フィルターをフックしている。

スキン側とテーマ側の両方でレンダリング処理が走る際、その都度 add_filter('cocoon_faq_entity', ...) が呼び出される。

その結果、1つのブロックに対して複数の無名関数が登録され、wp_footer 実行時に同じ FAQ データが配列に何度も追加される

https://github.com/xserver-inc/cocoon/blob/add4cd367aedeafb4629a450b940a1d2525d6620/functions.php#L442-L450


●対策

static 変数を用いて、同一リクエスト内で同じブロックが処理された場合は JSON 用のデータ登録をスキップする制御を追加する。

function cocoon_blocks_faq($content, $block) {
  // 処理済みブロックを保持する静的変数
  static $processed_faq_blocks = [];

  // ブロック属性と内容から一意のID(ハッシュ)を生成
  // これにより、同じ内容のブロックが再レンダリングされても識別可能
  $block_id = md5(serialize($block['attrs']) . $block['innerHTML']);

  // すでにこのリクエストで処理済みの場合は、データ登録をスキップしてHTMLのみ返す
  if (isset($processed_faq_blocks[$block_id])) {
    return $content;
  }

  // 処理済みとしてマーク
  $processed_faq_blocks[$block_id] = true;

  add_filter('cocoon_faq_entity', function ($faq) use ($content, $block) {
    return cocoon_add_faq($content, $block, $faq, 'question');
  });

  return $content;
}

●補足

tmp/json-ld-faq.phpは使われていないのでは?


このトピックは1時間前 2回から大門未知子に変更されました

   
引用
共有:

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

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

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

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

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

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

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

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