Javascript'i function.php dosyasına nasıl ekleyebilirim?


11

WooCommerce'deki araba düğmelerinde standart olan çirkin görünümlü okları kaldırmak istiyorum. Bunu başarmak için, belge yüklendiğinde okları kaldırması gereken aşağıdaki kodu ekleyerek bir ipucu buldum.

Ben bunu benim işlevlerimde koyacağımı varsayıyorum. Php? Bunu tam olarak nasıl yaparım?

$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});

DÜZENLE

Tamam. Bu yaklaşımı denedim:

'RemoveArrows.js' adlı bir dosya hazırladım ve eklenti klasöre yerleştirdim. Bu, orijinal kodla aynı içeriğe sahiptir, ancak jQuery yerine $. Sonradan function.php dosyasına aşağıdakileri ekledim:

function wpb_adding_scripts() {
      wp_register_script('my_amazing_script', plugins_url('removeArrows.js', FILE), array('jquery'),'1.1', true);
     wp_enqueue_script('my_amazing_script');
 } 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' ); 

Kodun düzgün görüntülenmesini nasıl anlayamıyorum. Bu işe yaramadı. Bu işi yapmak için herhangi bir öneriniz var mı?

jQuery Snippet Kaynağı


Bu çılgınca: onları oluşturan koddaki okları düzenleyemez misin? (Veya harici bir kaynaktan mı indiriliyor?) Her durumda, sepet bloğundaki tüm HTML'yi iki kez okumak ve yazmaktan kaçınmak için her ikisinin yerine tek bir işlevle yapabilirsiniz. Doğrudan function.php sayfanın içine enjekte etmek için bir yol bilmiyorum ama (zaten bir tane yoksa ekleyebilirsiniz) ayrı bir komut dosyası içine kaydedebilirsiniz ve sonra wp-enqueue-script. Ayrıca $s değerini jQuery(bkz. Sayfa 7'ye bakınız) olarak değiştirmelisiniz
Rup

Hayır, yerleştirilmeden önce kaldırılamayacağından eminim. Mümkünse, bunu yapmanın bir yolunu bulamadım. Tek bir işleve eklemeyle ilgili iyi bir nokta. Böyle mi görünecek? $ (document) .ready (function () {$ (". woocommerce-cart"). html (function (i, val) {return val.replace ("→", ""); dönüş val.replace ("← "," ");});}); Enqueue senaryosuna bakacağım. Yine de biraz karmaşık görünüyor .. Teşekkürler!
user2806026

Tamam. Bu yaklaşımı denedim; 'RemoveArrows.js' adlı bir dosya hazırladım ve eklenti klasöre yerleştirdim. Bu, orijinal kodla aynı içeriğe sahiptir, ancak jQuery yerine $. sonra da function.php; `işlev wpb_adding_scripts () {wp_register_script ('my_amazing_script', plugins_url ('removeArrows.js', FILE ), dizi ('jquery'), '1.1', doğru); wp_enqueue_script ( 'my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts'); (Maalesef, kodun düzgün görüntülenmesini nasıl sağlayacağımı anlayamıyorum) Bu işe yaramadı. Düzeltmeme yardım eder misin?
user2806026

1
Lütfen bir düzenleme dosyası gönderin ve ilgili tüm bilgileri doğrudan sorunuza ekleyin Kod eklemek için yorum bölümünü kullanmayın
Pieter Goosen

Yanıtlar:


11

Sizin $scriçin de wp_register_script()işlevi yanlıştır. Function.php eklentinizin içinde ve removeArrows.js eklentinizin kökünde olduğu göz önüne alındığında, $scrşöyle görünmelisiniz

plugins_url( '/removeArrows.js' , __FILE__ )

Başka bir nokta, komut dosyalarınızı ve stillerinizi en son yüklemek her zaman iyi bir uygulamadır. Bu, diğer komut dosyaları ve stiller tarafından geçersiz kılınmamasını sağlayacaktır. Bunu yapmak için / öğesinin öncelik parametrenize ( $priority) çok düşük bir öncelik (çok yüksek sayı) eklemeniz yeterlidir add_action.

 add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

Ve her zaman komutları ve stilleri wp_enqueue_scriptseylem kancası aracılığıyla yükleyin / sıkın , çünkü bu kullanılacak uygun kancadır. Yapmayın doğrudan komut ve stilleri yüklemek wp_headveyawp_footer

DÜZENLE

Eğer şimdi temaya Herşeyin yeri belirtmişsiniz olarak temaları için, senin $scrbu kadar değiştirecek

 get_template_directory_uri() . '/removeArrows.js'

ana temalar için ve bu

get_stylesheet_directory_uri() . '/removeArrows.js'

çocuk temaları için. Kodunuzun tamamı aşağıdaki gibi olmalıdır

function wpb_adding_scripts() {
    wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true);
    wp_enqueue_script('my_amazing_script');
} 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

Büyük tavsiyeniz için çok teşekkürler. Bu, kullanım yaklaşımı gibi görünüyor. Bir soru olsa; function.php tema klasörümde. Aynı tema teması klasöründeyse js dosyasını nasıl bağlarım?
user2806026

Her şeyi bir eklenti veya tema içinde tutmalısınız, bölmeyin. Eğer bir tema ise, senin $scrolurdu get_template_directory_uri() . '/removeArrows.js'ebeveyn temalar için ve get_templatestylesheet_directory_uri() . '/removeArrows.js'childthemes için
Pieter Goosen'ın

Tekrar denedim, bu kez removeArrows.js dosyasını doğrudan tema klasörüne ekleyerek ve function.php içinde aşağıdakileri kullanarak denedik; işlev wpb_adding_scripts () {wp_register_script ('my_amazing_script', get_template_directory_uri (). '/removeArrows.js', FILE ), dizi ('jquery'), '1.1', doğru); wp_enqueue_script ( 'my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts', 999); bu bana Ayrıştırma hatası verir: sözdizimi hatası, beklenmeyen ',' wp_register_script satırında.
user2806026

get_template_directory_uri() . '/removeArrows.js', FILE)sadece olmalıget_template_directory_uri() . '/removeArrows.js'
Pieter Goosen

Hayır! Orijinal yayınınızın altında düzenlediğiniz kodunuzun tamamını kullandınız. Yaptığı tek şey, içeriği görüntülerken alışveriş sepeti sayfasını dondurmaktır. Bence sadece vazgeçeceğim :-) Son bir çare olsa; get_template_directory_uri () öğesinin üst temalar için olduğunu ve daha sonra son tam kodda alt temalar için olduğunu belirterek başladınız. Hangisi? Temam bir ebeveyn :-)
user2806026

4

Ben başka bir harici js dosyası eklemek olmaz, sadece getirilmesi için ekstra ve gereksiz bir kaynak ve bu sayfa yükleme süreleri açısından kısmak istiyorum bir şeydir.

Bu jQuery snippet'i web sitelerinize wp_headkanca kullanarak eklerdim. Aşağıdakileri temanız veya eklentiler işlevler dosyasına yapıştırırsınız. Ayrıca, aşağıda gördüğünüz gibi jQuery çakışma modunda olduğundan emin oldum.

add_action('wp_head','woocommerce_js');

function woocommerce_js()
{ // break out of php ?>

jQuery(document).ready(function($) {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
<?php } // break back into php

Bunu yaptıktan ve sayfanızı yeniledikten sonra, bu jQuery snippet'inin aslında sayfanıza yüklendiğinden emin olmak için sayfa kaynağını kontrol edin. Öyleyse, kullandığınız gerçek jQuery snippet'inde bir şey olmadığı sürece çalışmalıdır.


Ancak Javascript'i yüklemek için WordPress yolu bu değil. Daha wp_enqueue_script()fazla bilgi için bakınız .
Pat J

2
Merhaba @PatJ, katılıyorum, tüm Javascript fonksiyonları ile harici bir JS kitaplığı veya JS dosyası yüklemek için, o zaman evet kesinlikle doğru yolu olurdu. Bununla birlikte, bir Javascript snippet'i yüklüyorsanız, tamamen yeni bir JS dosyası oluşturmak ve bunun için ek bir HTTP isteği eklemek mantıklı değildir. Örneğin, Google Analytics'i, temaların veya özel derlemelerin% 99'unda, tema seçenekleri veya işlevler dosyası aracılığıyla üstbilgi veya altbilgiye ekleyeceksiniz. JS veya CSS snippet'lerini bu şekilde dahil etmek yaygın bir uygulamadır.
Matt Royal

1
"Ortak uygulama" bunu doğru yapmaz. wp_enqueue_script()Docs bile devlet Bu bir WordPress oluşturulan sayfaya JavaScript bağlama tavsiye edilen yöntemdir .
Pat J

WordPress varsayılan yirmi dört temasını alırsanız, header.php dosyasına html5.js dosyasını yükler. Tarayıcının kontrol edilmesinin IE <9 olma koşulunu karşılaması için bir sebepten dolayı bu şekilde verildi, ancak benim açımdan anlaşılabilir bir şekilde, enqueuing önerilen ve tercih edilen yöntemdir, ancak sizi çevreleyen tüm diğer değişkenlere / koşullara bağlı olarak her zaman en pratik olmayabilir ve bazı takdir yetkilerinin kullanılması gerektiğini düşünüyorum. Bak, bu görüşte de tamamen yanlış olabilirim, gerçekten deneyimli adamlardan bazılarının söylediklerini duymak isterim :-)
Matt Royal

Harika öneriniz için teşekkürler. Ama işe yarayamıyorum; kodunuzu işlevlerimin <? php etiketi içine eklersem, 1146 satırındaki /somepath.../functions.php dosyasında 'Ayrıştırma hatası: sözdizimi hatası, beklenmeyen' <'iletisi alıyorum. Ben <? Php dışında eklerseniz, sadece sayfanın üst kısmında verilen kodu yankı gibi görünüyor. Burada ne eksik?
user2806026

0

Cevap zaten kabul edildiği gibi, ben sadece birçok kez yaptığım altbilgi javascript kodu enqueue için başka bir yol olduğunu söylemek istiyorum.

function.php dosyasında:

function load_script_to_remove_arrow(){
?>
<script>
$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
</script>
<?php
}
add_action( 'wp_footer', 'load_script_to_remove_arrow' );

bu komut dosyasını yalnızca koşul kullanarak belirli sayfa şablonuna yükleyebilirsiniz

if( is_page_template( 'page-template.php' ) ):

//put above code (or just add_action part) inside this condition to load file only if the condition is true 

endif;

page-template.php dizinde bulunuyorsa (temanızın kök dizininde şablonlar dizini diyelim) şöyle yazabilirsiniz:

is_page_template( 'templates/page-template.php' );

Ben "böyle altbilgi içine JavaScript pişirme" tavsiye etmem. Eklenti ve tema geliştirmede son derece önemli olan kancadan çıkarılabilir veya değiştirilebilir (en azından kolayca) önler. Bir sitenin son kullanıcısıysanız ve hızlı bir komut dosyasına veya bir şeye ihtiyacınız varsa, bunun için gidin - ancak yine wp_enqueue_script()de neredeyse her zaman evrensel olarak daha iyi ve daha esnektir.
Xhynk

-1

Soruyu cevaplamak için önce javascript ve JQuery arasında bir ayrım yapmalıyız.

Basit bir şekilde ifade etmek için:

  • Javascript ECMAScript tabanlıdır
  • JQuery Javascript için bir kütüphanedir

Yani gerçekte iki farklı soru soruyorsunuz:

  • Başlığınız javascript uygulamak için bir çözümden bahsediyor
  • Sorunuz JQuery uygulamak için bir çözümden bahsediyor

Google sonuçları başlığınızı gösterdiğinden ve sayfanın tüm içeriği JQuery hakkında konuştuğundan, bu bir javascript çözümü arayan kullanıcılar için çok sinir bozucu olabilir.

Ve şimdi JQuery çözümü için:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);

Ve javascript çözümü:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );

Bu kod işlevlerinize eklenebilir. Php Komut dosyalarının konumu her iki durumda da wp-content/themes/theme-name/js/script.js

Mutlu kodlama!


OP yayınlandığı sırada devs, jquery ve javascript'i birbirinin yerine kullandı. Hiç doğru değil, ama jquery ne kadar popüler ve ne kadar javascript özellikleri eksikti.
Rocky Kev
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.