Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. WordPress
Code

Ana Tema İşlevlerini Alt Tema İşlevleriyle Geçersiz Kılmaya Yönelik Bir Rehber

by
Difficulty:IntermediateLength:ShortLanguages:

Turkish (Türkçe) translation by Barış Ertuğrul (you can also view the original English article)

Eğer WordPress'te Ana Tema ve Alt (Child) Temalar ile çalışma deneyimi yaşamışsanız, çocuk tema içerisindeki şablonlarla, ana tema şablonların geçersiz kılındığını bilirsiniz. Yani, örneğin ana temanızda bir page.php dosyası varsa ve siz alt temanız içerisinde bu dosyanın yenisini oluşturmuşsanız, WordPress sayfaları görüntülerken, alt tema içerisindeki şablonu kullanacaktır.

İşlevlerin de aynı şekilde çalışacağını düşünebilirsiniz: alt tema içerisindeki functions.php dosyasında, ana temadakiyle aynı ada sahip bir işlev oluşturun ve öncelik almış olun. Ne yazık ki bu kadar basit değil.

Bu eğitimde size, alt temanız içinde, ana tema işlevlerini geçersiz kılmak için kullanabileceğiniz üç yöntem göstereceğiz:

  • Modüler (Takılabilir) İşlevler
  • İşlev Önceliği
  • İşlevlerin eklendikleri kancayı kaldırma

Ana Tema ve Alt Temalarda İşlevler Nasıl Çalışır

Öncesinde, ana ve alt temadaki işlevlerin nasıl çalıştığını anlamak, alt temalarınızda, işlevleri geçersiz kılma yöntemlerini incelerken yardımcı olacaktır.

Öncelikle, bir alt tema kullanırken, ana temanızdaki tüm işlevlerin de çalıştırıldığını bilmeniz gerekir. Bunun gerçekleşmesi için alt temanın işlevler (functions) dosyasına herhangi bir şey eklemeniz gerekmez. Bu, alt temanın stil dosyasına, ana temanın stil dosyasını çağırıp, içeriğe dahil eden bir kod yazmak zorunda kaldığınız CSS ayarlama yönteminden farklıdır.

Alt tema içindeki işlevler, ana temadaki işlevlerden önce yüklenir. Bunun anlamı, ana ve alt temanın her ikisinde de benzer bir iş yapan my_function() işlevi varsa, ana tema içindekinin sonra yükleneceğidir. Bu yüzden, alt tema içerisindeki işlev geçersiz kılınacak demektir.

Ancak kısaca göreceğimiz gibi, işlevlerin tetiklenme sırasını değiştirebilir, hangi işlevin önce tetikleneceğini belirleyebilir ve işlevlerin tetiklenmesini tamamen engelleyebilirsiniz.

Modüler (Takılabilir) İşlevler

Modüler işlevler, kod ile ana tema içerisine bir şeyler eklemenizi sağlar. Bunlara sahip olmayan bir ana tema ile çalışıyorsanız, bu yöntemin size herhangi bir yararı olmayacaktır.

Ama eğer, belki de gelecekteki projeler için bir başlangıç noktası olarak, kendi ana temanızı yazıyorsanız veya kendi tema çalışma ortamınızı oluşturuyorsanız, işlevlerinizi takılabilir yapmak için iyi bir yöntemdir, ki bu sayede onları alt temalar içerisinde kolayca geçersiz kılabilirsiniz. Ayrıca bu yöntem, WordPress varsayılan teması da dahil olmak üzere, takılabilir işlevlere sahip temaların pek çoğu  gibi, kullandığınız ana temadaki geçersiz kılınabilir işlevleri bulmak için de iyi bir fikirdir..

Takılabilir bir fonksiyon yazmak için, basitçe, aynı ada sahip bir işlevin, daha önceden çalıştırılıp çalıştırılmadığını kontrol etmek için bir koşul bloğu içine alın:

Yani, ana temadaki işlevleri, böyle bir koşul bloğu içerisine alırsanız, WordPress, aynı adlı bir işlevin, daha önce alt temanız tarafından çalıştırılıp çalıştırılmadığını denetleyecek ve eğer önceden aynı ada sahip bir işlev, alt temanız tarafından çalıştırılmışsa, ana tema içerisindeki o işlevi çalıştırmayacaktır.

Daha sonra, çocuk temanızda, ana temadaki işlevlerden birini geçersiz kılacak, onun yerine kullanılacak bir işlev yazmak istediğinizde, sadece bu işleve, ana temada geçersiz kılınacak işlevle aynı adı vermeniz yeterli olacaktır

WordPress, ilk önce alt temadaki işlevi çağıracak ve ana temadakiyle aynı adlı işleve geldiğinde, bu fonksiyonun daha önce çalıştırılmış olup olmadığını denetleyecek ve daha öncesinde çalıştırıldığı için de, ana temadakini çalıştırmayacaktır.

İşlev Önceliği

Kendi ana temanızı kullanmıyorsanız veya takılabilir işlevleri olmayan üçüncü parti temalardan birini kullanıyorsanız, ana tema işlevlerini geçersiz kılmak için, başka bir yöntem gerekir.

İşlevlerinizi yazarken, Wordpress'e, onları ne zaman çalıştırması gerektiğini bildiren bir işlem önceliği atayabilirsiniz. Bir eylem veya filtre kancası işlevini eklerken bunu kullanabilirsiniz. WordPress, belirli bir kancaya bağlı işlevleri, önceliği artan bir düzende, sırasıyla çalıştıracaktır. Böylece, daha yüksek numaralı önceliğe sahip işlev, daha sonra çalışacaktır.

Ana temada, takılabilir olmayan, aşağıdaki gibi görünen bir işlev düşünelim:

Bu işlev init kancasına bağlı ve bir önceliğe sahip değil. Varsayılan olarak WordPress, bir önceliğe sahip olmayan fonksiyonlara 10 öncelik değerini atar, böylece 10'dan daha büyük bir sayı kullanarak, işlevinizin ondan sonra tetiklenmesini sağlayabilirsiniz. Ben, daha sonra ikisinin arasına başka bir işlev eklemek istediğimde 15 değerini kullanmayı tercih ederim, böylece biraz boş alan bırakmış olurum.

Bu, alt temadaki işlevinizin şu şekilde görüneceği anlamına gelir:

Alternatif olarak, ana tema işlevine bir öncelik atanmış olabilir:

Bu durumda sadece, alt temadaki işlev için verdiğiniz önceliğin daha yüksek olduğundan emin olmaya ihtiyacınız olacak:

Kancalardan Fonksiyonları Kaldırma

Bazen birincisinden sonra başka bir işlevi çalıştırmak, onu geçersiz kılmak için yeterli değildir — ana temadaki işlevin hiç çalıştırılmadığından emin olmanız gerekir. Bu durumda, ana tema işlevinin bağlı olduğu kancayı, remove_action() veya remove_filter() işlevlerini kullanarak kaldırabilirsiniz. Kullanımı, ana tema içerisindeki fonksiyonun bir eylem ya da filtre kancasıyla ilişkilendirilip, ilişkilendirilmemesine bağlıdır.

O zaman, ana temadaki bir önceki işlevimize dönelim:

Bu işlevin bağlı olduğu eylem kancasını kaldırmak ve bu sayede tetiklenmesini önlemek için, alt temanız içerisinde,  remove_action() kullanarak kanca kaldırma görevini gerçekleştirecek bir işlev oluşturun:

Ancak, bu kendi başına çalışmaz — Bu işlevi tetiklemek için, ana tema işlevinin eklendiği kanca sonrası tetiklenecek bir kanca gerekir. Bunun nedeni, tetiklenmeden önce bir eylemi harekete geçirememenizdir. Codex içinde, sırasıyla hangi eylemlerin tetikleyici olduğunu bulabilirsiniz..

Bunu yaptıktan sonra, alt tema içerisindeki işlev dosyasına, ana tema içerisindeki işlevlerle yer değiştirecek işlevleri kolayca yazabilir veya tek yapmak istediğiniz ana tema işlevselliğini kaldırmak ise başka da hiçbir şey yapmazsınız.

Öncelikler üzerine bir not

Kendisine atanmış bir önceliği olan bir işlevi remove_action() veya remove_filter() kullanarak kaldırmaya çalışıyorsanız, kaldırma komutuna da bir öncelik eklemeniz gerektiğini, aksi halde bunun işe yaramayacağını unutmayın.

Eğer öyleyse, ana tema işlevininizin şuna benzer şekilde görünmesi gerekir.:

...onu kaldırırken, bu işlev kancaya bağlanırken kullanılan öncelik değerinin aynısını kullanmalısınız.

Özet

Bir ana temanın işlevlerini geçersiz kılma işlemi şablon dosyalarını veya stillerini geçersiz kılmaktan daha karmaşıktır, ancak yapılabilir. Burada size, bunu yapmak için kullabileceğiniz üç yöntem gösterdim:

  • Eğer kendi ana temanızı yazıyorsanız ya da varolanlardan birinin üzerinde çalışıyorsanız, takılabilir işlevleri kullanın. Böylece alt tema içindeki bir işlev, ana tema içindeki aynı ada sahip bir işlevin yerini alır.
  • Ana tema işlevlerinden sonra çalıştığından emin olmak için alt temanızdaki işlevlere daha yüksek öncelikler atayın.
  • Ana temadaki işlevleri tamamen kaldırmak için remove_action() veya remove_filter() kullanın.

Kullanacağınız yöntem, ana temanın kodlanma biçimine ve ana temadaki işlevi tamamen kaldırma ya da sadece başka bir işlev ile yer değiştirerek, onu geçersiz kılma seçeneklerinden hangisine ihtiyacınız olduğuna bağlıdır.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.