Apply_filters işlevi ve değişkenleri için açıklama


16

Ben "basit form kaydı" eklentisinden bir örnek alarak PHP kullanarak html formları oluşturmak öğrenmek.

Bu koda bakıyorum:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

Burada neler olduğunu açıklayabilir misiniz - fonksiyon ne yapıyor, neden 'simplr-reg-talimatları' ve 'simplr-reg' ihtiyacı var?

Neden bu satır basitçe olamaz:

$form .= 'Please fill out this form to sign up for this site' ;

Fonksiyon referansını okudum ama hala anlayamıyorum.

Yanıtlar:


22

Bu satır, iki ayrı açıklama gerektiren iki farklı işlev kullanıyor.

__ ()

Bu bir çeviri işlevidir. Ayarlar doğru yapılırsa, ilk parametreyi önceden çevrilmiş dizeler listesinden çevirir. Bir kuruluşta, bu işlevin kullanması için derlenmiş çeviriye sahip bir dosya varsa, onu kullanır. Tabii ki, eklenti kendi çevirisini, dolayısıyla ikinci parametreyi paketlemek zorundadır. dizenin çevirisinin ilişkili çeviri dosyasında olması gerektiğini simplr-regsöyler (bu eklenti içinde daha önce işlev aracılığıyla yapılır ).__()'Please fill out this form to sign up for this site''simplr-reg'load_plugin_textdomain()

İşlev daha sonra çeviriyi döndürür. Döndürülecek çeviri yoksa (örneğin, geçerli dilin derlenmiş bir çevirisi yoksa, dizenin bu paket için derlenmiş bir çevirisi vb. Yoktur), orijinal girdi döndürülür.

Yani İngilizce bir WordPress sitesi __( 'This', 'simplr-reg' )için işlevsel olarak aynıdır 'This'. L10n (Yerelleştirme) hakkında daha fazla bilgi edinmek için kodeksinde okuyun:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

Bu işlev, eklenti tarafından kullanılan değerleri gerektiği gibi filtrelemenizi sağlar. Bu bir eklenti geliştiricisi olarak kavramak için ana kavramlardan biridir. WordPress, eklentinizin eylemlerinin yürütülmesini zamanlamanıza ve / veya WordPress'in kullandığı bilgileri / verileri değiştirmenize izin veren erişim noktaları olan kancalarla genişletilir.

Sorduğunuz kod snippet'i gibi verileri değiştirmek için işlevi kullanırsınız add_filter(). Bunun nasıl çalıştığına dair temel bir örnek:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Muhtemelen oradaki ilk argümanı tanıyacaksınız. add_filterYukarıda kullanılanla aynı . Bu kanca adıdır. İkinci argüman filtre geri aramasıdır. Bir işleve geçerli bir geri arama olmalıdır ( geri aramalar hakkında daha fazla bilgiyi buradan edinebilirsiniz ). Bu kod satırı, " 'simplr-reg-instructions'Kanca yürütüldüğünde, işlevi verdiğim geri aramayla çalıştırın." apply_filters()ilk argümanında bulunan kancayı çalıştırır, yani "bu kanca için kayıtlı tüm fonksiyonları çalıştır" anlamına gelir. apply_filtersdaha sonra diğer tüm bağımsız değişkenleri (bu örnekte 'Please fill out this form to sign up for this site') bu filtre üzerindeki işlevlere iletir. Yani, yukarıda kullandığım geri arama şöyle görünmelidir:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

WordPress'te iki tür kanca vardır: filtreler (burada kullandığımız tür) ve eylemler. İkisi arasındaki temel fark, filtrelerin bir şey döndürmenizi beklemesi ve eylemlerin geri dönmemesidir. Yani, bu filtre için, yukarıdaki örneğim etrafına html ekler 'Please fill out this form to sign up for this site've döndürür.

Eylemler ve kancalar hakkında daha fazla bilgiyi buradan edinebilirsiniz:

http://codex.wordpress.org/Plugin_API


John, çok teşekkürler. Mükemmel cevap! Ama eklenti dosyaları bile bir "add_filter ( 'simplr-reg-talimatları' ..." satırı bulmak için görünmüyor olabilir Nasıl daha apply_filter koşmak.?
Kül

1
Bir kancaya filtre eklenmemişse, orijinal girişi hemen geri döndürür. Filtre, eklentinin kullanması için orada değildir, eklentinin kendisini değiştirmek zorunda kalmamanız için ihtiyacınız varsa / istiyorsanız, kullanabilmeniz için oradadır.
John P Bloch

+1 Mükemmel Açıklama - Dokümanlar Gerekirse Okur ;-)
Eddie B

+1 Harika cevap, tam olarak aradığım şey, son derece kafam karışıyordu ama şimdi her şey çok açık;)
doz87

5

Burada iki farklı fonksiyonunuz var apply_filtersve__()

Apply_filters işlevi, kendi geri arama işlevlerinizi ve işlevi kullanarak değişkenlerin değerini değiştirmenize / düzenlemenize izin veren WordPress yoludur add_filter. birçok argümanı kabul eder, ancak önemli olan ilk iki şeydir:

$something = apply_filters( $tag, $value, $var ... );

$ etiketi, add_filterörneğin kullanılan filtre kancasının adıdır :

add_filter($tag,callback_function);

$ değeri, değiştirebileceğiniz veya düzenleyebileceğiniz gerçek değerdir.

$ var, geri arama işlevinizin bir veya daha fazla kullanabileceği değişkenlerdir.

__() işlevi çeviriler için kullanılır:

__($message,$text_domain);

$ message çevrilecek gerçek mesajdır.

$ text_domain, eklentiyi veya tema çevirisini yüklemek için kullanılan metin alanı etiketidir load_plugin_textdomain()

bu ne yapar?

Yerelleştirme modülünde $ iletisinin çevirisini arar ve çeviriyi PHP dönüş deyimine iletir. $ Message için herhangi bir çeviri bulunmazsa, sadece $ message döndürür.

Şimdi durumunuzdaki iki işlev aynı şekilde çalışıyorsa, Apply_Filters, simplr-reg-instructionsfiltre ile ilişkili herhangi bir geri çağırma işlevi gönderir. etki alanısimplr-reg


Bainternet, çok teşekkürler! Eklenti dosyalarında "add_filter ('simplr-reg-talimatları'," satırlarını nasıl bulamıyorum?
Ash

Eklentilerin işlevselliğini genişletmek veya filtrelemek isteyen geliştiriciler için bir kanca kaldı.
Bainternet

Yani add_filter burada beklenmiyor mu? Nedenini anlamıyorum. Application_filters, add_filter işlevleri tarafından kancasıyla ilişkili tüm işlevleri çalıştırmamalı mıdır?
Ash

apply_filterskendi işlevlerinizi kullanarak add_filter
bağlamanıza
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.