web-dev-qa-db-ja.com

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

私はプラグインにCSSスタイルシートとJavaScript JSファイルのロードをそれらが必要とされるそれらのページだけに制限させたいです。

私の質問の例は、私のサイトの1ページにフォームを作成するのに使用したプラグイン Contact Form 7 です( " contact me "ページ)。ただし、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つのページだけで私に興味を起こさせる拡張のために。

したがって、私の質問は、「Contact Me」ページを除くすべてのページからこれらの余分な行を削除する方法ですが、プラグインを無効にすることはできません。

9
Tal Galili

スタイルとスクリプトは、常に関数wp_enqueue_script()およびwp_enqueue_style()によって設定されます。これらは、機能するために特定のアクションフックに関連付けられている必要があります。 Contact Form 7を覗いてみると、wpcf7_enqueue_scriptswpcf7_enqueue_stylesのアクションタグを使用してwp_print_scriptswp_print_stylesフックに追加しているようです。

だから、あなたがする必要があるのは、すべてのページからスクリプトとスタイルのフックを外すことですbut連絡先ページ。 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を返します(名前が "contact me"であると仮定)...ページスラッグとページIDも使用できますフィルター用。他のすべてのページでは、if()条件は、wp_headアクションとwp_print_scriptsアクションの直前に起動するwp_print_stylesアクションにスクリプト/スタイル削除関数を追加します。

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

9
EAMann