Go to top Go to bottom

たくさんのスタイルシートやスクリプトを読み込むと、その分ページの表示速度が遅くなったり、スタイルが競合したりといった問題が発生します。wp_deregister_style()wp_dequeue_script()を使用すると、特定のスタイルシートやスクリプトを読み込まないようにすることができます。

特定のスタイルシートを読み込まないようにする

プラグインなどによって読み込まれるスタイルシートを取り除くには、wp_deregister_style()にハンドル名を渡し、次のようにして使います。

function twpp_deregister_styles() {
  wp_deregister_style( 'stylesheet-handle' );
}

add_action( 'wp_enqueue_scripts', 'twpp_deregister_styles' );

「ハンドル名ってどうやって調べるの?」という疑問が出てくるかと思いますが、ハンドル名はソースから突き止めることができます。

<link rel='stylesheet' id='main-style-css'  href='...' ... />

スタイルシートのidの-cssの前までがハンドル名です。この場合は'main-style'がハンドル名ということになります。

特定のJavaScriptを読み込まないようにする

考え方はスタイルシートのときと同じです。

function twpp_deregister_scripts() {
  wp_deregister_script( 'script-handle' );
}

add_action( 'wp_enqueue_scripts', 'twpp_deregister_scripts' );

たとえば次のようにすると、WordPressが自動で読み込むjQueryを取り除くことができます。

function twpp_deregister_scripts() {
  wp_deregister_script( 'jquery' );
}

add_action( 'wp_enqueue_scripts', 'twpp_deregister_scripts' );

たとえばCDNでホストされているjQueryを使いたい場合になどには、上のようにして取り除いた後に、新たにenqueueします。

さて、スタイルの場合は<link>タグのidを見ればハンドル名がわかりましたが、スクリプトの場合はタグに情報がありません。従って、次のようにして調べます。

WordPressがデフォルトで登録するスクリプトCodexでハンドル名を調べる
プラグインが追加するスクリプトプラグインフォルダの中からwp_enqueue_scriptを探す(Grep検索が便利です)

または、全スクリプトのハンドル名の情報はwp_scriptsというグローバル変数が保持しているので、これをdumpすることで調べることもできます。

function twpp_detect_handle() {
  global $wp_scripts;
  var_dump( $wp_scripts );

  // Output dump to log file
  // error_log( var_export( $wp_scripts, true ) );
}

add_action( 'wp_enqueue_scripts', 'twpp_detect_handle' );

大量のログが出力されますので、検索などを利用して該当ファイルを突き止めてください。

...
'jquery-migrate' => 
_WP_Dependency::__set_state(array(
   'handle' => 'jquery-migrate',
   'src' => '/wp-includes/js/jquery/jquery-migrate.min.js',
   'deps' => 
  array (
  ),
   'ver' => '1.4.1',
   'args' => NULL,
   'extra' => 
  array (
  ),
)),
...

削除がうまくいかないとき

deregisterしても読み込まれてしまう場合は、add_actionの処理順を遅くしてみてください。

add_action( 'wp_enqueue_scripts', 'twpp_deregister_script', 100 );

プラグインによってはadd_actionの優先度(第3引数)が設定されている場合があり、「deregister→register」という順になってしまうと除去できません。そこで、deregisterするadd_actionの優先度を設定することで「register→deregister」となるようにするわけですね。

それでもうまくいかない場合は、プラグイン側が正しい方法でスタイルやスクリプトを読み込んでいない可能性があります。