All in One SEOとContact Form 7 5.8の競合ケース

Contact Form 7のフォーム設置ページで、All in One SEO設定内容によっては Contact Form 7 5.8更新によりコンフリクトが発生するので、その回避メモ。

コンフリクトが発生するケース

●Contact Form 7 利用のフォームで id属性を設定し、JavaScriptやCSSで使用
(バージョン5.8の新仕様により、同じid属性が存在する場合に2つ目からHTML出力されません)

●All in One SEO 設定
 1) 検索の外観 ⇒高度な設定 ⇒ショートコードを実行 : ON
 2) Contact Form 7 利用ページのAll in One SEO設定(メタディスクリプション等)で「投稿コンテンツ」や「固定ページコンテンツ」タグを使用

上記条件になると、そのページはコンテンツ本文を2回パース(ショートコードを展開)します。

・1回目:All in One SEO設定の「投稿コンテンツ」や「固定ページコンテンツ」タグのパース
・2回目:本来のコンテンツ本文のHTML出力

つまり、ショートコード[contact-form-7]が2回パースされ、あたかも同じidが2回出力されたかのような状態になります。

このため、本来のコンテンツ本文のHTML出力では、id属性が出力されず、JavaScriptやCSSが機能しなくなります。

コンフリクトの回避策

「投稿コンテンツ」や「固定ページコンテンツ」タグを使用しないことでも回避できますが、以下はAll in One SEO提供のフックを利用した方法です。

方法1:フックaioseo_disable_shortcode_parsing利用

このフックにより、「ショートコードを実行」をONでも、ショートコードを解析しません。

add_filter( 'aioseo_disable_shortcode_parsing', '__return_true' );

方法2:フックaioseo_conflicting_shortcodes利用

このフックにより、「ショートコードを実行」をONでも、パースしないショートコードを設定できます。

例)[contact-form-7]をパース対象外にします。

add_filter( 'aioseo_conflicting_shortcodes', function( $conflictingShortcodes ){
   $conflictingShortcodes = array_merge( $conflictingShortcodes, [
		'Contact Form 7' => '[contact-form-7]'
   ] );
   return $conflictingShortcodes;
} );

他)Accept Stripe Paymentsプラグインの商品一覧ショートコード[asp_show_all_products]を追加します。

add_filter( 'aioseo_conflicting_shortcodes', function( $conflictingShortcodes ){
   $conflictingShortcodes = array_merge( $conflictingShortcodes, [
		'Contact Form 7' => '[contact-form-7]',
		'Accept Stripe Payments' => '[asp_show_all_products]'
   ] );
   return $conflictingShortcodes;
} );

これにより、Accept Stripe Paymentsの商品一覧ページが、All in One SEOと競合せずに出力されます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です