Başlangıçtan uygulamaya: WordPress eklenti geliştirme kapsamlı rehberi ve ileri düzey teknikleri

3 dakika okuma.
2026-03-11
2026-06-05
2,275
Aşağıdaki bağlantılar üzerinden alışveriş yaptığınızda, sizin için ek bir maliyet olmadan komisyon kazanıyorum.

WordPress Eklenti Geliştirme Temelleri ve Ortam Hazırlığı

WordPress eklenti geliştirme, CMS (İçerik Yönetim Sistemi) özelliklerini genişletmenin temel yoludur. Geliştirme sürecine başlamak için öncelikle profesyonel bir yerel geliştirme ortamı oluşturmanız gerekmektedir. XAMPP, MAMP veya daha modern olan Local by Flywheel gibi araçları kullanmanız önerilir; bu araçlar, bilgisayarınızda PHP, MySQL ve Apache’yi içeren kapsamlı bir web sunucu ortamı hızlı bir şekilde kurmanıza olanak tanır. Ayrıca, en yeni sürümde WordPress’in yüklü olduğundan ve Visual Studio Code veya PHPStorm gibi PHP dilini destekleyen ve kodları vurgulayan etkili bir kod editörünün de mevcut olduğundan emin olun.

Eklentilerin geliştirilmesinin temeli, onların temel yapısını anlamaktır. Bir eklenti, esasen bir veya daha fazla belirli bir yerde bulunan bileşenden oluşur.wp-content/plugins/Katalogdaki PHP dosyaları için en temel gereklilik, eklenti için benzersiz bir ana dosya oluşturmaktır. Her eklentinin, eklentinin adını, açıklamasını, sürümünü, yazarını ve diğer bilgileri içeren belirli bir başlık yorumu (header comment) içermesi gerekir. WordPress, bu meta verileri okuyarak eklentileri tanır ve yönetir. Örneğin, en basit bir eklentinin başlık yorumu şu şekildedir:

<?php
/**
 * Plugin Name: 我的第一个插件
 * Description: 这是一个用于演示的简单插件。
 * Version: 1.0
 * Author: 开发者名称
 */

Bu yorumu içeren PHP dosyasını eklenti dizinine koyduktan sonra, WordPress arayüzündeki “Eklentiler” sayfasında görebilir ve etkinleştirebilirsiniz.

Tavsiye edilen okuma Sıfırdan başlamak: WordPress eklenti geliştirme tam rehberi ve en iyi uygulamaların paylaşılması.

Eklenti Kataloğu ve Adlandırma Standartları

Yapısı net bir eklenti, bakım ve işbirliği açısından son derece önemlidir. İşlevleri karmaşık olan eklentiler için tek bir dosya yerine ayrı klasörler oluşturulması önerilir. Klasör adları kısa, benzersiz ve tamamen küçük harflerden oluşmalıdır ve genellikle eklentinin ana dosya adıyla aynı olmalıdır. Örneğin, “my-awesome-plugin” adlı bir eklentinin klasör yapısı ana dosyasını da içerebilir.my-awesome-plugin.phpDepolamacssjsBir klasör, bir de kancaları tanımlamak için kullanılan…includesKlasörler ve uluslararasılaştırma için kullanılan araçlar.languagesKlasörler. Bu yapıyı takip etmek, kodun okunabilirliğini artırabilir.

UltaHost WordPress Sunucusu
30 gün iade garantisi, sınırsız bant genişliği ve veritabanı kullanımı, ücretsiz DDoS koruması; 3 yıllık abonelikte indirim (50%).

Core Concepts: Action Hooks and Filters

WordPress’in hook sisteminin, eklenti geliştirmenin temel taşı olduğunu anlamak önemlidir. Hook’lar, çekirdek kodu değiştirmeden belirli anlarda kendi kodunuzu eklemenize veya verileri “filtrelemenize” olanak tanır. Hook’lar iki ana kategoriye ayrılır: Eylem Hook’ları (Actions) ve Filtreler (Filters).

Action Hook’ların Kullanımı

Eylem kancaları, WordPress’in yaşam döngüsündeki belirli noktalarda (örneğin makale yayınlarken, sayfa yüklenirken, kullanıcı giriş yaparken) özel kodları çalıştırmanıza olanak tanır. Bunları kullanmak için…add_action()Bir fonksiyon, bir geri çağırma (callback) fonksiyonunu kaydetmek için kullanılır. Örneğin, her makalenin başına otomatik olarak bir metin parçası eklemek istiyorsanız, bunu gerçekleştirebilecek bir fonksiyon oluşturabilirsiniz.the_contentBu eylem açısından:

function myplugin_prepend_content($content) {
    $prepend_text = '<p>Bu, eklentim tarafından eklenen içeriktir.</p>';
    return $prepend_text . $content;
}
add_filter('the_content', 'myplugin_prepend_content');

Lütfen dikkat edin; yukarıdaki örnekler aslında içeriği değiştirmek için filtreler kullanmaktadır. Saf bir eylem kancası (action hook) örneği ise şöyledir:wp_footerSayfanın alt kısmında kodu görüntüler:

function myplugin_footer_notice() {
    echo '<p>Bu site, benim eklentim tarafından desteklenmektedir!</p>';
}
add_action('wp_footer', 'myplugin_footer_notice');

Filtrelerin kullanım mekanizması

Filtreler, verilerin renderlanmasından veya veritabanına kaydedilmesinden önce değiştirilmesi için kullanılır. Eylem kancalarından (action hooks) farklı olarak, filtreler bir değer alır ve işlenmiş bir değer döndürmelidir.add_filter()Fonksiyonlar, filtreler eklemek için kullanılır. Yaygın bir örnek, makalenin özetinin uzunluğunu değiştirmektir; bu işlem belirli bir fonksiyon aracılığıyla gerçekleştirilir.excerpt_lengthFiltre:

Tavsiye edilen okuma WordPress eklenti geliştirme yolculuğuna çıkmak, dünya çapında kullanılan bir platform için eklentiler oluşturma becerilerine sahip olduğunuz anlamına gelir.

function myplugin_custom_excerpt_length($length) {
    return 20; // 将摘要长度改为20个单词
}
add_filter('excerpt_length', 'myplugin_custom_excerpt_length');

Kancalı sistemleri (hook systems) öğrenmek, eklentilerinizin WordPress çekirdeği ve diğer eklentilerle sorunsuz bir şekilde çalışmasını sağlar.

Tam özellikli bir eklenti oluşturun.

Şimdi, yukarıdaki bilgileri birleştirerek, ön ve arka uç arasında etkileşim sağlayan pratik bir eklenti oluşturacağız: bir makale okunma sayısı istatistikleri eklentisi. Bu eklenti, veritabanı tablolarının nasıl oluşturulacağını, ön ve arka uçların güvenli bir şekilde entegre edileceğini ve nasıl kullanılacağını gösterecektir.wp_localize_script()PHP verilerini JavaScript’e aktarmak için…

Eklenti başlatma ve veritabanı oluşturma

Eklentinin ad alanı ana sınıfıdır.Post_View_Counter
Öncelikle, eklenti etkinleştirildiğinde (kullanıldığında)...register_activation_hookOkunma sayılarını saklamak için bir veritabanı tablosu oluşturun.

hosting.com Paylaşımlı Barındırma
AMD EPYC CPU'lar, NVMe SSD depolama ve LiteSpeed ile yüksek performans, 7/24, 7x7 uzman şirket içi destek, SSL, kaba kuvvet, kötü amaçlı yazılım ve DDoS koruması dahil gelişmiş güvenlik önlemleri, 73%'ye kadar tasarruf
class Post_View_Counter {
    public function __construct() {
        register_activation_hook(__FILE__, array($this, 'activate'));
        add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
        add_action('wp_ajax_nopriv_record_view', array($this, 'record_view'));
        add_action('wp_ajax_record_view', array($this, 'record_view'));
        add_filter('the_content', array($this, 'display_view_count'));
    }

public function activate() {
        global $wpdb;
        $table_name = $wpdb->prefix . 'post_views';
        $charset_collate = $wpdb->get_charset_collate();
        $sql = "CREATE TABLE $table_name (
            id mediumint(9) NOT NULL AUTO_INCREMENT,
            post_id bigint(20) NOT NULL,
            view_date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
            PRIMARY KEY (id)
        ) $charset_collate;";
        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);
    }

Veritabanı tablo adı zaten kullanılmış.$wpdb->prefixÇoklu site ortamında benzersizliği sağlamak için…

Ön uç ve arka uç etkileşimi ile AJAX işleme

Kullanıcılar siteyi ziyaret ettiğinde okunma sayısını asenkron olarak güncellemek için, ön tarafa JavaScript eklememiz gerekiyor. Öncelikle,wp_enqueue_script()JS dosyalarını güvenli bir şekilde yükleyin ve ardından…wp_localize_script()Gerekli parametreleri (örneğin, mevcut makale ID’si ve AJAX URL’si) scripte aktarın.

    public function enqueue_scripts() {
        if(is_single()) {
            wp_enqueue_script('pvc-script', plugin_dir_url(__FILE__) . 'js/pvc-script.js', array('jquery'), '1.0', true);
            wp_localize_script('pvc-script', 'pvc_ajax', array(
                'ajax_url' => admin_url('admin-ajax.php'),
                'post_id' => get_the_ID(),
                'nonce' => wp_create_nonce('pvc_nonce')
            ));
        }
    }

Daha sonra, bir AJAX işleme fonksiyonu yazın.record_view()Ön uç isteklerini almak ve verileri güvenli bir şekilde veritabanına eklemek için bu işlem yapılmalıdır. Bu süreçte, CSRF (Cross-Site Request Forgery) saldırılarını önlemek amacıyla yetki kontrolü ve rastgele sayı doğrulaması yapılması zorunludur.

Tavsiye edilen okuma WordPress eklenti geliştirmenin tüm yönlerini kavramak: özel işlev modüllerini sıfırdan oluşturmak.

    public function record_view() {
        // 安全检查
        check_ajax_referer('pvc_nonce', 'nonce');
        $post_id = intval($_POST['post_id']);
        // 验证文章是否存在
        if(get_post_status($post_id)) {
            global $wpdb;
            $table_name = $wpdb->prefix . 'post_views';
            $wpdb->insert($table_name, array('post_id' => $post_id));
            wp_die('success');
        }
        wp_die('error', 400);
    }

Son olarak, biz…the_contentFiltre, makalenin sonunda okunma sayısını gösterir.

    public function display_view_count($content) {
        if(is_single()) {
            global $wpdb, $post;
            $table_name = $wpdb-&gt;prefix . 'post_views';
            $view_count = $wpdb-&gt;get_var($wpdb-&gt;prepare(
                "SELECT COUNT(*) FROM $table_name WHERE post_id = %d", $post-&gt;ID
            ));
            $content .= '<p>Bu makale okunmuştur. <strong>'`.intval($view_count)`.'</strong> İkinci.</p>';
        }
        return $content;
    }
}
new Post_View_Counter();

Bu örnek, eklenti geliştirmenin temel süreçlerini kapsamaktadır; bunlar arasında yaşam döngüsü yönetimi, veritabanı işlemleri, güvenli iletişim ve işlev entegrasyonu bulunmaktadır.

InterServer Paylaşımlı Barındırma
Paylaşımlı hosting aylık $2.50 USD, ilk ay $0.1 USD promosyon kodu tryinterserver, 461 bulut uygulaması komut dosyası, tek tıklamayla yükleme.

İleri teknikler ve en iyi uygulamalar.

Eklentiler karmaşık hale geldiğinde, en iyi uygulamalara uymak son derece önemlidir. Bu sadece kod kalitesiyle ilgili değil; aynı zamanda güvenlik, performans ve sürdürülebilirlik açısından da etkilidir.

Eklentiyi uluslararası hale getirmek (plugin internationalization)

Eklentinizin dünya çapındaki kullanıcılar tarafından kullanılabilmesi için uluslararasılaştırmayı (internationalization) desteklemeniz gerekmektedir. WordPress, GNU gettext çerçevesini kullanmaktadır. Öncelikle, tüm kullanıcıya yönelik metin dizelerinde bu çerçeveyi kullanmalısınız.__()_e()Bu fonksiyonları paketlemek için…

$greeting = __('你好,世界!', 'my-plugin-textdomain');
_e('这是一个可翻译的句子。', 'my-plugin-textdomain');

Daha sonra, Poedit gibi araçları kullanarak içeriği dönüştürün..potŞablon dosyalarını hazırlayın ve çevirmenlerin ilgili diller için gerekli çevirileri yapmalarını sağlayın..po.moDosya. Son olarak, eklenti yüklendiğinde kullanılacak.load_plugin_textdomain()Bu fonksiyon, çevirilerin yüklenmesini sağlar. Bu da eklentinin İngilizce olmayan pazarlardaki kabulünü büyük ölçüde artırabilir.

Ayar Sayfası ve Seçenekler API’si

Profesyonel eklentiler genellikle bir yapılandırma sayfası sunar. WordPress, güçlü bir altyapı sağlar.Settings APIGüvenli bir şekilde seçenekler oluşturun, doğrulayın ve kaydedin.
Kullanmanız gerekiyor.add_options_page()add_menu_page()Bir yönetim sayfası ekleyin. Daha sonra, bunu kullanın.register_setting()add_settings_section()add_settings_field()Bir form oluşturmak ve bu formu veritabanındaki seçeneklerle eşleştirmek için…
Kullanıcı girdilerini her zaman doğrulayın ve temizleyin.sanitize_text_field()intval()Bu fonksiyonları kullanın ve çıktıyı oluştururken bunları uygulayın.esc_html()esc_attr()XSS (Cross-Site Scripting) saldırılarını önlemek için karakterlerin özel şekillerde (ekstra karakterler eklenerek) yazılması gerekmektedir. Bu işleme “ekstraksiyon” (escape) denir.

Performans Optimizasyonu ve Güvenlik Güçlendirmesi

Performans açısından, bunların makul bir şekilde kullanılması gerekmektedir.wp_cache_get()wp_cache_set()WordPress’ın nesne önbellekleme fonksiyonlarını kullanarak sorgu sonuçlarını önbelleğe alın. Sık gerçekleşen veritabanı işlemleri için SQL sorgularının optimize edildiğinden ve uygun araçların kullanıldığından emin olun.$wpdb->prepare()SQL enjeksiyonlarını önlemek için hazırlık ifadeleri sorguları (preparation statements queries) kullanılır.
Güvenlik açısından, kullanıcıların girdilerine asla güvenmeyin. Yukarıda bahsedilen temizleme ve escape işlemlerinin yanı sıra, hassas işlemleri (örneğin AJAX istekleri veya form gönderimleri) gerçekleştirirken mutlaka güvenli yöntemler kullanılmalıdır.wp_verify_nonce()check_ajax_referer()Rastgele sayıyı doğrulayın ve bunu kullanın.current_user_can()Kullanıcı yetkilerini kontrol edin. Bu, eklentinin güvenliğini sağlam bir temel üzerine kuracaktır.

Özetle.

WordPress eklenti geliştirme, PHP programlama, WordPress çekirdek API’sini anlama ve web geliştirme konusundaki en iyi uygulamaların birleşiminden oluşan kapsamlı bir beceridir. Standart başlık bilgilerini içeren tek bir dosya oluşturarak başlayan geliştiriciler, eylem kancaları (action hooks) ve filtreler (filters) gibi temel etkileşim mekanizmalarını derinlemesine öğrenmelidir. Eklentinin işlevleri arttıkça, veritabanını etkili bir şekilde yönetmek, AJAX isteklerini güvenli bir şekilde işlemek ve kullanıcı dostu bir ayar arayüzü oluşturmak kritik hale gelir. Ayrıca, uluslararasılaştırma (internationalization), performans optimizasyonu ve güvenli kodlama gibi ileri düzey uygulamalara uyum sağlamak, basit bir işlevsel betiği profesyonel, güvenilir ve yaygın olarak kullanılan bir ticari eklentiye dönüştürmeyi sağlar. WordPress Codex ve geliştirici kaynaklarını sürekli olarak öğrenmek, geliştirme becerilerini sürekli geliştirmenin en etkili yoludur.

Sıkça Sorulan Sorular.

WordPress eklentisi geliştirmek için hangi temel bilgilere ihtiyaç vardır?
WordPress eklentisi geliştirmek için en azından sağlam PHP temellerine sahip olmak gerekmektedir; bu, nesne yönelimli programlama kavramlarını da içerir. Aynı zamanda HTML, CSS, JavaScript (özellikle jQuery) ve MySQL konularında temel bilgilere sahip olmak önemlidir. En önemlisi, WordPress’in çekirdek yapısına aşina olmak gerekir; özellikle de eklentilerin sisteme entegre edilmesini sağlayan “kancalar” (Actions ve Filters), genel değişkenler (global variables) ve veritabanı işlemleri ile ilgili sınıflar (database operation classes) konularında bilgi sahibi olmak gerekmektedir.$wpdbAyrıca tema şablonlarının çalışma süreci de dahildir.

Kendi geliştirdiğiniz WordPress eklentisini nasıl hata ayıklarsınız?

En etkili yöntem, WordPress’in hata ayıklama (debugging) modunu etkinleştirmektir.wp-config.phpDosyada, ayarlar yapılmıştır.define(‘WP_DEBUG’, true);Bu, PHP hatalarını, uyarılarını ve bildirimlerini doğrudan sayfada gösterecektir. Daha karmaşık mantık hatalarının ayıklanması için ise farklı araçlar kullanılabilir.error_log()Bu fonksiyon, değişken bilgilerini sunucunun hata günlüğüne yazar veya Xdebug gibi profesyonel PHP hata ayıklama araçlarını kullanır. AJAX ve ön uç etkileşimleri için, tarayıcının geliştirici araçları (konsol ve ağ paneli) şarttır.

Eklentim diğer eklentiler veya temalarla nasıl uyumlu olur?

İyi bir uyumluluk sağlamanın temel ilkesi, WordPress’in resmi olarak sunduğu API’leri kullanmaktır; çekirdek dosyaları veya veritabanı tablolarını doğrudan değiştirmek yerine. Fonksiyonlar, sınıflar ve değişkenler için benzersiz önekler kullanmak, isim çakışmalarını önlemeye yardımcı olur. Küresel değişkenleri dikkatli bir şekilde kullanın. Hook’ları eklerken veya kaldırırken, bunların doğru zamanda çalıştığından emin olun (örneğin, belirli bir işlem sırasında).initEklenti bağlandıktan sonra, eğer eklentinin işlevleri değiştirilebilirse, diğer geliştiricilerin bunları özelleştirebilmeleri için filtreler sağlanmalıdır. Yayınlamadan önce, mümkün olduğunca farklı ortamlarda ve popüler temalarda testler yapılmalıdır.

Kendi eklentimi WordPress resmi eklenti dizinine nasıl gönderebilirim?

Öncelikle, WordPress.org üzerinde bir hesap oluşturmanız ve eklentiyi buraya göndermeniz gerekiyor. Eklentiniz kodu, resmi kodlama standartlarına uygun olmalı ve herhangi bir şifreleme veya karıştırılmış kod içermemelidir. Eklentinin, standartlara uygun bir başlık yorumu (header comment) bulunmalı ve mümkün olduğunca ayrıntılı bir README belgesi sağlanmalıdır. Tüm metin dizeleri uluslararasılaştırmaya (internationalization) uygun olmalıdır. Gönderimden sonra, eklenti inceleme ekibi tarafından incelenecektir; inceleme esas olarak güvenlik, kod kalitesi ve GPL lisansına uygunluk açısından yapılacaktır. İncelemeden geçtikten sonra, eklentiniz dünya genelindeki kullanıcılar tarafından aranabilir ve indirilebilir hale gelecektir.