WordPress Hook(Kanca) ve Structure Mantığı

2 sene önce - admin

WordPress geliştiricileri için Hook mantığı ve Structure sistemi büyük öneme sahiptir, bir geliştirici eğer WordPress kodlaması yapıyorsa bunları bilmeden yapılan kodlama maalesef bir tema değeri taşımaz sizlere bu yazımızda elimizden geldiği kadar Hook mantığını ve Structure sistemini anlatacağız.

 

Hook(Kanca) Mantığı:

WordPress Hook yapısının 2 şekli vardır. Birincisi WordPress’de varsayılan işlevleri değiştirmenizi sağlar, ikincisi ise çekirdek wordpress dosyalarını değiştirmeden kendi kendi işlevlerinizi oluşturmanızı sağlar.

WordPress’de çekirdek dosyaları ve kodları değiştiremediğinizi bilmek oldukça önemlidir. Şunu bilmelisiniz ki wordpress’de müdahale edebileceğiniz tek yer kendi tema dosyanızdır. Eğer wordpress’de çekirdek bir kod’a müdahale etmek isterseniz burada devreye hook sistemi girecektir.

WordPress’de eğer bir kanca yapısı olmasaydı işleyiş nasıl olurdu biraz düşünelim, bir alana müdahale etmek istediğinizde wordpress’e ait dosyalara girip oradan müdahale etmeniz gerekecek ve wordpress’e bir güncelleme geldiğinde maalesef düzenlemeniz yok olacaktır. Aynı zamanda wordpress bu kadar tutulan bir sistem olmayacaktı.

 

Hook Sisteminin 3 Ana Fonksiyonu: 

  • do_action() Oluşturulan kancanın çağırılmasını yarayan fonksiyondur.
  • add_action() Kanca oluşturmanızı sağlayan fonksiyondur.
  • remove_akction() Kancayı silmemizi sağlayan, genelde wordpress’e yada eklentilere ait bir kanca’yı silerken kullandığımız fonksiyondur.

Add_action(): Kancaları oluşturduğumuz fonksiyondur, başka kanca kümesi veya fonksiyon birleştirilerek oluşturulabilir. Aşağıda bir örnek mevcuttur.
add_action( $kanca_adi, $eklenecek_fonksiyon, $oncelik );

Standart bir add_action kullanımı ise şöyledir.

function fonksiyon_adi() {
echo "Merhaba!";
}
add_action( 'kanca_adi', 'fonksiyon_adi',10 );

 

Do_action(): Kancalar oluşturulduktan sonra ki en önemli adımdır. Kanca sisteminin verimli bir şekilde çalışması ve Structure mantığına uygun olmasının en önemli aşamasıdır. Structure anlatımında detaylı olarak yer verilecektir aşağıda örneği mevcuttur.
do_action( $kanca_adi );

Yukarıdaki kod birnevi echo komutu diyebiliriz. Standart bir do_action kullanımı ise şöyledir.
do_action( 'site-header' );

 

Remove_action(): remove_action fonksiyonu oluşturulan bir kancanın silinmesini sağlar sizlere woocommerce üzerinden bir örnek göstereceğim.
remove_action( $kanca_adi, $silinecek_fonksiyon, $oncelik );

Aşağıdaki fonksiyon woocommerce ürün detay sayfasına ürün ekleyen kanca’dır.
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );

Bu kanca’yı şu şekilde iptal edebilirsiniz.
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );

 

Has_action(): Kanca’nın var olup olmadığı kontrol ettiğimiz fonksiyondur, çok fazla kullanılmasa da işinize yarayabilir. Örneği aşağıdadır.
has_action( $kanca_adi );

 

Structure Mantığı:

WordPress’de tema kodlarken en fazla dikkat edilmesi gereken konulardan biridir. Temiz bir kodlama yapmak temanızın kullanımı ve geliştirilebilirliği açısından çok önemlidir çünkü temanız kullanıma sunulduktan sonra bazı alanlar çıkartılmak istenebilir yada eklenmek istenebilir, bu sebepten temanızın dosya yapısı çok iyi olmak zorundadır. Tüm işlemlerin functions.php üzerinden yapılması maalesef o temanın çöp olduğu anlamına gelebilir. Sizlere öncelikle temanızda dosyalama yapısını nasıl yapacağınızı daha sonra Hook(Kanca) Mantığı ile nasıl kullanacağınızı anlatacağım.

Tema Dosya Yapısı Nasıl Olmalı?: Bu sorunun net bir cevabı yok her geliştiricinin farklı bir tarzı var fakat burada ki en önemli nokta temanızı yada projenizi son kullanıcı için kullanılabilirliği yada temanızın geliştirilebilirliği, bu yüzden dosya yapınız belli kalıplar altında olur ise kullanılabilirlik açısından daha mantıklı olacaktır. Örneğin sayfa tasarımları için templates adında bir klasör kullanılabilir yada tüm dil dosyaları languages adında bir klasörün içinde tutulabilir.

Aşağıda kendime ait yapıyı paylaşıyorum;

  • Css
  • Fonts
  • Images
  • Js
  • Inc
    • Admin
    • Customizer
    • Package
      • Header.php
      • Footer.php
      • Home.php
      • Patch.php
    • Functions
      • Hooks.php
      • Setup.php
  • Language
    • Tema.pot
  • Activation
    • Plugins
    • Setup
      • Demo.xml
      • Setup.php
  • Templates
    • Content-Single.php
    • Content-Page.php
    • Content-None.php
    • Content-Home.php

Yukarıdaki yapı sadece bir örnektir, temada standart olması gereken dosyalar eklenmemiştir.