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と競合せずに出力されます。