現時点のWordPressのバージョンは5.7~なんですが、知り合いの環境で、バージョン4.X上で動いているMW WP FORMでGoogleのrecaptchaによるスパム対策をしてほしいと依頼がありましたので対応しましたが、若干困ったので記事として残しておきます。

reCAPTCHA for MW WP FORM の導入

プラグインのダウンロード

reCAPTCHA for MW WP Form – WordPress plugin | WordPress.org

MW WP FORM専用のreCAPTCHAプラグインがあり、WordPressの必須バージョンが4.0以上になっており、互換性があり、と表示されていたのでインストールしました。

プラグインの有効化

インストール後、インストールしたプラグインを有効化しました。

いつもなら気にせずそのまま設定を進めるところですが、WordPressのバージョンが低い・古いこともあり、念のためお問い合わせフォームページを確認してみたところ・・・

お問い合わせフォームのページが真っ白

お問い合わせページが真っ白で、何も表示されなくなっていました。

wp-config.php でDEBUGをtrue

真っ白になっているということは、何らかのphpエラーが発生しているはずですので、wp-config.phpファイルを編集し、DEBUGモードをONにしました。

wp-config.php

/**
* 開発者へ: WordPress デバッグモード
*
* この値を true にすると、開発中に注意 (notice) を表示します。
* テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
*/
define(‘WP_DEBUG’, true);

Call to undefined function wp_add_inline_script()~

こちらのサイト様の情報が見つかり、助かりました。

Call to undefined wp_add_inline_script | もぐブログ (mgmgblog.com)

もぐブログ様の情報をもとに下記対応をいたしました。

原因、対処方法

必須バージョンがWordPress4.0以上であればOKみたいな表記がありましたが、プラグインで使用される関数のなかに、WordPress4.5以上でしか存在しない関数が利用されているようです。

wp-includes/functions.wp-scripts.php 編集

/*wp_add_inline-scriptを追加----------------------------*/
function wp_add_inline_script( $handle, $data, $position = 'after' ) {
    wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle );
 
    if ( false !== stripos( $data, '' ) ) {
        _doing_it_wrong(
            _FUNCTION_,
            sprintf(
                /* translators: 1: #is', '$1', $data ) );
    }
 
    return wp_scripts()->add_inline_script( $handle, $data, $position );
}

/*wp_scripts_maybe_doing_it_wrongtを追加----------------------*/
function wp_scripts_maybe_doing_it_wrong( $function ) { 
    if ( did_action( 'init' ) || did_action( 'admin_enqueue_scripts' ) || did_action( 'wp_enqueue_scripts' ) || did_action( 'login_enqueue_scripts' ) ) { 
        return; 
    } 
 
    _doing_it_wrong( $function, sprintf( 
        /* translators: 1: wp_enqueue_scripts, 2: admin_enqueue_scripts, 3: login_enqueue_scripts */ 
        __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),  
        'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3.0' ); } /* wp_scripts()を追加----------------------*/ function wp_scripts() { global $wp_scripts; if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { $wp_scripts = new WP_Scripts(); } return $wp_scripts; }

上記内容をファイルの一番下部に追記(コピペ)します。

wp-includes/class.wp-scripts.phpに下記のコードを追加

public function add_inline_script( $handle, $data, $position = 'after' ) {
	 if ( ! $data ) {
	      return false;
	 }
	 
	 if ( 'after' !== $position ) {
      $position = 'before';
   }
	 
	 $script   = (array) $this->get_data( $handle, $position );
	 $script[] = $data;
	 
	 return $this->add_data( $handle, $position, $script );
}

上記内容をファイル最後の"}の手前"にコピペします。

2つのファイル編集が完了すると、真っ白な画面表示も解消し問題なくプラグインが動作しました。ほんとよかった・・・。

 

※この記事はもぐブログ様の手順をそのまま掲載しております。

Call to undefined wp_add_inline_script | もぐブログ (mgmgblog.com)