PHP ile Hook (Kanca) Plugin Sistemi

Merhaba arkadaşlar, bu yazıda sizlere PHP’de kullanabileceğimiz kanca sisteminin mantığını anlatmak istiyorum.

Öncelikle eğer wordpress ile çalıştıysanız, eklenti yazarken wordpress’in bir çok kısmına müdahale ettiğinizi görmüşsünüzdür. Örneğin yeni bir plugin yazdığınızda admin panelinde sol menüye plugin linkinizi ekletebilirsiniz, ya da title’lara müdahale edebilirsiniz plugin’de vs. Yani wordpress’in sistemde belirlediği kısımlara, siz bu kanca sistemini kullanarak ilgili fonksiyonlarınızı çalıştırabiliyorsunuz.

PHP’de bu sistem doğrudan bulunmuyor, ancak PHP’nin özelliklerini kullanarak bunu yapmak mümkün. Bu sistemi sınıf ya da fonksiyon olarak tanımlamak mümkün. Şimdi sizlere video’da yazdığım fonksiyonların kodlarını veriyorum;

<?php

function hook($name, $callback = null, $value = null, $priority = 10){
    static $events = [];
    if ($callback !== null){
        if ($callback){
            $events[$name][$callback] = $priority;
        } else {
            unset($events[$name]);
        }
    } elseif (isset($events[$name])){
        arsort($events[$name]);
        foreach ($events[$name] as $callback => $priority){
            $value = call_user_func($callback, $value);
        }
        return $value;
    }
    return $value;
}

function add_action($name, $callback, $priority = 10){
    return hook($name, $callback, null, $priority);
}

function do_action($name, $value = null){
    return hook($name, null, $value);
}

function remove_action($name){
    hook($name, false);
}

Ve artık bu sistemi kullanarak aşağıdaki gibi örnekler yapabilirsiniz.

<?php

// a plugin
add_action('title', 'yeni_baslik');
function yeni_baslik(){
    return 'tayfun erbilen bu dersi çekti.';
}

// b plugin
add_action('title', 'yeni_baslik2');
function yeni_baslik2($text){
    return $text . ' Ve youtube kanalında yayınladı!';
}

// c plugin
add_action('menu', 'c_plugin_menu', 12);
function c_plugin_menu($menu){
    $menu[] = [
        'title' => 'C Plugin',
        'url' => 'c-plugin.php'
    ];
    return $menu;
}

// d plugin
add_action('menu', 'd_plugin_menu', 11);
function d_plugin_menu($menu){
    $menu[] = [
        'title' => 'D Plugin',
        'url' => 'd-plugin.php'
    ];
    return $menu;
}

echo do_action('title');

print_r(do_action('menu', []));

Daha iyi anlamak için videoyu izlemeyi unutmayın

Ve eğer hala satın almadıysanız, Udemy için hazırladığım PHP Eğitim Setime aşağıdaki linkten ulaşabilirsiniz <3
https://www.udemy.com/php-egitim-seti/?couponCode=PHPWEB

Nargile’de Marpuçun Önemi!

Aylardır kullandığım marpuç takılı kalmıştı bir türlü çıkaramıyordum. En sonunda bugün kafayı kırdım çıkarayım dedim. Bi çıkardım, içinden su bile akmıyor. Deri marpuç olduğu içinde yıkayamıyordum. 1 senedir falan bu marpuçu kullanıyorum. Her neyse, dedim en iyisi içine bir bakayım yenisi alırım. Okumaya devam et “Nargile’de Marpuçun Önemi!”