Bir satır kodla kendi sahneni kurabilmek.
Bazen projede kritik bir an olur…
Bir sipariş tamamlanır, rezervasyon alınır ya da kullanıcı giriş yapar.
Tam o anda “şimdi sihir başlıyor” denir.
do_action() işte bu anlar için vardır.
WordPress’te do_action(), özel bir olay tanımlamayı ve tetiklemeyi sağlar.
Bu olay, add_action() ile bağlanan tüm fonksiyonları harekete geçirir.
Kısaca: “Burada bir şey gerçekleşti, kim dinliyorsa devreye girsin.”
add_action() başkasının sahnesinde yer almaktır. do_action() ise kendi sahneni kurmaktır.
Temel Kullanım
do_action( string $hook_name, mixed $arg1 = null, mixed $arg2 = null, ... );
$hook_name (zorunlu): Olayın adı; add_action() ile bu isme bağlanılır.
$arg1, $arg2, … (opsiyonel): Olay tetiklendiğinde dinleyicilere iletilen veriler.
Proje Akışına Katacağı Artılar
Genişletilebilirlik: Tema veya eklentilere eklenebilecek bağlantı noktaları yaratır.
Temiz kod yapısı: Ana işlevler sade kalır, ek işlemler farklı alanlara taşınır.
İşbirliği imkanı: Başka geliştiriciler kolayca sisteme entegre olabilir.
Kontrol: Olayın ne zaman ve nasıl çalışacağı tamamen geliştiricide olur.
Canlı Senaryo Örnekleri
WooCommerce’de Sipariş Tamamlanınca
add_action( 'woocommerce_thankyou', function( $order_id ) {
$order = wc_get_order( $order_id );
do_action( 'wlnk_order_completed', $order_id, $order );
});
add_action( 'wlnk_order_completed', 'wlnk_send_invoice', 10, 2 );
function wlnk_send_invoice( $order_id, $order ) {
// Fatura entegrasyonu
}
Çekirdek WooCommerce akışına dokunmadan ek adımlar eklenebilir.
Admin Paneli Kaydetme Sonrası
function wlnk_save_settings( $payload ) {
update_option( 'wlnk_opts', $payload );
do_action( 'wlnk_settings_saved', $payload );
}
add_action( 'wlnk_settings_saved', 'wlnk_clear_caches', 10, 1 );
function wlnk_clear_caches( $payload ) {
// Cache temizleme
}
Ayar kaydı sonrasında otomatik işlemler tetiklenebilir.
Uygulama Önerileri
Prefix kullanımı: wlnk_booking_created gibi benzersiz ön eklerle çakışmalar önlenebilir.
Anlamlı isimler: *_created, *_updated, *_deleted gibi eylem odaklı adlandırmalar tercih edilebilir.
Parametrelerin belgelenmesi: PHPDoc ile gönderilen verilerin açıklanması, diğer geliştiriciler için kolaylık sağlar.
Uyumluluk korunması: Yeni parametreler sona eklenirse mevcut dinleyiciler bozulmaz.
Ağır işlemleri asenkron yürütme: Action Scheduler gibi kuyruk sistemleri ile performans artırılabilir.
Hata izolasyonu: try/catch kullanımı ile hataların akışı bozması önlenebilir.
add_action() ile Farkı
| Özellik | do_action() | add_action() |
|---|---|---|
| Amacı | Olay tetikler. | Olaylara bağlanır. |
| Kaynağı | Geliştirici tanımlar. | Çekirdek/tema/eklenti tanımlar. |
| Parametre rolü | Veriyi dinleyicilere iletir. | Kaç parametre alacağını belirtir. |
| Kullanım durumu | “Burada bir şey gerçekleşti” ifadesi | “Bu olursa şunu yap” ifadesi |
Sonuç
do_action(), projene esneklik katan, işbirliğini kolaylaştıran ve gelecekte yapacağın geliştirmeler için sağlam bir zemin hazırlayan güçlü bir araçtır.
Bir olay tanımladığında, ona hangi fonksiyonların bağlanacağını ve bu fonksiyonların ne yapacağını tamamen sen belirlersin.
Bu sayede kodun hem modüler olur hem de üzerine kolayca yeni şeyler eklenebilir hale gelir.
Eğer “kendi sahneni kurma” fikri hoşuna gittiyse, bunun tamamlayıcısı olan add_action() Nedir? yazısına da mutlaka göz atmanı öneririm. Orada da başkalarının kurduğu sahnelerde nasıl yer alabileceğini anlattım.
Sevgiler 🫶