Blog

WordPress Kanca Mimarisi: Eylemler ve Filtreler Açıklaması

Her harika eklentinin temeli. Bakımı yapılabilir, ölçeklenebilir kod oluşturmak için PAGEnza AI'nin kancaları ve filtreleri nasıl kullandığını öğrenin.

Her WordPress eklentisi iki şeyden birini yapar: belirli bir anda kod çalıştırır (eylem) veya kullanılmadan önce bir değeri değiştirir (filtre). Hepsi bu. Tüm WordPress eklenti ekosistemi bu ayrım üzerine kuruludur.

Aradaki farkı — ve hangisini ne zaman kullanacağınızı — anlamak, çalışan eklentilerle sorun yaratan eklentileri ayıran şeydir.

Eylemler: belirli bir anda bir şey yapın

Bir eylem kancası, WordPress'in (veya başka bir eklentinin) belirli bir anda gönderdiği bir sinyaldir. Bu sinyale bir fonksiyon eklersiniz ve sinyal tetiklendiğinde fonksiyonunuz çalışır.

add_action( 'wp_enqueue_scripts', 'my_plugin_load_assets' );

function my_plugin_load_assets() {
    wp_enqueue_style( 'my-plugin', plugin_dir_url( __FILE__ ) . 'style.css' );
    wp_enqueue_script( 'my-plugin', plugin_dir_url( __FILE__ ) . 'script.js', ['jquery'], '1.0', true );
}

wp_enqueue_scripts, WordPress ön uç için varlıkları yüklemeye hazırlanırken tetiklenir. Buna bağlanmak, CSS ve JS yüklemenin doğru yoludur — şablonlara doğrudan <script> etiketleri bırakmak değil.

Sürekli kullanacağınız yaygın eylem kancaları:

  • init — erken çalışır, özel türleri ve taksonomileri kaydetmek için iyidir
  • wp_enqueue_scripts — ön uç varlıklarını yükleyin
  • admin_enqueue_scripts — yönetici varlıklarını yükleyin
  • save_post — bir gönderi kaydedildiğinde çalışır, özel alanları işlemek için iyidir
  • wp_ajax_{action} — kimliği doğrulanmış kullanıcılardan AJAX isteklerini işleyin
  • wp_ajax_nopriv_{action} — oturum açmamış kullanıcılardan AJAX'ı işleyin

Filtreler: kullanılmadan önce bir değeri değiştirin

Bir filtre kancası size bir değer verir, onu değiştirmenize izin verir ve değiştirilmiş sürümü döndürmenizi bekler. WordPress daha sonra orijinal değeri yerine değiştirilmiş değeri kullanır.

add_filter( 'the_content', 'my_plugin_append_cta' );

function my_plugin_append_cta( $content ) {
    if ( ! is_single() ) {
        return $content;
    }
    $cta = '<div class="post-cta">PAGEnza'yı denemeye hazır mısınız? <a href="#">Ücretsiz başlayın →</a></div>';
    return $content . $cta;
}

Kritik kural: her zaman bir filtreden bir şey döndürün. return'u unutursanız, değer null olur ve onu kullanan her şeyi bozmuş olursunuz.

Yaygın filtre kancaları:

  • the_content — görüntülemeden önceki gönderi içeriği
  • the_title — gönderi başlığı
  • wp_nav_menu_items — gezinme menüsü HTML'si
  • upload_mimes — izin verilen dosya yükleme türleri
  • plugin_action_links_{plugin-file} — eklentiler listesi sayfasında gösterilen bağlantılar

PAGEnza AI kancaları nasıl kullanır

Plugin Builder bir eklenti oluşturduğunda, kodu oluşturucudaki kancalara eklenmiş yöntemlere sahip bir sınıf etrafında yapılandırır. Bu desen, küresel fonksiyon adı çakışmalarını önler ve kodu düzenli tutar.

class My_Plugin {
    public function __construct() {
        add_action( 'init', [ $this, 'register_post_type' ] );
        add_action( 'wp_enqueue_scripts', [ $this, 'load_assets' ] );
        add_filter( 'the_content', [ $this, 'append_content' ] );
    }

    public function register_post_type() { /* ... */ }
    public function load_assets() { /* ... */ }
    public function append_content( $content ) {
        // her zaman döndür
        return $content;
    }
}

new My_Plugin();

Güvenlik taraması, AJAX işleyicilerinin herhangi bir işlem yapmadan önce hem bir nonce kontrolü hem de bir yetenek kontrolü içerdiğini özellikle kontrol eder:

add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );

public function handle_ajax() {
    // Güvenlik: nonce'u doğrula
    check_ajax_referer( 'my_nonce_action', 'nonce' );

    // Güvenlik: izinleri doğrula
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_send_json_error( 'Yetersiz izinler', 403 );
    }

    // Şimdi işlemek güvenli
    $data = sanitize_text_field( $_POST['data'] ?? '' );
    wp_send_json_success( [ 'result' => $data ] );
}

Bunlardan birinin eksik olması güvenlik sorunu olarak işaretlenir ve eklentinin yayınlanmasını engeller.

Öncelik ve kanca kuyruğu

Aynı kancaya birden fazla fonksiyon eklendiğinde, öncelik sırasına göre çalışırlar (daha düşük sayı = önce çalışır). Varsayılan öncelik 10'dur.

add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 );   // varsayılan
add_action( 'init', 'runs_last', 20 );

Bu, eklentinizin başka bir eklentinin kodundan önce veya sonra çalışması gerektiğinde önemlidir. Başka bir eklentinin de değiştirdiği bir şeyi değiştiriyorsanız, öncelik kimin kazanacağını kontrol eder.

Yaygın bir desen: bir temanın filtresini geçersiz kılıyorsanız, temanın kodundan sonra çalıştığından emin olmak için 20 veya daha yüksek bir öncelik kullanın.

Kancaları kaldırma

Başkası tarafından eklenen bir kancayı kaldırabilirsiniz — tema ve eklenti kancaları dahil:

remove_action( 'wp_head', 'wp_generator' );  // <head>'den WP sürümünü kaldırır
remove_filter( 'the_content', 'wpautop' );   // otomatik paragraf sarmalamayı kaldırır

Engeli: bir kancayı yalnızca orijinal add_action/add_filter çalıştıktan sonra remove_action/remove_filter çağırırsanız kaldırabilirsiniz. Bu genellikle kaldırmanızı daha sonraki bir eyleme bağlamayı gerektirir.