特定のテーマでContact Form 7のrecaptchaが表示されない問題の対策
-
いつもContact Form 7を有難く利用させて頂いております。
sageという骨組みだけのテーマを改造してWebサイトを構築していたところ、
Contact Form 7のrecaptchaが表示されないという問題が発生し、苦戦の末自己解決しました。
同じテーマもしくは同様の症状が出るテーマを使う方がいるかもしれないためご報告させて頂きます。Wordpressのバージョン 4.7.1
Contact Form 7のバージョン 4.6
使用したテーマ Sage 9.0.0-beta.2 https://roots.io/sage/症状としては[recaptcha]のショートタグが展開されないという状態で、
動作するテーマと比較すると、本来であれば
https://www.google.com/recaptcha/api.js のscriptタグが
recaptchaを含んだContact Form 7を設置しているページを表示した際に
wp_footer領域に追加されるようなのですが、
当該テーマではscriptタグが追加されないという状態でした。コードを追ったところ、modules/recaptcha.php の240行目において、
wpcf7_recaptcha_enqueue_scripts関数のwp_register_script( 'google-recaptcha', $url, array(), '2.0', true );
のコードでscriptタグを登録し、同ファイル307行目において
wpcf7_recaptcha_form_tag_handler関数のwp_enqueue_script( 'google-recaptcha' );
のコードで当該scriptタグの出力を指示しているように見受けられました。
本来の動作であれば wpcf7_init のactionで先に wp_register_script が動作し
その後実際にrecaptchaを使うフォームを展開するときに wp_enqueue_script が
呼ばれるのが正しい動作と推測されるのですが、
sageのテーマでは wp_init に先行して記事内容の解析を行うようで
wpcf7_recaptcha_enqueue_scripts関数より先に
wpcf7_recaptcha_form_tag_handler関数が呼ばれてしまっていました。解決策としては上記より早く呼ばれるタイミングでwpcf7_recaptcha_enqueue_scripts関数を呼ぶために
テーマファイルの functions.php にif (!wp_script_is( 'google-recaptcha', 'registered' )) wpcf7_recaptcha_enqueue_scripts();
の一行を追加する事で動作するようになりました。
また、もしプラグイン側で順番の入れ子に対応して頂けるのであれば、
recaptcha.php の 306行目のwpcf7_recaptcha_form_tag_handler関数の最初の行に
上記と同じコードif (!wp_script_is( 'google-recaptcha', 'registered' )) wpcf7_recaptcha_enqueue_scripts();
を追加することで対応可能でした。
上記コードによりwp_initより先行してコンテンツの解析が走ってしまうテーマでも
recaptchaの表示が可能になるかと思います。
- トピック「特定のテーマでContact Form 7のrecaptchaが表示されない問題の対策」には新たに返信することはできません。