2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPressのContact Form 7で必要無いページにはJSとスタイルシートをロードさせない

Posted at

はじめに 

文中において、Contact Form 7 をCF7と略して記述しています。

チョイネタです。:kissing_heart:
WordPressでサイト構築した人であれば、一度は目にしたことがあると思われる、メジャープラグインのContact Form 7。このプラグインを使うことで問い合わせフォームが簡単に作成できます。
しかし、このプラグインをインストールすると、すべてのページでCF7が使うCSSとJSがロードされてしまいます。あまり気にされない人はそれでもいいよというかもしれませんが、どうも納得がいかず調べてみました。

公式サイトでは

公式サイトのFAQでは、必要な場合だけ JavaScript とスタイルシートをロードさせるにはという記述があります。下のフィルターです。

function.php
add_filter('wpcf7_load_css', '__return_false');
add_filter('wpcf7_load_js', '__return_false');

reCAPTCHAをセットアップすると

公式サイトの方法をfunction.phpに記述したところ、見事にロードされなくなります。しかし、CF7のreCAPTCHAをセットアップにした時のJSまでアンロードできません。

ロードさせないようにするには

プラグインのコードをざっとみてもfilterが見当たりませんでした。そこで、deregisterしてしまおうってことでコードを用意しました。フォームを設置するページが複数あってもいいように配列で定義できるようにしました。

function.php
function cf7_deregister()
{
    // フォームを設置するURLの最後の文字列を定義しておく
    $_formURL = [ 'form', 'frontpage' ];
    if (is_front_page()) {
        //フロントページの時はfrontpageとする
        $_accessURL = 'frontpage';
    } else {
        $_accessURL = basename(get_permalink());
    }
    if (!( in_array($_accessURL, $_formURL))) {
        wp_deregister_style('contact-form-7');
        wp_deregister_script('jquery');
        // recaptchaをONにした場合
        wp_deregister_script('google-recaptcha');
    }
};
add_action('wp_enqueue_scripts', 'cf7_deregister', 20);

環境によっては条件判断を変更しないといけないかもしれません。上手くいかない時は、get_the_ID()でIDを取得しましょう。ただし、環境依存になるのでおすすめしません。

関連URL

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?