お問い合わせ

SWELLカスタマイズ|faqブロックの「FAQの構造化データを出力する」をすべての記事でオンにする

SWELLのフォーラムにそういえばそうだよね!という投稿がありました。

お世話になっております。1点質問になります(不具合ではございません)

「FAQの構造化データを出力する」をすべての記事でオンにするには、1記事ずつ編集する必要がありますでしょうか。また、デフォルトでオンにすることができますでしょうか。

「構造化データ」「FAQ」といったキーワードでGoogle、フォーラムともに検索しましたが、既にトピックにございましたら申し訳ありません。よろしくお願いいたします。

FAQの構造化データ出力をデフォルトでオンにする < SWELLに関する質問

FAQブロックの構造化データ出力は最近の流行です。

Snow Monkey BlocksのFAQブロックでも、構造化データを常時出力するようになりました。

そもそも、FAQブロックの構造化データ出力を個別にON/OFFする必要があるのか?という話で言えば、無いと思います。

常に出すか、出さないかの2択だと思います。

SWELLのFAQブロックの「FAQの構造化データを出力する」は初期状態ではOFFです。

他のテーマのFAQブロックはどうでしょうか?

テーマ or ブロックブロック挿入時の構造化データ出力設定
SWELLOFF
Cocoon常時ON
Snow Monkey Blocks常時ON
Emanon Premium BlocksOFF
SANGO FAQブロックOFF
FAQブロックの構造化データ出力

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>

まとめ

ブロックの設定は記事にjson型式で書き込まれて保存されているので、テキストの置換を行うのは結構大変です。

ブロックの本体で初期値を変えてもらえばいい話なんですが、いろんなユーザーが色んな使い方をしているので、個別に対応するしかないかもしれませんね。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

目次