選択したページにCSSとJSのみをロードするようにプラグインを制限しますか?


9

プラグインがCSSスタイルシートとJavaScript JSファイルの読み込みを必要なページのみに制限するようにしたいのですが。

私の質問の例は、私のサイトの1ページ(「連絡先」ページ)にフォームを作成するために使用したプラグインContact Form 7です。ただし、次の行がWebサイトのすべてのページ/投稿に追加されます。

<link rel='stylesheet' id='contact-form-7-css'  href='http://www.r-statistics.com/wp-content/plugins/contact-form-7/styles.css?ver=2.3.1' type='text/css' media='all' /> 

<script type='text/javascript' src='http://www.r-statistics.com/wp-content/plugins/contact-form-7/scripts.js?ver=2.3.1'></script> 

これにより、このプラグインがサイトの読み込み時間を低下させているのではないかと思います。サイトの1つのページだけに関心がある拡張機能です。

したがって、私の質問は、プラグインを非アクティブ化せずに、「連絡先」ページを除くすべてのページからこれらの余分な行を削除するにはどうすればよいですか?

回答:


9

スタイルとスクリプトは常に関数wp_enqueue_script()とによって設定されます。関数とwp_enqueue_style()は、機能するために特定のアクションフックに関連付ける必要があります。私は、お問い合わせフォーム7の内部でかいま見を取り、それはのアクションタグを使用しているように見えますwpcf7_enqueue_scriptsし、wpcf7_enqueue_stylesそれらを追加するwp_print_scriptswp_print_stylesフック。

したがって、必要なのは、連絡先ページ以外のすべてのページからスクリプトとスタイルをアンフックすることです。wp_headスクリプトやスタイルアクション前アクション火災は、あなたがあなたのテーマののfunctions.phpファイルに次のようなものを追加する必要があります。

function remove_wpcf7_extras() {
    remove_action('wp_print_scripts', 'wpcf7_enqueue_scripts');
    remove_action('wp_print_styles', 'wpcf7_enqueue_styles');
}

if( ! is_page('contact me') ) {
    add_action('wp_head', 'remove_wpcf7_extras');
}

is_page()関数は戻りますtrue、あなたが(名前は「接触私」であると仮定すると)連絡ページにしているとき...あなたは、フィルタのページスラグとページIDを使用することができます。他のすべてのページでは、if()条件付きはwp_headアクションにスクリプトとスタイルの削除関数を追加します。これはwp_print_scriptsand wp_print_stylesアクションの直前に起動します。

これにより、ページから余分なコードが削除され、プラグインを非アクティブ化したり、コアファイルを編集したりする必要がなくなります。上記の関数とコードでも、Contact Form 7を将来削除しても、テーマが壊れることはありません。将来のアップグレードの互換性について心配する必要はありません。


EAMannこんにちは。素晴らしい解決策-ありがとう!このメソッドは、使用されているフックをチェックし、ページの場所に応じて誰かがそれらを非アクティブ化できるようにするプラグインにエンベロープできると思いますか?
Tal Galili、2010

残念ながら、WordPress内で動的に使用される多くのフックがあります。そのため、どのフックが使用されているかを確実に検出することはできません...しかし、おそらくこの方法でそれらのほとんどをキャッチできます。
EAMann 2010

涼しい。あなただけの新しい質問のために私のアイデアを与えた: wordpress.stackexchange.com/questions/698/...
タルGalili

ご存知のように、このプラグインの開発を開始するというアイデアも教えてくれました:-)
EAMann

3
@EAMannと@Tal Galili -実はあなたはすべてのフック、使用していても動的なものをキャプチャすることができますall参照して、フックをwordpress.stackexchange.com/questions/307
MikeSchinkel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.