サポート » プラグイン » 特定のテーマで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の表示が可能になるかと思います。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • モデレーター Takayuki Miyoshi

    (@takayukister)

    詳細な情報ありがとうございます。init より前にショートコードの展開が走るケースは想定していませんでした。次期メジャーアップデートのタイミングで対応を検討したいと思います。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「特定のテーマでContact Form 7のrecaptchaが表示されない問題の対策」には新たに返信することはできません。