Membatasi Plugin untuk Hanya Memuat CSS dan JS-nya pada Halaman yang Dipilih?

9

Saya ingin membuat plugin membatasi pemuatan CSS stylesheet dan file JavaScript JS hanya pada halaman-halaman yang dibutuhkan.

Contoh untuk pertanyaan saya adalah plugin Form Kontak 7 yang saya gunakan untuk membuat formulir dalam satu halaman di situs saya (halaman " contact me "). Namun itu menambahkan baris berikut ke SETIAP halaman / posting di situs 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> 

Ini membuat saya curiga bahwa plugin ini mengganggu waktu pemuatan situs saya, untuk ekstensi yang menarik minat saya hanya pada satu halaman di situs.

Jadi, pertanyaan saya adalah bagaimana saya bisa menghapus baris tambahan ini dari semua halaman kecuali untuk halaman "Hubungi Saya" tetapi tanpa menonaktifkan plugin?

Tal Galili
sumber

Jawaban:

9

Gaya dan skrip selalu diatur oleh fungsi wp_enqueue_script()dan wp_enqueue_style(), yang harus dikaitkan dengan kait tindakan tertentu agar berfungsi. Saya mengintip ke dalam Formulir Kontak 7, dan sepertinya itu menggunakan tag tindakan wpcf7_enqueue_scriptsdan wpcf7_enqueue_stylesuntuk menambahkannya ke wp_print_scriptsdan wp_print_styleskait.

Jadi, yang perlu Anda lakukan adalah melepas kaitan skrip dan gaya dari setiap halaman selain halaman kontak Anda. The wp_headkebakaran tindakan sebelum script dan gaya tindakan, sehingga Anda harus menambahkan sesuatu seperti ini ke file functions.php tema Anda:

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');
}

Fungsi is_page () akan kembali trueketika Anda berada di halaman kontak (dengan asumsi nama adalah "hubungi saya") ... Anda juga dapat menggunakan halaman slug dan ID halaman untuk filter. Di semua halaman lain, if()kondisional akan menambahkan fungsi penghapusan skrip / gaya ke wp_headaction, yang dijalankan tepat sebelum wp_print_scriptsdan wp_print_stylesaction.

Ini akan menghapus kode tambahan dari halaman Anda, dan Anda tidak perlu menonaktifkan plug-in atau mengedit file inti apa pun. Fungsi dan kode yang saya sebutkan di atas juga tidak akan menyebabkan tema Anda rusak jika Anda menghapus Contact Form 7 di masa depan, jadi ... tidak perlu khawatir tentang kompatibilitas pemutakhiran di masa mendatang.

EAMann
sumber
Halo EAMann. Solusi hebat - terima kasih! Apakah Anda pikir metode ini dapat dimasukkan ke dalam plugin yang memeriksa kait mana yang digunakan, dan kemudian memungkinkan seseorang untuk menonaktifkannya sesuai dengan lokasi halaman?
Tal Galili
Sayangnya, ada banyak kait yang digunakan secara dinamis di WordPress. Jadi Anda tidak dapat mendeteksi kait mana yang digunakan dengan andal ... tetapi Anda mungkin bisa menangkap sebagian besar dari mereka dengan cara ini.
EAMann
Keren. Anda baru saja memberi saya ide untuk pertanyaan baru: wordpress.stackexchange.com/questions/698/…
Tal Galili
Asal tahu saja, Anda juga memberi saya ide untuk mulai mengembangkan plug-in ini :-)
EAMann
3
@EAMann dan @Tal Galili - Sebenarnya Anda dapat menangkap semua kait, bahkan yang dinamis menggunakan allkait, lihat wordpress.stackexchange.com/questions/307
MikeSchinkel