Alt temadaki JavaScript dosyaları nasıl geçersiz kılınır?


35

Üst temada bazı JavaScript dosyaları yüklüyorum. Üst temadaki yol:

scripts > custom.js

Alt temada, aynı yolu ( scripts > custom.js) oluşturup custom.jsdosyanın içindeki jQuery'nin bir kısmını değiştiriyorum .

Sorun, değişikliklerin uygulanmamasıdır. Alt temadaki bu dosyalarda değişiklik yapmanın yanlış yolu bu mu?


1
Ana tema nedir? Betikler ana tema tarafından nasıl çağırılıyor ?
Chip Bennett

Yanıtlar:


51

Alt temalar sadece get_template_part veya get_header, vb. Gibi fonksiyonlarla birlikte gelen php dosyalarını (header.php gibi) geçersiz kılar.

WordPress'e komut dosyası eklemenin doğru yolu wp_enqueue_script'tir . Ana temanız bunu kullanıyorsa, JS dosyalarını wp_dequeue_script kullanarak ve kendinizinkini kullanarak geçersiz kılabilirsiniz .

Öyle gibi ...

<?php
// hook in late to make sure the parent theme's registration 
// has fired so you can undo it. Otherwise the parent will simply
// enqueue its script anyway.
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100);
function wpse26822_script_fix()
{
    wp_dequeue_script('parent_theme_script_handle');
    wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery'));
}

Ana tema wp_enqueue_script kullanmıyorsa, orada bulunan komut dosyalarını tekrarlamak için muhtemelen wp_head (veya wp_footer) içine takılıyordur. Böylece , scriptleri tekrarlayan bu fonksiyonlardan kurtulmak için remove_action komutunu kullanırsınız ve sonra kendi betiğinizi zorlarsınız.

Komut dosyası şablon dosyasına kodlanmışsa, bu şablon dosyasını alt temanızdaki komut dosyası etiketi olmadan değiştirmeniz gerekir.

Onlar yararlanmak wp_enqueue_script çağrıları kullandıysanız get_stylesheet_directory_uri , o zaman bir şey yapmak zorunda olmamalıdır. Bu olmadığından, sadece etrafı karıştırmak ve tema yazarının ne yaptığını görmek zorundasın.


2
Eğer ana tema, betikleri kodlamak için get_stylesheet_directory_uri kullanıyorsa, o zaman alt tema, bu nedenle sıkıştırılmış tüm betikleri çoğaltmak zorunda kalacaktır, çünkü aksi halde bulunamayacaklardır. Get_stylesheet_directory_uri'de alt temada ayrı bir dosya olup olmadığını kontrol etmek ve gerektiğinde ana temanın dosyasına geri dönmek için hiçbir geri dönüş mekanizması yoktur .

Kodeks'ten: “wp_print_scripts, ön sayfadaki stilleri veya komut dosyalarını kodlamak için kullanılmamalıdır. Bunun yerine wp_enqueue_scripts kullanın. ” Codex.wordpress.org/Plugin_API/Action_Reference/…
Christian Lescuyer 13:13

Bu yazıldığında aklınızda bulundurun: iki yıl önce. Önce wp_enqueue_scriptsön ucunda sadece enqueue komut dosyaları kullanılabilir. Güncellenmiş. Güncel olmayan bir şey görürseniz, düzenlemekten çekinmeyin.
chrisguitarguy

4
Lütfen , ana temanın eklenmesinden sonra , dekontanınızın yapıldığından emin olmak için geç bir öncelik (örneğin 100) belirlemeniz gerekebileceğini unutmayın . codex.wordpress.org/Function_Reference/wp_dequeue_scriptadd_action( 'wp_enqueue_scripts', 'wpse26822_script_fix', 100 );
Spone

4
2016 Güncellemesi: stackoverflow.com/questions/23507179/… uyarınca wp_deregister_script('parent-script-handle');ana betiği tamamen kaldırmak için de kullanmamız gerekiyor. Gerçekten, onsuz benim için işe yaramadı. WP 4.6.1
PhiLho

1

Bazı durumlarda, hem add_action hem de wp_enqueue_script işlevinin şu şekilde çağırdığı işlevlere öncelik vermek önemlidir:

add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207);
function wpse26822_script_fix()
{
    wp_dequeue_script('storefront-navigation');
    wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true);
}

Bu durumda, wp_enqueue_scripts, 20120206 (tarih) önceliğine sahip ebeveyn tarafından çağrıldı ve bu eylem, derhal kaldırılması için ancak çok daha büyük bir öncelikle eklendi. Ardından, aşağıdakileri izleyen enqueue deyimine eskisinden sonra yüklenmesini sağlamak için bundan sonra öncelik verilir. Doğru, bu durumda da önemlidir, çünkü bu, ana betiğin ilk sırada bulunduğu altbilgide sıkıştırılmasının gerektiğini belirtir.

Ayrıca, tam olarak tam olarak açıklayamıyorum, ancak ilk betiği, yayınlandıktan hemen sonra silme konusunda dikkatli olursanız, ilk etapta yüklenmesini etkili bir şekilde önleyebileceğinizi görüyorum.


1
İşlev wp_enqueue_scriptbir öncelik parametresine sahip değildir, yalnızca yolun sonuna bir sorgu dizesi olarak birleştirilen bir sürüm numarasıdır. Bu parametre, önbelleğe bakılmaksızın müşteriye doğru sürümün gönderilmesini sağlamak için kullanılır [...]
Emile Bergeron

1

Kendi sürümünüzü kaydetmeden önce wp_deregister_script'i çağırın


1
Neden? Bu sadece aynı tutamağı kullanırken gereklidir - yapmanız gerekmeyen bir şey. Muhtemelen bile yapmamalısınız, çünkü kaynağı açık olan kodlarda hata ayıklamak daha kolaydır.
fuxia

1
// enqueue your required script file
add_action('wp_enqueue_scripts', 'your_child_theme_js_file_override');
function your_child_theme_js_file_override(){
    wp_enqueue_script( 'child_theme_script_handle', get_stylesheet_directory_uri() . '/assets/js/your-file.js', array('jquery' ) );
}

// dequeue your required script file
function your_child_theme_js_file_dequeue() {
   wp_dequeue_script( 'parent_theme_script_handle' );
}
add_action( 'wp_print_scripts', 'your_child_theme_js_file_dequeue', 100 );
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.