Temada takılabilir işlev nasıl geçersiz kılınır?


10

Karşılaştığım tüm belgeler, eklentiniz aracılığıyla takılabilir işlevi geçersiz kılmayı tartışıyor.

Bunun yerine tema geliştirme yapıyorsanız?

Benim function.php get_user_by()içinde tanımlanmış işlevi geçersiz kılan başka bir dosya gerektirir pluggable.php.

if( function_exists() )Aramayı atlarsam " Yeniden bildirilemiyor ..." hatası alıyorum.

if( function exists() )Çağrıyı dahil edersem, hata almıyorum, ancak elbette takılabilir sürüm olduğu için işlevim yok sayılıyor.

Dominic'in WordPress başlangıç ​​siparişindeki harika yayınına dayanarak, temanızın vb. Öncesindepluggable.php yüklü olduğu açıktır , böylece hatayı açıklar.functions.php

Öyleyse soru şu: bu güzel takılabilir mimariden bir tema içinden, daha sonra tema ile birlikte paketlenmesi veya yüklenmesi gereken eklentileri yazmaya başvurmadan nasıl yararlanabilirsiniz?

Diğer notlar : Öyleyse, argüman, temaların eklentilerin ne yaptığını yapmaya çalışmaması gerektiği gibi görünüyor. Ancak bu argüman dört yaşın üzerindedir (4 basamaklı trac numarasına göre). Bugünün tema geliştirme ortamının karmaşık topolojisi göz önüne alındığında, bu felsefenin hala geçerli olup olmadığını bazı ağır vuruculardan duymak isterim. O zamandan beri evrim geçirdiğimize inanmak istiyorum.

Bağlam : Bir çok özel meta veri, Yönetici arka ucunun özelleştirilmesi, oturum açma / kimlik doğrulama işlemi, işler içeren bir müşteri için tek seferlik bir CMS çözümü geliştiriyorum. Ve tabii ki, tasarım bileşeni var -. Var tema parçası geliyor Gerçek olan şu sade değil yeniden kullanılabilir bileşenler - onlar başka bir istemci için geçerli asla onlar GPL altına asla ve açık kaynaklı ve onlar çoğu kesinlikle diğer WordPress dağıtımlarına dağıtılmamalı / yüklenmemelidir. En iyi ihtimalle gelecekteki projelerde yararlanacağım bazı iyi uygulamalar var, ama bu kesinlikle bir referans / kopyala yapıştır işi olacak.

Bu benim için eklentiler için bir kullanım örneği gibi görünmüyor. Tema, belki de yirmi Onbir'in alt teması, belki de bağımsız bir işlev olarak yüklenir. Php, her biri söz konusu CMS'nin farklı bir yönünü ele alan bir tekne yükü içerir. Ardından tema şablonu dosyaları, içerilen öğelerde tanımlanan özel 'şablon etiketleri' kullanır. Bazı eklenti veya diğer etkinleştiriliyor, vb bağımlılıkları ile tema dosyaları istemiyorum. Sadece sisteme karmaşıklık oluşturmak için mantıklı değil. Tabii, onu kullanması gereken eklentiler klasörüne koyabilirim, ancak bu hala bir hack gibi geliyor - şu anda, bu proje için yapılan özelleştirmelerle ilgili her şey içeriyor wp-content/themes/my-theme/. Ayrıca bazı eklenti klasörlerinde bir şeyler aramayı düşünmek istemiyorum.

Beni yanlış anlamayın. Eklentileri seviyorum ve onları kullanıyorum ve yazıyorum. Eklenti üçüncü taraf olduğunda ve makul bir zaman diliminde sunabileceğimden çok daha iyi uygulamaları temsil ettiğinde , eklentileri bu tür oldukça özelleştirilmiş tema geliştirme ile birlikte kullanıyorum . Ancak bir kerelik bir senaryo için temel işlevselliği değiştirmem gerektiğinde, eylem kancalarına, filtre kancalarına dönüyorum ve şeylerin kullanıcı ve kimlik doğrulama tarafı için takılabilir işlevlere güvenmek istiyorum.



Katiyen, bilet tekrar kapatıldı, nedeninin iyi bir açıklaması vardı.
Tom Auger

Yanıtlar:


10

Eğer bunu tek bir müşteri için inşa ediyorsanız kesinlikle faydalanmalısınız mu-plugins.

WordPress'te yapamayacağınız birçok şey var functions.php. Takılabilir işlevler bunlardan biridir, ancak daha açıktır, daha önce bir dizi kanca (hem eylemler hem de filtreler) ateş eder functions.php. Bazı durumlarda, bu kancalar normal eklentilerden önce bile ateşlenir, bu da kullanmanızı mu-pluginsveya ağla etkinleştirilen bir eklentiyi gerektirir. Diğer durumlarda, bir mu-eklenti bile çok geç. Belki de bir şeye ihtiyacın var sunrise.php. Ya da (sabit veya başka türlü) bir şey wp-config.php.

Bunları geçersiz kılmayı kolaylaştırmak yerine takılabilir işlevlere bazı kancalar eklemeyi tercih ederim. Başka bir takılabilir fonksiyona sahip olmamız pek olası değil - kancaları önceden tarihlendiriyorlar ve neredeyse hiç iyi bir eski moda (yeni moda?) Kancaya karşı avantajlarının olduğu bir durum görmedim.

Altı yıl sonra hala Andy Skelton ile aynı fikirdeyim - "Bir temanın işlevler dosyası ve bir eklenti arasında birçok fark var. Hadi bu şekilde tutalım."

Her şey bir yana, böyle bir değişiklik asla gerçekleşemezdi. Bir çok şeyi kıracaktı. Sayısız temalar gövdesinde işlevleri çağırmak functions.phpdurumunda ölümcül hata ile sonuçlanır ki pluggable.phpböyle - zaten yüklü olmasaydı current_user_can(), ya wp_create_nonce(). Hepsi başarısız olur. Ve normalde bu işlevleri çağırmaya başlayabilen eklentileri de bozar plugins_loaded. (Sadece pluggable.phpaşağıya wp-settings.phpinin ve çekirdeğin yarısının kırılacağına ya da en azından özelleştiricinin bahse gireceğine eminim.)

Son olarak, bir temanın pluggable.phpeklentileri yüklediğimiz kadar erken yükleyebileceğimiz ve bu nedenle eklenebilir işlevleri geçersiz kılabileceği gibi ayrı bir dosya içerebileceği fikri kaçınılmazdır . Bunun kötü bir fikir olmasının yanı sıra (bu yorumun ilk dört paragrafına bakın), yine de uyumlu olmayacaktır, çünkü setup_themekancaya kadar, stil sayfasını ve şablon değerlerini filtreleyerek hangi temanın yükleneceğini geçersiz kılabilir.

Ne yazık ki, WordPress'in nasıl tasarlandığı göz önüne alındığında, bu sadece makul değil. İyi olan şu ki, bunu yapmanın sayısız (daha iyi) yolu var.

(İlk olarak buraya gönderildi: http://core.trac.wordpress.org/ticket/2479#comment:5 )


Cevabınızı buraya göndermek için zaman ayırdığınız için teşekkür ederiz. Şimdi açıkladığınıza göre, işleri kendi tarzınızda görüyorum. Mantıklı. Teşekkürler!
Tom Auger

5

Bir defaya mahsus bir proje bağlamında, zorunlu kullanım kodunu bırakmak kesinlikle uygundur mu-plugins. "Hepsini bir kerede bir yerde bulundurmak" bir endişe ise, mu-pluginstema dizininde açılır listeye bir symlink yapın , böylece tema dizininde arama yapılır.


Mark, sembolik bağlantının önerisi için teşekkürler. Göçle yardımcı olmasa da, gelişirken çok uygun olabilir.
Tom Auger

0

Bunu gerçekleştirmenin bir yolunu düşünemiyorum, yükleme sırasında çok erken.

Aklı başında çözüm en yakın özel ekleme wp-config.php(kodla veya kullanıcıdan isteyerek) olurdu, ancak bu paket eklentisi ile karşılaştırmak muhtemelen daha mantıklı olacaktır.


Evet, anlat bana.
Tom Auger
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.