Herhangi bir tema için çalışan herhangi bir global function.php dosyası var mı?


11

Herhangi bir tema için çalışan global bir tür function.php dosyası var mı?

Sorun burada:

Herhangi bir temada bir function.php dosyasını değiştirdiğimde, iki değişikliğe dikkat etmem gerekiyor: İlk olarak, bu temanın güncellemelerine dikkat etmem gerekiyor. İkincisi, sitenin temasını değiştirmem gerekiyor.

Peki, bir temanın function.php dosyasında değişiklik yapmak yerine, herhangi bir temadan bağımsız olan bazı function.php dosyasında değişiklik yapmak mümkün müdür?


4
Ödül gerçekten gerekli mi? Soru zaten iyi cevaplara sahip
onetrickpony

@Mohit Bumb, a) lütuf ve b) eklenti kullanmayı öneren ilk kişi olduğu için, rep puanlarını alan kişi olması gerektiğini söyleyebilirim (geri). IMO, bir ödül gerekli değildi (ve o aslında vermek zorunda olduğunu bilmiyordum tahmin uzakta ).
Kaiser

Yanıtlar:


15

Tema ve tema dışı kod arasındaki fark, teknik değil organizasyoneldir. Etkin olan herhangi bir kod, sonuçta ortaya çıkan ortama katkıda bulunur, nereden yüklendiği önemli değildir.

Kodun yüklendiği, WordPress çekirdeğinin bir parçası olmayan yer sayısı vardır:

  • wp-config.php yapılandırma dosyası
  • etkin tema (ve alt temaları için üst öğesi)
  • aktif eklentiler
  • eklentiler kullanmalı
  • drop-in'ler (bunlar biraz gelişmiş ve çok özel amaçlara hizmet ediyor)

Kendi kodunuz için, temanın bir parçası olmaması gereken tipik bir yer, bir eklenti oluşturmaktır. Diğer yaklaşımların genel durumdan faydaları yoktur, ancak normal arayüzün geçici arayüzü (yönetici alanı üzerinden yönetme) ve teknik (etkinleştirme / devre dışı bırakma / kaldırma olayları) kolaylıkları yoktur.


Hem siz hem de @kaiser için + 1'leyin. Doğru cevabın 1) Özel işlevselliği barındırmak için bir Çocuk Teması oluşturun functions.phpveya 2) bu temayı barındırmak için özel bir Eklenti oluşturun, böylece çeşitli Temalar arasında taşınabilir.
Chip Bennett

@Chip, temaları değiştirirken kodun korunmasını istediğinden beri, çocuk temasını uydurma olarak görmüyorum. Çocuk teması olan temaya geçmek isterseniz ne olur? Eklenti, verilen gereksinimler için en uygun olanıdır.
Rarst

bu yüzden ikinize de oy verdim. :) Ancak, Temaları değiştirirken yine de bir Çocuk Teması kullanabilirsiniz; Template:etiketi Çocuk Teması'ndan uygun şekilde değiştirin style.css.
Chip Bennett

@Kapasın benim fikrimi anlamadın. Çocuk temasını kullanmak istersem ne olur? Kodumla Twenty Eleven için alt tema oluşturuyorum. Sonra da Twenty Eleven (veya başka bir ebeveynin) alt teması olan temaya geçmek istiyorum. İki alt temayı manuel olarak birleştirmekten başka bir yolum yok. Sonra bir dahaki sefere temayı değiştireceğim. Bu bir karmaşa.
Rarst

Bunun için mutlaka kullanmalıyım. Temalar arasında kullanılabilen işlevler, kancalar ve kısa
kodlar

6

Bu gerçek bir sorun ve temayı değiştirdiklerinde birçok insanın karşı karşıya olduğu basit bir çözüm var.

Bu işlevi yeni bir sayfaya değil, işlevler.php'ye ekleyin ve buna benzersiz bir ad verin, örneğin adınız + zaman damgası veya istediğiniz herhangi bir şey, ancak aynı adda benzersiz bir klasör oluşturun ve sıkıştırılmış bir eklenti olarak yükleyin, böylece siz devre dışı bırakana kadar mutlaka çalışır .

Hangi eklentinin bu eklentiye isim vermeyi kaçırmayın için olduğunu anlamak için:

/*
Plugin Name: XYZ
*/

3

@MBTheDeveloper cevabına ek olarak.

Diğer seçenekler:

  1. Geçerli temanız için bir alt tema oluşturun ve bu dosyadan function.php dosyasını kullanın (bu "en iyi uygulamadır").
  2. includeTema işlevi php dosyasını kullanın ve özel kodunuzu içeren bir custom-function.php dosyasını yükleyin.

2

Sitenizin temanın function.php dosyasında özel değişiklik yapmayın.

Bunun yerine, siteye özgü bir eklenti oluşturun. Sitenin "ottopress.com" gibi alan adını kullanmayı seviyorum. Ardından snippet'lerinizi bu eklentiye koyun ve yalnızca bu sitede etkin bırakın.

Alternatif olarak, ilgili değişikliklerden oluşan bir snippet'iniz olduğunda, yalnızca onlar için belirli bir eklenti oluşturun. Bu, gerektiğinde ilgili kod parçalarını açma / kapatma seçeneği sunar.


2

Bazı Açıklamalar

İlk önce bir temanın function.php dosyasının amacını anlamanız gerekir. Functions.php temelde sadece varsa Wordpress tarafından otomatik olarak yüklenen herhangi bir adı olmayan bir eklenti dosyasıdır. Wordpress geçerli temanızın word.php ön uç sayfaları ve arka uç (admin) sayfaları için işlevini yükler.

Bir eklenti ve function.php arasında hiçbir fark yoktur, ancak eklentilerin adı vardır ve diğer eklentilere ve temalara bakılmaksızın etkinleştirilebilir / devre dışı bırakılabilirler. Funtions.php geçerli temanıza eklenir ve başka bir temaya geçerseniz, Wordpress yeni temanın işlevlerini kullanır. Özel değişiklikler ile eski işlevlerinizi değil. Php.

Tema güncellemeleri de function.php'nin üzerine yazılır ve özel değişikliklerinizi ayrı kod dosyalarına koyar ve fucntions.php dosyasına dahil etseniz bile, her güncellemeden sonra bu ekleme satırını eklemeniz gerekir.

Genellikle function.php dosyasına girmesi gereken kod türü:

  • temanızın şablon dosyalarında kullanılan işlevler.
  • tema ayarları
  • sidebars
  • gezinme menüleri
  • yazı biçimleri
  • küçük resimler yayınla
  • yalnızca geçerli temayla ilgili herhangi bir kod.

Temaları değiştirseniz bile özel değişikliklerinizi korumak istediğiniz için. Alt tema bu durumda çalışmayacağından, temayı ve işlevlerini değiştireceğiniz için alt temanın.php dosyası kullanılmaz.

Çözüm

@Otto tarafından önerilen tek çözüm bir eklenti dosyası oluşturmaktır. Sitenize özgü eklentiyi oluşturmak için kullanabileceğiniz yaklaşım, site adınızla 'wp-content / plugins' içinde bir klasör oluşturmak ve eklenti dosyaları oluşturmaktır.

Neden eklenti dosyaları? ve tek eklenti dosyası değil.

Kod ile ilgili sitenin işlevselliğini ayrı eklenti dosyalarında gruplandırın ve Wordpress tarafından ayrı eklentiler olarak tanınmaları için tüm eklenti dosyalarınıza eklenti başlığını eklemeyi unutmayın . Ardından, sitenizin farklı özelliklerini / işlevlerini her şeyi bozmadan etkinleştirebilir / devre dışı bırakabilirsiniz.

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.