WordPressでプラグインを使用する際、プラグインによっては見栄えを整えたり動きを付けるために独自のCSSやJSを自動的に読み込むものがありますが、多くの場合それらはプラグインの機能を使用していないページにまで読み込まれます。
それを特定のページでしか読み込ませないようにしたり、いっそのこと全ページから削除する方法です。
今回はプラグインを有効化するとCSSとJavaScriptがそれぞれ全ページで読み込まれるもので、WordPressを使ったことがあるなら多くの方が使用したことがあると思う「Contact Form 7」を例に説明します。
September 14, 2014 追記
エントリー公開時に紹介した方法はそれぞれwp_print_styles()
とwp_print_scripts()
を使用していましたが、これらはWordPress Ver 3.3から非推奨となっていました。
3.3以降からは代わりにwp_enqueue_scripts()
を使用することが推奨されているので、それを用いた方法を追記しました。
特定のページ以外から削除する
特定のページ以外ではCSSとJavaScriptを削除したい(特定のページだけで読み込ませたい)という場合は、functions.php
へ下記のように記述することで実装できます。
下記はスラッグが「contact」という固定ページ以外ではCSSとJSを読み込んでいる部分を削除するというものになり、他のスラッグを指定する場合はそれぞれ'contact'
としている部分を任意で変更してください。
また、今回は固定ページを使用している想定でis_single()
を使用しているので、固定ページ以外での場合はこの部分もそれぞれ任意で変更してください。
// スラッグが「contact」以外のページからスタイルを削除する
add_action( 'wp_print_styles', 'deregister_styles' );
function deregister_styles() {
if ( ! is_page( 'contact' ) ) {
wp_deregister_style( 'contact-form-7' );
}
}
// スラッグが「contact」以外のページからスクリプトを削除する
add_action( 'wp_print_scripts', 'deregister_scripts' );
function deregister_scripts() {
if ( ! is_page( 'contact' ) ) {
wp_deregister_script( 'contact-form-7' );
}
}
上記は指定にスラッグを使用しましたが、もちろんIDでも指定することができます。
例えばIDが「10」のページ以外は削除したいという場合は、functions.php
へ下記のように記述することで実装できます。
// IDが「10」以外のページからスタイルを削除する
add_action( 'wp_print_styles', 'deregister_styles' );
function deregister_styles() {
if ( ! is_page( 10 ) ) {
wp_deregister_style( 'contact-form-7' );
}
}
// IDが「10」以外のページからスクリプトを削除する
add_action( 'wp_print_scripts', 'deregister_scripts' );
function deregister_scripts() {
if ( ! is_page( 10 ) ) {
wp_deregister_script( 'contact-form-7' );
}
}
全ページから削除する
全ページから削除したいという場合は先ほどのソースから条件分岐を外せばいいだけなので、functions.php
へ下記のように記述することで実装できます。
// 全ページからスタイルを削除する
add_action( 'wp_print_styles', 'deregister_styles' );
function deregister_styles() {
wp_deregister_style( 'contact-form-7' );
}
// 全ページからスクリプトを削除する
add_action( 'wp_print_scripts', 'deregister_scripts' );
function deregister_scripts() {
wp_deregister_script( 'contact-form-7' );
}
今回は「Contact Form 7」を例に説明しましたが、他のプラグインでも同じように削除したいという場合はwp_deregister_style()
やwp_deregister_script()
の部分を変更・追加すれば削除することができます。
プラグインによっては管理画面でCSSやJSは読み込まないという設定をできるものもありますが、それだと当たり前ですが全てのページで読み込まなくなってしまうので、先述したように特定のページ以外で読み込ませなくしたい場合に便利な方法だと思います。
追記:wp_enqueue_scripts()を使用する方法
上でwp_print_styles()
とwp_print_scripts()
を使用しているのですが、これらはWordPress Ver 3.3から非推奨となっており何人かの方からもご指摘いただいたので、Codexにも代わりに使用するようにと載っているwp_enqueue_scripts()
を使用する方法で追記しました。
下記はスラッグが「contact」という固定ページ以外ではCSSとJSを読み込んでいる部分を削除するというものになり、同じくfunctions.php
に記述をします。
add_action( 'wp_enqueue_scripts', 'deregister_cf7_files' );
function deregister_cf7_files() {
if ( ! is_page( 'contact' ) ) {
wp_dequeue_style( 'contact-form-7' );
wp_dequeue_script( 'contact-form-7' );
}
}
変更された部分は見ての通りですが、wp_deregister_style()
, wp_deregister_script()
となっていた部分がwp_dequeue_style()
, wp_dequeue_script()
となり、フックもwp_enqueue_scripts
になっています。
上記はスラッグに対しての方法になりますが、全ページから削除する場合や特定のIDからの場合もこれらを用いた感じで変更すれば実装できます。
それぞれの詳細については以下Codexで確認できます。