Bir Eklentiyi Sadece Seçili Sayfalara CSS ve JS'sini Yüklemekle Sınırlama?


9

Bir eklentinin CSS stil sayfalarını ve JavaScript JS dosyalarını yüklemesini yalnızca ihtiyaç duydukları sayfalarla kısıtlamasına neden olmak istiyorum.

Soruma bir örnek, sitemdeki bir sayfada (" bana ulaşın " sayfası) bir form oluşturmak için kullandığım Eklenti İletişim Formu 7'dir . Ancak, web sitesindeki HER sayfaya / gönderiye aşağıdaki satırları ekler:

<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> 

Bu, sitedeki tek bir sayfada beni ilgilendiren bir uzantı nedeniyle bu eklentinin sitemin yükleme süresini olumsuz etkilediğinden şüpheleniyor.

Dolayısıyla, sorum şu ek çizgileri "Bana Ulaşın" sayfası hariç ancak eklentiyi devre dışı bırakmadan tüm sayfalardan nasıl kaldırabilirim?

Yanıtlar:


9

Stiller ve komut dosyaları her zaman fonksiyonları tarafından ayarlanır wp_enqueue_script()ve wp_enqueue_style()işlevine amacıyla belirli bir eylem kancasına bağlı olması. İletişim Formu 7'nin içine bir göz attım ve eylem etiketlerini kullanıyor wpcf7_enqueue_scriptsve wpcf7_enqueue_stylesbunları wp_print_scriptsve wp_print_styleskancalarına eklemek gibi görünüyor .

Yani, komut dosyası ve stilleri iletişim sayfanız hariç her sayfadan ayırın. İşlem wp_head, komut dosyasından önce tetiklenir ve eylemlere stil uygular, bu nedenle temanızın function.php dosyasına böyle bir şey eklemeniz gerekir:

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

İs_page () fonksiyonu dönecektir trueEğer kontak sayfada iken (adını varsayarak "temas bana" dır) ... ayrıca filtre için sayfa sümüklüböcek ve sayfa kimliğini kullanabilirsiniz. Diğer tüm sayfalarda if()koşullu wp_head, wp_print_scriptsve wp_print_styleseylemlerinden hemen önce tetiklenen komut dosyasına / stil kaldırma işlevini ekler .

Bu işlem, fazla kodu sayfalarınızdan kaldırmalıdır; eklentiyi devre dışı bırakmanız veya herhangi bir temel dosyayı düzenlemeniz gerekmez. Yukarıda listelediğim işlevler ve kod da gelecekte İletişim Formu 7'yi kaldırırsanız temanızın bozulmasına neden olmaz ... bu nedenle gelecekteki yükseltme uyumluluğu hakkında endişelenmenize gerek yoktur.


Merhaba EAMann. Harika bir çözüm - teşekkürler! Bu yöntemin hangi kancaların kullanıldığını kontrol eden ve daha sonra birisinin bunları sayfa konumuna göre devre dışı bırakmasına izin veren bir eklentiye zarflanabileceğini düşünüyor musunuz?
Tal Galili

Ne yazık ki, WordPress içinde dinamik olarak kullanılan birçok kanca var. Yani hangi kancaların kullanıldığını güvenilir bir şekilde tespit edemezsiniz ... ama muhtemelen çoğunu bu şekilde yakalayabilirsiniz.
EAMann

Güzel. yeni bir soru için bana bir fikir verdin: wordpress.stackexchange.com/questions/698/…
Tal Galili

Bildiğiniz gibi, bana bu eklentiyi geliştirmeye başlama fikri
verdiniz

3
@EAMann ve @Tal Galili - Aslında tüm kancaları, hatta kancaları kullanarak dinamik olanları bile yakalayabilirsiniz all, bkz. Wordpress.stackexchange.com/questions/307
MikeSchinkel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.