必要な場合だけ JavaScript とスタイルシートをロードさせるには

This page is also available in English.

デフォルトの設定では、Contact Form 7 はその JavaScript と CSS スタイルシートをすべてのページにロードします。きっと、こんな無駄の多いやり方をやめて、コンタクトフォームを含むページにだけロードすればいいのに、と考えていることでしょう。その気持ちはよくわかりますが、技術的な困難があって、ページをロードする時点でそのページがコンタクトフォームを含んでいるかどうかを判断することがプラグインにとって難しいのです。ともあれ、多少状況を良くするような方法を提示することならできなくもありません。

ステップ 1: すべてのページで JavaScript と CSS スタイルシートをロードしないようにする

定数 WPCF7_LOAD_JS の値が false の場合(デフォルト値は true)、Contact Form 7 は JavaScript のロードを行いません。次のように wp-config.php のなかでこの定数に値を設定するとよいでしょう:

define ('WPCF7_LOAD_JS', false);

同様に、CSS スタイルシートのロードは WPCF7_LOAD_CSS で制御できます。定数 WPCF7_LOAD_CSS の値が false の場合(デフォルト値は true)、Contact Form 7 は CSS スタイルシートのロードを行いません。次のように wp-config.php のなかでこの定数に値を設定するとよいでしょう:

define('WPCF7_LOAD_CSS', false);

または、次のように数行のコードをテーマの functions.php ファイルに追加することでも JavaScript と CSS のロードを無効化することができます:

add_filter( 'wpcf7_load_js', '__return_false' );
add_filter( 'wpcf7_load_css', '__return_false' );

これで JavaScript と CSS スタイルシートのロードを抑止することができました。が、残念なことに、これによってコンタクトフォームを含んでいるページでのロードまで一緒に殺してしまいました。次のステップでは JavaScript と CSS スタイルシートのロードを必要とするページにおいて明示的にファイルのロードを指定します。

ステップ 2: コンタクトフォームを含んだページで JavaScript と CSS スタイルシートをロードする

例として、「お問い合わせ」という名前のページがあって、そのページが唯一コンタクトフォームを含んでいるというケースについて考えてみましょう。それから、「お問い合わせ」ページ専用に ‘contact.php’ というテンプレートファイルがテーマのフォルダに用意されているとしましょう。この「お問い合わせ」ページに限っては Contact Form 7 の JavaScript の CSS スタイルシートのロードを行う必要があるというわけです。

これをするためには、’contact.php’ テンプレートファイルを編集して、次の内容を挿入します:

<?php
	if ( function_exists( 'wpcf7_enqueue_scripts' ) ) {
		wpcf7_enqueue_scripts();
	}

	if ( function_exists( 'wpcf7_enqueue_styles' ) ) {
		wpcf7_enqueue_styles();
	}
?>

wpcf7_enqueue_scripts()wpcf7_enqueue_styles() の呼び出しは wp_head() より前に行われる必要があることに注意してください。

WordPress のお問い合わせフォームプラグイン。シンプル、でも柔軟。