SWELLのフォーラムにそういえばそうだよね!という投稿がありました。
お世話になっております。1点質問になります(不具合ではございません)
「FAQの構造化データを出力する」をすべての記事でオンにするには、1記事ずつ編集する必要がありますでしょうか。また、デフォルトでオンにすることができますでしょうか。
「構造化データ」「FAQ」といったキーワードでGoogle、フォーラムともに検索しましたが、既にトピックにございましたら申し訳ありません。よろしくお願いいたします。
FAQの構造化データ出力をデフォルトでオンにする < SWELLに関する質問
FAQブロックの構造化データ出力は最近の流行です。
Snow Monkey BlocksのFAQブロックでも、構造化データを常時出力するようになりました。
そもそも、FAQブロックの構造化データ出力を個別にON/OFFする必要があるのか?という話で言えば、無いと思います。
常に出すか、出さないかの2択だと思います。
SWELLのFAQブロックの「FAQの構造化データを出力する」は初期状態ではOFFです。
他のテーマのFAQブロックはどうでしょうか?
テーマ or ブロック | ブロック挿入時の構造化データ出力設定 |
---|---|
SWELL | OFF |
Cocoon | 常時ON |
Snow Monkey Blocks | 常時ON |
Emanon Premium Blocks | OFF |
SANGO FAQブロック | OFF |
SWELLでFAQブロックの構造化データ出力を取り入れたのはかなり早い段階だったと思いますので、初期状態はOFFにしてあるのは無難な選択だったと思います。
しかし、FAQブロックの構造化データ出力を導入したのが早かったのが災いして、過去の記事のすべてFAQブロックの「FAQの構造化データを出力する」ONにするのは現実的じゃない数の人もいるでしょう。
フォーラムでの要求はごもっともです。
この記事では、SWELLのFAQブロックの構造化データ出力を強制的にONにするカスタマイズコードをご紹介します。
FAQブロックの「FAQの構造化データを出力する」はどこに保存されているか?
記事のテキストデータとして保存されています。
こんな感じでFAQブロックを置いて、「FAQの構造化データを出力する」ONにします。
FAQブロックの例です
- 質問
答え
コードエディタで見ると、以下のようなコードになっています。
普通に行うとすれば、DB内部のテキスト置換で“outputJsonLd”:trueを追加する必要がありますね。
<!-- wp:loos/faq {"outputJsonLd":true} -->
<dl class="swell-block-faq" data-q="col-text" data-a="col-text"><!-- wp:loos/faq-item -->
<div class="swell-block-faq__item"><dt class="faq_q">質問</dt><dd class="faq_a"><!-- wp:paragraph -->
<p>答え</p>
<!-- /wp:paragraph --></dd></div>
<!-- /wp:loos/faq-item --></dl>
<!-- /wp:loos/faq -->
render_blockフックで属性値を書き換えた方が良さそう
「FAQの構造化データを出力する」を実際に行っているのは、lib\gutenberg\render_hook\faq.php
です。
‘outputJsonLd’が設定されている場合は、FAQのHTML以外に構造化データも出力します。
/**
* FAQブロック
*/
add_filter( 'render_block_loos/faq', __NAMESPACE__ . '\render_faq', 10, 2 );
function render_faq( $block_content, $block ) {
$atts = $block['attrs'] ?? [];
$outputJsonLd = $atts['outputJsonLd'] ?? false;
このrender_blockフックを書き換えれば良さそうです。
カスタマイズコード
自前のcallback関数を書いてしまうと、保守の観点でよくないので、SWELLのオリジナルcallback関数(render_faq()
)を使いつつ、属性値(outputJsonLd
)だけ書き換える方法にします。
かなり強引ですが、オリジナルのフックを削除して、属性値を書き換えるラッパーの中で本来のcallback関数NAMESPACE . '\render_faq'
を使って処理します。
namespace SWELL_Theme\Gutenberg;
/**
* FAQブロックの構造化データ出力を強制的にONにする
*/
remove_filter( 'render_block_loos/faq', __NAMESPACE__ . '\render_faq', 10, 2 );
add_filter( 'render_block_loos/faq', __NAMESPACE__ . '\render_faq2', 10, 2 );
function render_faq2( $block_content, $block ) {
$block['attrs']['outputJsonLd'] = true;//trueじゃなくてもなんでもいい
return render_faq($block_content, $block);
}
構造化データ出力
<script type="application/ld+json">{"@context":"https:\/\/schema.org","@id":"#FAQContents","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"質問","acceptedAnswer":{"@type":"Answer","text":"<p>答え<\/p>"}}]}</script>
SWELL FAQブロックのその他のカスタマイズ


まとめ
ブロックの設定は記事にjson型式で書き込まれて保存されているので、テキストの置換を行うのは結構大変です。
ブロックの本体で初期値を変えてもらえばいい話なんですが、いろんなユーザーが色んな使い方をしているので、個別に対応するしかないかもしれませんね。
コメント