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/
コメント