Call to undefined function wp_add_inline_scriptを解消

WEB制作



WPでプラグインを入れると設定画面で下記のエラーが出ました。

Call to undefined function wp_add_inline_script()


結論から言いますとプラグインが悪いのではなく使用しているWordPressのバージョンが古いことが原因でした。



wp_add_inline_script関数はWordPress4.5で導入されたため、4.4以下のWordPressだと『関数が見つかりません』と言われるようです。


WordPressのバージョンを4.5以上にあげれば解決するのですが、プラグイン一個のためにバージョンアップするのもなんだかなぁという気持ちとバージョンアップはなんかバグりそうという謎の抵抗感があったので(よろしくない)、今回はバージョンアップせずに Call to undefined function wp_add_inline_script() エラーを解決してみました。




wp_add_inline_script関数とそれに付随する関数を3つ追加することでエラーが解消されました。変更ファイルは『wp-includes/functions.wp-scripts.php』と『wp-includes/class.wp-scripts.php』です。

※変更ファイルはバックアップを取っておくことをお勧めします。



① wp-includes/functions.wp-scripts.php に関数を追加

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, '</script>' ) ) {
        _doing_it_wrong(
            _FUNCTION_,
            sprintf(
                /* translators: 1: <script>, 2: wp_add_inline_script() */
                __( 'Do not pass %1$s tags to %2$s.' ),
                '<code><script></code>',
                '<code>wp_add_inline_script()</code>'
            ),
            '4.5.0'
        );
        $data = trim( preg_replace( '#<script[^>]*>(.*)</script>#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.' ),  
        '<code>wp_enqueue_scripts</code>',  
        '<code>admin_enqueue_scripts</code>',  
        '<code>login_enqueue_scripts</code>' 
 ), '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に下記のコードを追加

『class WP_Scripts extends WP_Dependencies』の中にペーストします。
最後の『}』の前にペーストすれば大丈夫だと思われます。

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 );
}



以上の手順でCall to undefined function wp_add_inline_scriptエラーが解消されました。
各関数は参考サイト様にお世話になったものだが、いくつか少し修正も必要だったりで思ったより時間がかかった。

WordPressのバージョンアップと向き合う時かもしれない。。



参考サイト様:
https://developer.wordpress.org/reference/functions/wp_add_inline_script/
http://hookr.io/functions/wp_scripts_maybe_doing_it_wrong/
https://developer.wordpress.org/reference/functions/wp_scripts/
https://developer.wordpress.org/reference/classes/wp_scripts/add_inline_script/

コメント

タイトルとURLをコピーしました