Tembel Yükleme Resimleri - WordPress için Tembel Yükleme eklentileri. PHP Uygulaması için Eklentilere İzin Vermenin En İyi Yolu Yavaş php eklentisi

  • 20.06.2020

İşlev dosyası, sitenin işlevselliğini genişletmede eğlenceli bir yardımcıdır! özellikle amacına uygun olarak kullanılıyorsa - ancak birçok blog / site sahibi, function.php'yi bir moda kelimeye dönüştürmekte harikadır.

Herhangi bir işte, uygunluk ve kısıtlamalar (kısıtlamalar, genellikle mantıklı) vardır ve bu nedenle, WP çekirdeğinin parametrelerini (temalar değil) ayarlamak için tasarlanmış bazı yürütülebilir kodlar vardır, şablondan çıkarmak daha doğrudur ...

Konuşma, sitenin işlevselliğini modernize etmekle ilgili olduğunda, "eklentiler olmadan ..." makaleleri satırında, tüm kod bloklarını efsanevi function.php'ye sokmanız kesinlikle tavsiye edilir. Bu doğru değil!

Tüm tamamen teknik uzantıları (doğrudan şablonun stiliyle ilgili olmayan) kayıtları için düzenlenen eklentiye aktarmak daha mantıklıdır.

Hadi onu yaratalım! ve ayrıca artıları ve eksileri hakkında konuşun (bunların çok daha azı var) ...


Makalenin bölümleri:

eklentinizi nasıl oluşturabilirsiniz

Aşağıdaki metinden kendi ellerinizle kendi eklentinizi nasıl oluşturacağınızı öğreneceğiz: tüm detayları, nüansları anlayacağız. Artılarının ve eksilerinin neler olduğunu öğreneceğiz (daha az eksi var !! ve daha doğrusu, bunlar eksi değil, her yönetici için bir veya başka bir çıkar)

function.php dosyası ile eklenti arasındaki fark nedir

Neden doğrudan sitenin işlevselliği ile ilgili bazı kodlar ayrı bir eklentiye taşınsın?

İşlev dosyasının kendisi, amacı ve tutarlılığı bir eklentiden farklı değildir (temadaki bir eklenti)! - ana görevi, belirli (etkin) bir şablonu yararlı işlevsellik ile zenginleştirmektir.

Örneğin, mantıksal olarak düğme menüsünün etkin temanın stiline göre CSS ile biçimlendirildiği "gezinme" - onu şablonun kökünde bırakmak daha doğru olabilir.

Faydası nedir - işlev dosyasını ayrı dosyalara mı yoksa ayrı bir eklentiye mi bölmek?

Örneğin, en yaygın olanı - şablonu değiştirmeye karar verdiniz!? ... sonuç olarak, tüm işlevsel geliştirmeler kaybolacak, çünkü tüm yararlı kodlar işlev dosyasında yer alıyor (bir keresinde böyle bir dosya boyutunu 750KILO görmüştüm)

Tabii ki, işlevlerin belgelerini yeni bir konuya aktarabilirsiniz, ancak hepsinden önemlisi, çok fazla zaman alan düzenlemeler olmadan yapamazsınız: bir maymun ve iş)

Ve daha sonra:

site dosyalarını yükleme sırası

Kısaca: Örneğimizde site çekirdek dosyalarını yükleme sırası şu şekildedir - sitenin aktif eklentileri (eklentiler klasöründen) ve içerikleri biraz daha erken yüklenir ve ancak o zaman içeriğin bulunduğu function.php dosyası yüklenir. işlenmiş. Her şey milisaniye cinsindendir ve sayfa hızı kazanmaktan ciddi olarak bahsetmeye değmez.

Her ne kadar, geliştiriciler tarafından oluşturulan böyle bir yükleme sırasının nedenlerinden biri, işlev dosyasına ikinci sıranın verildiği gibi görünse de (gibi muhtemelen daha hafif eleman), sadece eklentilerin yaygın olarak kullanılması gerçeği, genellikle büyük içerik ...

Birisi haykıracak: başka bir eklenti ...? zor!

Ve diyorum ki, herhangi bir hızı etkilemeyecek ... daha doğrusu - tam tersine, bir sitenin oluşturulmasına düşünceli yaklaşırsanız.

Ayrıca, bazı kodları aktarmanın yararı diğerinde açıktır, yani bir siteyi yükleme hızı, etkin eklentilerin sayısına değil, içeriklerine bağlıdır! Öyleyse neden belirtildiği gibi biraz sonra yüklenen işlev dosyasını küçültmüyorsunuz ..? ve aynı zamanda tam teşekküllü büyük bir şablon düzeyinde PLUGIN! Peki kodunun çoğu nereye ait?

Bence (aktif, çalışan) şablon sadece kendi spesifik parametrelerini içermelidir.

aritmetik gezi...

  1. daha sonra yüklendiğinde, soru neden kod işlemenin ilk yapıldığı yere taşınmamasıdır ve buna göre yönetici tarafından belirtilen WP çekirdek parametrelerindeki ayarlamalar site başlatmanın ilgili aşamasında daha hızlı okunacak ve işlenecektir. ?
  2. sitenin işlevselliğinin kötü şöhretli yararı ve mantıksal organizasyonu.
  3. önemsiz olmayan kolaylık!

Ek olarak, söylendiği gibi, işlev dosyası aynı eklentidir - tekrar soracağım, neden içine aldığınız her şeyi itiyorsunuz? ve siteyle çalışma sürecinde, bu arada, içeriği tarafından inanılmaz ve haksız bir şekilde şişirilmiş olan büyük, okunması zor bir kod belgesinde kafanız karışır.

Hafif bir eklenti oluşturmak, yapılandırmak ve unutmak daha kolay ve daha mantıklı ...

Tek kelimeyle, herkes kendisi için karar verir: kendi deneyimini mi yoksa belirli bir eğitim makalesinin yazarının fikrini mi dinleyeceğine.

WordPress kitaplıklarında öğrenme takip eder, ancak makalelere göre değil ... makalelerden yalnızca bir fikir veya başka bir fikir toplamak mümkündür ...

Bir şekilde efendim)

... ilgilenenler için:

WordPress kodlarında çekirdeğin tüm kurallarını (ve bu arada, çekirdek dizinlerini yükleme sırasını) harika bir şekilde öğrenebilirsiniz.

... aşağıdaki makalelerden birinde, tam da böyle bir konu kabı! ... ve faydalı sayfalara bağlantılar.


! .. site güncellemelerine abone olarak -
... cehaletle ayrılmak..!

ek function.php dosyası eklentisi nasıl oluşturulur

Söz konusu eklenti elbette basit bir çözüm, ancak çalışma sıfırdan başlamalıdır!

Üstelik makalede belirtilen hedeflere ulaşmak için güçlü eklentilere gerek yok!

Ana bilgisayar kontrol paneline (veya FTP) gidin ve dosya yöneticisini açın.

Eklentiler klasörünü açın ve içinde başka bir dizin oluşturun (eklenti dosyalarımızın bulunduğu klasör). Kesinlikle herhangi bir isim, Latince. Örnek olarak "test" ismim var.

Lütfen yönetici panelindeki eklentinin adının, Eklenti Adı: test bilgi başlığında yazılanla aynı olacağını unutmayın (yorumlara bakın).

Oluşturulan klasörü açın ve içinde ana eklenti dosyasını oluşturun:

... bir adla, my-functions.php deyin ve gövdesine bu tür satırları ekleyin (ve dosya adı kesinlikle herhangi bir şey olabilir)

Yorumlardaki satırlar - yönetici panelinde görünecek eklenti hakkında bilgiler (eklentiler menüsü).

Klasörü ve dosyayı oluşturduktan hemen sonra eklentiniz yönetici panelinde görünecektir. Bir göz at.

Eski olarak, bir süreliğine etkinleştirebilirsiniz - ancak hiçbir şey olmuyor, eklenti hala boşta.

Bu kadar!! basit bir eklenti yaratıldı ve dikkat çekici olan, kendi elleriyle ve kendi yararı için (kedi Matroskin'in dediği gibi).

Bunun üzerine, gösterinin perdesi düşer ...
... rampalara hüzünlü toz düşüyor ...

Ve bu arada, "eklentisiz" serisinden faydalı bir film - bakın, videoda önerilen kodun işlev dosyasında bırakılması gerekip gerekmediğini düşünün ??

Elbette, yeni işlevler eklemek için WordPress sitenize bir kod parçası eklemeniz gerektiği gerçeğiyle defalarca karşılaştınız. Şu anda temanızın başlık kısmına eklediğiniz Google analitik komut dosyalarından bahsetmiyorum. Numara. İnternetteki forumlarda bulduğunuz ve hemen dosyanıza eklemek için koştuğunuz o küçük kod parçacıklarından bahsediyorum. işlevler.php.

Dürüst olalım, bunu en az bir kere yaptın, değil mi? Ve bu anlaşılabilir bir durumdur çünkü forumda yazılmıştır - bu kodu WordPress temanızın function.php dosyasına ekleyin.

Gerçek şu ki, internette bulduğunuz her kodu function.php'ye eklemek, her zaman iyi bir fikir değil... Bu kodla kendi özel mini eklentinizi oluşturmak daha güvenli bir çözüm olacaktır.

Bu eğitimde, function.php'ye hangi durumlarda kod ekleyebileceğinizi ve hangi durumlarda ayrı bir eklenti kullanmanın daha iyi olduğunu anlatacağız. Ayrıca size nasıl özel bir eklenti oluşturabileceğinizi ve kodunuzu nasıl ekleyebileceğinizi göstereceğiz.

function.php nedir

WordPress site dosyalarınızda daha önce gezindiyseniz, birkaç function.php dosyasına rastlamış olabilirsiniz. Bu eğitimde bahsedeceğimiz function.php dosyası şu klasörde bulunur: wp-contentthemesyour_themefunctions.php.

Açıkçası, bu, kendi temanız için tüm işlevleri ve ayarları saklayan aynı dosyadır. şu anda aktif... "Etkin" kelimesine dikkat edin, çünkü bu dersin ana mesajı bu olacaktır.

Her zaman function.php kullanmak neden kötü bir fikirdir?

Beni yanlış anlamayın, birkaç satırda küçük kod parçaları için function.php kullanmak tamamen normaldir. Kesinlikle kod eklediğiniz her şey için function.php'yi bir depo olarak kullanmanın istenmediğinden bahsediyoruz. Her durum için tek bedene uyan bir çözüm değildir.

Neden # 1.

Temanız için bir güncelleme yayınlanırsa, function.php dosyasına eklediğiniz her şeyi kaybedersiniz. Ne düşündüğünü biliyorum - ama sadece bu tür durumlar için var mı?

Elbette var. Ancak çocuk temasının ne olduğu hakkında hiçbir fikri olmayan birçok insan da var. Veya temalarına bir kod parçası eklemenizi isteyen insanlar var.

Bu nedenle, bu neden bu listede. Bir alt tema kullanmadan function.php'ye kod eklerseniz, bu sizin ilk uyandırma çağrınız olur.

Neden # 2.

Alt temayı doğru şekilde yapılandırmış ve kullanmış olsanız bile. Farklı bir tasarım temasına geçmek isterseniz ne olur? Umarım function.php dosyanızda yaptığınız her değişikliğe bir yorum eklemişsinizdir, çünkü bu olmadan başka bir konuya geçmek çok acı verici olurdu. Bence fikri anladın.

Neden numarası 3.

Function.php'ye sitenizi beklenmedik bir şekilde bozan bir kod eklediyseniz ve boş bir beyaz ekran görüyorsanız - "bozuk" function.php dosyasını yüklemek, düzenlemek ve siteye geri yüklemek için bir FTP istemcisine ihtiyacınız olacaktır. Kendine böyle bir zevk.

function.php ne zaman kullanılır?

Şu anda aktif olan alt tema için function.php'yi doğru kullanmak geçerli bir seçenektir. Ama unutma, bu kelimeye odaklandım " aktif"?

Yalnızca bu temayla çalışırken anlamlı olacak kod parçaları eklerseniz, function.php'yi (bir alt temada) güvenle kullanabilirsiniz. İşte bunun uygun olabileceği bazı örnekler:

  • Temanız için başka bir stil sayfası (.css) ekleme
  • Sitenin daha iyi görünmesi için alıntı uzunluğunu değiştirin
  • Mevcut tema için özel yazı tipleri ekleme
  • Mevcut temayı çevirmek için bir yerelleştirme dosyası ekleme

Başka bir deyişle, belirli bir güncel temayla ilgili herhangi bir şey eklediğinizde veya değiştirdiğinizde, function.php'yi kullanmaktan çekinmeyin.

Function.php olmadan ne zaman yapmak daha iyidir?

Başka bir tema için sizin için teorik olarak faydalı olabilecek daha genel şeyler ve işlevler eklemek için function.php kullanmak kötü bir fikirdir.

Function.php olmadan yapmanın daha iyi olduğu durumlara ilişkin birkaç örnek:

  • Sık kullanacağınız özel widget'lar oluşturma
  • Özel kısa kodlar oluşturma
  • Temadan bağımsız kod ekleme (Google Analytics kodu vb.)

Bu gibi durumlarda, temanız ne olursa olsun bu kodu saklamak en iyisidir. Ve bunu özel eklentilerle yapabilirsiniz.

Şimdi düşünüyorsunuz - bir eklentinin oluşturulması konusunda kafa karıştırıyorsunuz, ne zaman function.php'yi düzenleyebilirsiniz? Çok zor! İnan bana, durum böyle değil. Bu çok hızlı ve kolay bir şekilde yapılır.

Function.php yerine özel bir eklenti nasıl kurulur

Kodunuzu depolamak üzere kendi özel eklentinizi oluşturmak için şunlara ihtiyacınız vardır:

  1. Kodunuzla bir metin dosyası oluşturun ve onu bir .php dosyası olarak kaydedin
  2. Ortaya çıkan .php dosyasını bir .zip arşivine paketleyin
  3. Bu arşivi menüde normal bir WordPress eklentisi olarak yükleyin Eklentiler → Yeni Ekle

İşte bu, sadece 3 işlem.

Adım 1. Kodunuzla bir .php dosyası oluşturun

Bilgisayarınızda Not Defteri'ni açın ve aşağıdaki metni yapıştırın:

Elbette Eklenti Adı satırında eklenti için adınızı kullanabilirsiniz:

Dosyayı kaydedin ve benzersiz bir ad verin, böylece WordPress eklentinizi zaten kurulu olanlarla karıştırmaz. Örneğin: wpcafe-özel-işlevler.php.

Evet, "Tüm dosyalar" dosya türünü seçmeyi ve kaydederken .php uzantısını eklemeyi unutmayın:

2. Adım. Bir .zip arşivi oluşturun

Bence burada herhangi bir açıklamaya gerek yok. Herhangi bir uygun arşivleyiciyi kullanarak dosyanızla bir .zip arşivi oluşturmanız yeterlidir.

3. Adım. Normal bir eklenti olarak yükleyin

En kolay kısım. adresindeki WordPress yönetici alanınıza gidin. Eklentiler → Yeni Ekle ve arşivinizi normal bir eklenti olarak yükleyin.

Etkinleştirdikten sonra, yeni eklentinizi diğer tüm yüklü eklentiler listesinde görebilmeniz gerekir:

Kodunuzu nasıl eklersiniz?

Kod parçacığınızı eklemek için, oluşturduğunuz .php dosyasına yapıştırmanız yeterlidir. Veya iki farklı işlev için her zaman ayrı bir eklenti yapabilirsiniz.

Örneğin, "Merhaba Dünya!" Kısa Kodunu yapmak isteseydiniz .php dosyanız şöyle görünürdü:

Bu yorumlar, kodunuzun performansını ve eklenti yürütme hızını hiçbir şekilde etkilemez. Ancak onlarla birlikte gezinmeniz ve eklediğiniz her işlevin ne yaptığını hatırlamanız daha kolay olacaktır.

Yorumunuzu eğik çizgi ve yıldız sözdizimine sarın: /* senin yorumun */

Kodunuzda değişiklik yaptıktan sonra, .php dosyasını FTP yoluyla yeniden yükleyebilir veya yeni bir .zip arşivi oluşturup yeni bir eklenti olarak yükleyebilir ve eskisini silebilirsiniz.

Functions.php'yi düzenlemekten kaçınmanın diğer yolları

Temel olarak, yeteneklerinize yeterince güveniyorsanız ve function.php'ye nasıl kod ekleyeceğinizi biliyorsanız, özel eklentilerle de sorun yaşamazsınız. Burada zor bir şey yok.

Ancak, tüm bunlarla manuel olarak uğraşmak istemiyorsanız, bunu çok iyi anlıyoruz. Yine de, bu WordPress. Bu nedenle, ek kodunuzu siteye eklemenizi kolaylaştıran ücretsiz Kod Parçacıkları eklentisi kullanışlı olabilir:

Bu eklenti ile farklı kod parçacıkları ekleyebilir, onlara bir ad, açıklama verebilir, bir veya başka bir kod parçasını seçerek etkinleştirebilir ve devre dışı bırakabilirsiniz.

Bir başka harika özellik de kod snippet'lerinizi siteler arasında içe / dışa aktarabilmenizdir.

sonuçlar

Küçük bir ayrıntı gibi görünebilir, ancak ek kodunuzun doğru yerleştirilmesi, gelecekte diğer temalar arasında kolayca geçiş yapmanızı sağlayacaktır. Her bir ek işlevi ayrı eklentiler arasında bölerseniz, bir veya başka bir işlevi ayrı ayrı etkinleştirebilir veya devre dışı bırakabilirsiniz.

Yani bu yöntem gerçekten dikkati hak ediyor.

cms mysql (4)

WordPress gibi CMS'de sıklıkla bulduğunuza benzer bir temel eklenti sistemi oluşturmaya çalışıyorum. Hakkında bildirimleri kullanarak ana sistem işlemine bağlı bir eklenti klasörünüz var. beri gelişmeler bir tasarım deseni kullanarak Gözlemci veya Etkinlik .

Sorun, sistemin bunu bilmemesidir. hangi olaylar eklenti harekete geçmek istiyor - bu nedenle sistem, bu eklentinin bir noktada gerçekten gerekli olup olmadığını görmek için her sayfa isteği için her eklentiyi yüklemek zorunda. Söylemeye gerek yok, bu çok fazla boşa harcanan kaynak - Her istek için birkaç ekstra MB bellek ekleyen WordPress durumunda!

Bunu yapmanın alternatif yolları var mı?

Örneğin, her şeyi bir kez yüklemenin ve ardından sisteminizin tembel yükleme eklentileri gibi bilmesi için sonuçları önbelleğe almanın bir yolu var mı? Başka bir deyişle, sistem, eklentinin bağlamak istediği tüm olayları listeleyen ve ardından bunları APC'de veya gelecekteki istekler için başka bir yerde saklayan bir yapılandırma dosyası yüklüyor mu?

Bu da işe yaramazsa, belki de isteği yerine getirmek için belirli eklentilerin ne zaman gerekli olmadığı konusunda bilinçli tahminler yapmak için kullanılabilecek özel bir dosya yapısı vardır.

Yanıtlar

Bir eklenti yönetim aracım var, ancak onu yalnızca prosedürel eklentilerle kullanıyorum ve dahil olan her şey genellikle hemen yükleniyor. Ancak olay tabanlı bir API ve tembel yükleme için, eklentileri yönetmek için sığ sarmalayıcılar kullanmayı ve gerçek uzantılar için otomatik yüklemeye başvurmayı hayal edebiliyorum.

/ ** * api: ne olursa olsun * sürüm: 0.1 * başlık: eklenti örneği * açıklama: ... * yapılandırma: * bağlıdır: diğer eklenti * /$ eklentileri ["title_event"] = "TitleEventClass"; $ eklentileri ["ikincil"] = dizi ("Sınıf2", "geri arama"); ?>

Bu örnek için, eklenti API'sinin basit bir liste olduğunu varsayıyorum. Bu örnek betik özelliği-plugin-123.php, onu yüklenen diziye eklemekten başka bir şey yapmaz. Bu şekilde, bir düzine özellik eklentiniz olsa bile, her biri için yalnızca ek bir include_once ile sonuçlanacaktır.

Ancak ana uygulama/veya eklenti API'si bunun yerine yalnızca belirtilen sınıfları başlatabilir (raw-call_user_func_array için yeni $ eventcb; veya geri aramalar için call_user_func_array). Bu da asıl görevi otomatik yükleyiciye yükleyecektir. Yani bir parçanın listeyi yönettiği, diğerinin gerçek kod olduğu ikili bir sisteminiz var.

Bu yüzden hala eklentileri ve aşağıdaki gibi ayarları listeleyen basit bir config.php hayal ediyorum:

"kullanıcı / sarmalayıcı-for-htmlpurifier.php"); $ cfg ["güzel"] = 1;

Bunların yalnızca veri sarmalayıcılar/komut dosyaları olduğunu ve yönetilebilirlik için eklentinin bir açıklaması olduğunu dikkate alarak. Ayrıca gerçek register_even () API'sini kullanabilir ve her birinde ek bir sarmalayıcı işlevi tanımlayabilirsiniz. Ancak havalı isimlerin bir listesi en kolay seçenek gibi görünüyor.

Yukarıdaki yönetim aracı paslı ve çirkin görünüyor: http://milki.include-once.org/genericplugins/
Ancak tek istediğiniz bir liste (sql tablosu) ve ayar yönetimi ise kullanılmaz. Bu ek yük, yalnızca eklenti meta verilerini güzel bir şekilde yazdırmak ve okunabilir config.php'yi tutmak içindir.

Nihayet:

spl_autoload () ile include_path ve basit vaka olayı-> sınıf adı, her biri bir sarmalayıcı komut dosyası, hepsini bir kerede dahil edin.

Eklenti sınıfı adını imzalı olaylarıyla birlikte bir yapılandırma dosyasında saklar ve ardından ayrıştırılmış yapılandırma dosyasını örneğin APC'ye kaydederdim. Ardından, olay tetiklendiğinde, sistem gerektiği gibi uygun eklenti sınıflarını tembel olarak yükleyebilir.

Wordpress ve diğer CMS sistemleri çok kötü örneklerdir.

Modülerin neredeyse her zaman daha ağır olduğu anlamına geldiğini anlamalıyız.

Bu durumu çözmek için şimdiye kadar üzerinde çalıştığım en iyi şema, bir otomatik yükleyici kullanan, katı bir adlandırma kuralına sahip, sınıf tabanlı bir eklentidir.

Bu nedenle, eklentiyi kullanmadan önce statik işlevleri başlatmanız veya kullanmanız gerekir.

Eklentiyi bile arayabilirsiniz:

Örneğin:

"/plugins/($parça)/($parça).php"); kırmak; ) // ...)?>

olaylara gelince:

Dinamik değişikliği önlemek için bu olayı statik olarak kaydetmelisiniz.

Veritabanı bunun için doğru yer olacaktır. Belirli olaylar eklemek veya diğer olaylara bağlama yöntemleri eklemek için eklenti sınıfında olay tablolarına ve install () ve uninstall () yöntemlerine sahip olabilirsiniz. Bu bir veritabanı sorgusudur ve bundan daha fazlasını elde etmek istiyorsanız, onu memcached veya düz ini dosyasına ekleyin.

Benim için iyi çalışıyor. Bu şekilde, tam olarak aynı özellik listesiyle, önbelleğe alma olmadan, istek başına 8 MB tüketen ve 1 MB'a düşen ağır bir sistem elde edebildim. Artık daha fazla özellik ekleyebilir ve sistemi "temiz" tutabiliriz.

Bu yardımcı olur umarım

En iyi yol onlarla kodlamaya başlamaktır. Tasarım desenleri, sadece onlar hakkında okuyarak uygulanması zor olan harika bir konsepttir. İnternette bulduğunuz birkaç örnek uygulamayı alın ve bunların etrafında oluşturun.

Harika bir kaynak, Veri ve Nesne sayfasıdır. Şablonları incelerler ve size hem kavramsal hem de gerçek dünyadan örnekler verirler. Referans materyalleri de harika.

Bu, WordPress temanızdaki ana dosyadır. / wp-content / theme / (burada temanızın adı) /functions.php içinde bulunur.
Temanın önemli özelliklerini tanımlar, kancaları, görünümü ve işlevselliği özelleştirir ve ayrıca ihtiyacınız olan bazı özellikleri ekler. Bu dosya, herhangi bir WordPress sayfasını her açtığınızda yüklenir, böylece sitenin herhangi bir öğesini değiştirmek için kullanılabilir. Bu bağlamda, birçok ipucu a la " eklentiler olmadan WordPress'te bir şey nasıl değiştirilir »Genellikle bu işlevsellik için ayrı bir eklenti oluşturmak veya hazır bir çözüm kullanmak yerine function.php üzerinde değişiklik yapmakla ilgilenin. Bu genellikle bu dosyanın aşırı bilgi yüklemesine yol açar, kodun ayrıştırılmasını zorlaştırır ve düzeltmeleri daha da zorlaştırır. Ama bu en tehlikeli şey değil. En tehlikelisi de bu aktif temayı değiştirirken, sitenin gerekli işlevselliğinin bir kısmı veya tamamı kaybolacak.

Functions.php'nin bir eklentiden farkı nedir?

Hiçbir şey değil. Özünde, function.php, geçerli temaya bağlı bir tür küresel değiştirilemez eklentidir. WordPress'te nasıl bağlandığını wp-settings.php içinde görebilirsiniz. Kaynak kodundan da görebileceğiniz gibi, tüm eklentilerden sonra yüklenir, ancak bu, bağlı eklentilerdeki bir şeyi geçersiz kılma yeteneği dışında, herhangi bir dezavantaj veya avantaj sağlamaz. Bu, kod yürütme hızını da etkilemez. Yalnızca plugins ve function.php içeriği etkilenir. Bu nedenle, temanız için aktif eklentileri seçerken dikkatli olun ve gereksiz, size çok az faydası olan şeylerden vazgeçin, o zaman sitenizi hafifletebilir ve çalışmalarını hızlandırabilirsiniz.

function.php ne zaman kullanılır?

Aşağıdaki kurala göre hareket edin: işlevsellik doğrudan mevcut temayla ilgiliyse, ancak sitenin işleyişiyle ilgili değilse, bunu functions.php'ye yazın.

Örneğin, olabilir

  • Küçük resimleri ayarlama
  • Kenar çubuğu boyutlarını ayarlama
  • Widget'lar için yer ayarlama
  • Navigasyon menüsü altındaki yerlerin duyurusu
  • Tema ayarları
  • Temanızın ek özellikleri

Functions.php'yi kullanmaktan ne zaman kaçınmalısınız?

Aktif temayı değiştirirken bile işlevsellik çalışıyorsa, onu ayrı bir eklentiye koymaya özen göstermelisiniz.
Bunlar şunları içerir:

  • Katılım sayaçlarının tanımı (Google Analytics, Yandex.Metrika, Liveinternet)
  • Yönetici panelinin ek işlevlerini ayarlama (örneğin)
  • Kaynak kodunu yapılandırma ()
  • Kısa kodları tanımlama
  • kayıt

Listeler eksik, içeriklerini kendiniz belirleyebilirsiniz.

Bu kodu function.php'de değilse nereye ekleyebilirim? Onlar için özel eklentiler yazabilirsiniz, ancak daha ilginç ve daha basit bir yol var.

function.php'ye alternatif mu-eklentileri

WordPress MU'dan (Çok Kullanıcılı) WordPress'in modern sürümlerinde bize ilginç bir işlevsellik geldi. MU Eklentileri... Özü aşağıdaki gibiydi. WordPress MU yöneticisinin bazen tüm site ağı için eklentiler tanımlaması gerekiyordu. Bu, olağan işlevsellik ile elde edilemedi, bu nedenle özel bir bölüm tanıtıldı: / wp-content / mu-plugins /, burada tanımlandılar. Bir başka ilginç şey de, bu dizindeki eklenti dosyalarının diğerlerinden önce yüklenmesidir, bu da bazı sabitleri veya ayarları önceden tanımlamayı mümkün kılar.
Daha sonra, WPMU kaldırıldı, kodu ana bloglama ile entegre edildi ve şimdi herhangi bir WordPress, artık MU-eklentilerinin işlevselliğini kullanabilir. Kullanılmalı, yani, kullanım için zorunludur.

mu-eklentileri nasıl kullanılır

Öncelikle özel bir bölüm / wp-content / mu-plugins / oluşturmanız gerekiyor.
İçine gerekli eklenti dosyalarını koyuyoruz. Geleneksel eklentilerin aksine, özel bir sözdizimine bağlı kalmaya gerek yoktur ve işlevsellik doğrudan bildirilebilir.

Burada örneğin yoklama sayaçlarının kodunu içeren bir dosya oluşturulmuştur.
İçeride, bu dosya şöyle görünüyor

// ... Bu satır yerine sayaç kodunu giriniz...

Yönetici alanında, şöyle görünecek Gerekli

8 cevap

Gözlemci desenini kullanabilirsiniz. Bunu başarmanın basit bir işlevsel yolu:

Çıktı:

Bu benim CRAZY uygulamam 4+5=9 4*5=20

Notlar:

Bu örnek kaynak kodunda, yenilemek istediğiniz gerçek kaynak kodundan önce tüm eklentilerinizi bildirmelisiniz. Eklentiye iletilen bir veya daha fazla değerin nasıl işleneceğine dair bir örnek ekledim. Bunun en zor kısmı, her bir kancaya hangi argümanların iletildiğini listeleyen asıl belgeleri yazmaktır.

Bu, PHP'de bir eklenti sistemi oluşturmanın sadece bir yoludur. Daha iyi alternatifler var, daha fazla bilgi için WordPress belgelerine göz atmanızı öneririm.

Maalesef alt çizgiler HTML Markdown varlıklarıyla değiştiriliyor gibi görünüyor? Bu hata giderildiğinde bu kodu yeniden gönderebilirim.

Düzenleme: Boşver, yalnızca düzenlediğinizde görünür

Diyelim ki Gözlemci modeline ihtiyacınız yok çünkü dinleme görevini yerine getirmek için sınıfın yöntemlerini değiştirmenizi gerektiriyor ve ortak bir şey istiyorsunuz. Diyelim ki, sınıfınızı başka bir sınıftan zaten miras alabileceğiniz için genişleyen kalıtımı kullanmak istemiyorsunuz. Herhangi bir sınıfı zahmetsizce takılabilir hale getirmek için genel bir yola sahip olmak harika olmaz mıydı? İşte nasıl:

_Class = get_class (& $ RefObject); $ bu -> _ RefObject = $ RefObject; ) public function __set ($ sProperty, $ karışık) ($ sPlugin = $ this -> _ Class. "_". $ sProperty. "_setEvent"; if (is_callable ($ sPlugin)) ($ mix = call_user_func_array ($ sPlugin, $ karışık);) $ bu -> _ RefObject -> $ sProperty = $ karışık;) genel işlev __get ($ sProperty) ($ asItems = (dizi) $ this -> _ RefObject; $ karışık = $ asItems [$ sProperty] ; $ sPlugin = $ this -> _ Class. "_". $ sProperty. "_getEvent"; if (is_callable ($ sPlugin)) ($ mix = call_user_func_array ($ sPlugin, $mix);) return $ mix;) public function __call ($ sMethod, $ karışık) ($ sPlugin = $ this -> _ Class. "_". $ sMethod. "_beforeEvent"; if (is_callable ($ sPlugin)) ($ karışık = call_user_func_array ($ sPlugin, $ karışık) );) if ( $ karışık! = "BLOCK_EVENT") (call_user_func_array (dizi (& $ this -> _ RefObject, $ sMethod), $ mix); $ sPlugin = $ this -> _ Class. "_". $ sMethod . "_afterEvent"; if ( is_callable ($ sPlugin)) (call_user_func_array ($ sPlugin, $ karışık);)))) // bitiş sınıfı Eklenti sınıfı Eklentiyi genişletir () // son sınıf Pl uggable /////////////////// // BÖLÜM 2 ////////////////// sınıf Köpek (genel $ İsim = ""; public function bark (& $ sHow) (echo "$ sHow
\ n ";) public function sayName() (echo"
\ nBenim Adım: ". $ this-> Name."
\ n ";)) // son sınıf Köpek $ Köpek = yeni Köpek (); ///////////////// // BÖLÜM 3 /////// // /////////// $ PDog = yeni Takılabilir ($ Köpek); işlev Dog_bark_beforeEvent (& $ karışık) ($ mix = "Woof"; // "Miyav" demeyi "Woof" ile geçersiz kıl // $ mix = "BLOCK_EVENT"; // olayı engellemek istiyorsanız, return $ mixed;) function Dog_bark_afterEvent (& $ mixed) (echo $ mixed; // geçersiz kılmayı göster) işlevi Dog_Name_setEvent (& $ mix) ($ mix = " Coco"; // "Fido"yu "Coco" ile geçersiz kıl return $ mix;) function Dog_Name_getEvent (& $ mix) ($ mix = "Farklı"; // "Coco"yu "Farklı" ile geçersiz kılar $ mix;) // ///////////////// // BÖLÜM 4 //////////////// $ PDog-> İsim = "Fido "; $ PDog-> Bark ("miyav"); $ PDog-> SayName (); echo "Yeni Adım:". $PDog-> İsim;

İlk kısım, PHP betiğinizin en üstünde bulunan request_once() çağrısına ekleyebileceğiniz kısımdır. Takılabilir bir şey yapmak için sınıfları yükler.

Sınıfı yüklediğimiz 2. bölümde. Not. Observer modelinden önemli ölçüde farklı olan bir sınıf için özel bir şey yapmama gerek yoktu.

Sınıfımızı "takılabilir" olarak değiştireceğimiz 3. bölümde (yani, sınıfın yöntemlerini ve özelliklerini geçersiz kılmamıza izin veren eklentileri destekliyoruz). Yani örneğin bir web uygulamanız varsa eklenti kayıt defterine sahip olabilir ve eklentileri buradan etkinleştirebilirsiniz. Dog_bark_beforeEvent() işlevine de dikkat edin. Return ifadesinden önce $mix = "BLOCK_EVENT" ayarlarsam köpeğin havlamasını engeller ve ayrıca herhangi bir event olmayacağı için Dog_bark_afterEvent'i engeller.

4. bölümde, bu normal işlem kodudur, ancak düşündüğünüz şeyin bu şekilde çalışmayacağını unutmayın. Örneğin, bir köpek onu "Fido" adıyla değil "Coco" adıyla telaffuz eder. Köpek miyav demiyor, ama whoof diyor. Ve daha sonra köpeğin ismine bakmak istediğinizde, bunun "Coco" değil "Muhtelif" olduğunu göreceksiniz. Tüm bu geçersiz kılmalar Bölüm 3'te tanıtıldı.

Peki nasıl çalışır? Pekala, eval()'i (herkes "kötülük" der) ekarte edelim ve bunun bir Gözlemci kalıbı olmadığını ekarte edelim. Bu nedenle, Dog sınıfı tarafından kullanılan yöntemleri ve özellikleri içermeyen Pluggable adlı gizli bir boş sınıfla çalışır. Böylece, bu gerçekleştiğinde, bizim için büyülü yöntemler kullanılacaktır. Bu nedenle, 3. ve 4. bölümlerde, Dog sınıfının kendisine değil, Pluggable sınıfından türetilen bir nesneye bağlanıyoruz. Bunun yerine, Plugin sınıfının bizim için Dog nesnesine "dokunmasına" izin verdik. (Bu bilmediğim bir tasarımsa, lütfen bana bildirin.)

Kanca ve dinleyici yöntemi en yaygın kullanılan yöntemdir, ancak yapabileceğiniz başka şeyler de vardır. Uygulamanızın boyutuna ve kodu kimin görmek istediğine bağlı olarak (bu bir FOSS betiği veya evde ne olursa olsun) eklentileri nasıl çözmek istediğinizi büyük ölçüde etkileyecektir.

kdeloach'ın güzel bir örneği var, ancak uygulanması ve kanca işlevi biraz güvensiz. E-postanız için php uygulamasının doğası ve eklentileri nasıl gördüğünüz hakkında daha fazla bilgi rica ediyorum.

1 kdeloach benden.

İşte kullandığım yaklaşım, bir tür Gözlemci kalıbı olan Qt sinyali/yuva mekanizmasından kopyalamaya çalışıyor. Nesneler sinyal yayabilir. Her sinyalin sistemde bir tanımlayıcısı vardır - gönderen nesnenin id + 'sından oluşur Her sinyal, basitçe "çağrılabilir" olan alıcılara bağlanabilir, bunları almakla ilgilenen herkese sinyal göndermek için bir veri yolu sınıfı kullanırsınız. bir şey oluyor, bir sinyal gönderiyorsunuz. Aşağıda bir örnek ve uygulama örneği bulunmaktadır

giriş yapmak (); ?>

Jeff'in tavsiyesine uymak ve mevcut koda bir göz atmak en kolay yol. API'lerinin nasıl göründüğünü ve nasıl hissettirdiğini görmek için Wordpress, Drupal, Joomla ve diğer iyi bilinen PHP-CMS'lere bakmayı deneyin. Bu şekilde, işleri biraz daha kalın hale getirmek için daha önce düşünmemiş olabileceğiniz fikirleri bile alabilirsiniz.

Daha doğrudan bir cevap, kullanılabilirliği sağlamak için bir içerme dosyasına dahil edecekleri genel dosyaları yazmak olacaktır. Bu, kategorize edilecek ve tek bir "hooks.php" MASSIVE dosyasında SAĞLANMAYACAKTIR. Dikkatli olun, çünkü içerdikleri dosyaların sonunda daha fazla bağımlılığa ve işlevselliğe sahip olmasıyla sonuçlanır. API bağımlılığını sınırlamaya çalışın. I.E dahil edilecek daha az dosya.

adında temiz bir proje var