【WordPress】WordPressやプラグインの更新後にrecaptchaの表示制限などをしているプログラムが効かなくなった際の対処方法

WordPressとプラグインの更新を行ったところ、recaptchaの表示をお問合せページのみに制限している下記プログラムが効かなくなっていました。

function load_recaptcha_js() {
  if (!is_page('contact') ) {
    wp_dequeue_style('contact-form-7');
    wp_deregister_script('contact-form-7');
    wp_deregister_script('google-recaptcha');
  }
}
add_action( 'wp_enqueue_scripts', 'load_recaptcha_js' );

参考:Contact Form 7でreCAPTCHA v3のロゴを非表示にする方法

更新する前は正常に機能していたので、原因はWordPressかプラグインの更新しか考えられませんでした。
プログラムを見ると、WordPress関数の「is_page」「wp_deregister_script」「add_action」のいずれかの動作に問題があることが考えられるため、調査をしてみました。

広告

add_actionの処理の優先度を変えることで解決

稀にWordPressにもバグがあるので、念のため現バージョンで「is_page」「wp_deregister_script」「add_action」にバグがないか探してみましたが、特に見つかりませんでした。

色々と検索をしてみると、下記のような記事を発見しました。
不要なスタイルシート・JavaScriptを読み込まないようにする

上記記事の最後の章に「削除がうまくいかないとき」という項目があります。
「add_action」関数には優先度を付けられるので、処理の優先度を下げることで解消する場合があるとのことです。

自分も実際に下記のようなプログラムに直して解決しました。

function load_recaptcha_js() {
  if (!is_page('contact') ) {
    wp_dequeue_style('contact-form-7');
    wp_deregister_script('contact-form-7');
    wp_deregister_script('google-recaptcha');
  }
}
add_action( 'wp_enqueue_scripts', 'load_recaptcha_js', 100 );

違いは8行目の「add_action」関数に3つ目の引数として「100」を指定している箇所になります。

ざっくり説明すると、プログラムは上から順に処理を行うため、処理の順番によってはプログラムが正常に動かないことがあります。
元のプログラムは「add_action」に優先度を明確に指定していませんでしたが、更新前は偶然下記のような処理の順番になっていたようです。

  1. google-recaptchaのスクリプトファイル読み込み
  2. google-recaptchaのスクリプトファイル読み込み削除

ですが、WordPressやプラグインの更新によって何らかの処理の優先順位に変更があり、下記のように処理の順番が変わってしまったため、recaptchaのスクリプトが削除できなかったようです。

  1. google-recaptchaのスクリプトファイル読み込み削除
  2. google-recaptchaのスクリプトファイル読み込み

なので「add_action」の優先度に100を指定して優先度を大きく下げることで、今回の問題は解消しました。

広告

1件のコメント

コメントを残す

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