WordPress Eklenti Geliştirme Kılavuzu: Sıfırdan Başlayarak Özel İşlevler Oluşturma ve Eklenti Geliştirme

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

Hazırlık İşlemleri ve Ortam Ayarları

Kod yazmaya başlamadan önce, profesyonel bir yerel geliştirme ortamı oluşturmak çok önemlidir. Bu, sadece geliştirme verimliliğini artırmakla kalmaz, aynı zamanda çevrimiçi sunucularda yapılan testlerin getirebileceği risklerden de kaçınmanıza yardımcı olur. Apache/Nginx, MySQL ve PHP’yi entegre eden yerel sunucu yazılımları kullanmanız önerilir; örneğin Local by Flywheel, XAMPP veya MAMP gibi. Kullandığınız PHP sürümünün hedef WordPress ortamıyla uyumlu olduğundan emin olun; genellikle PHP 7.4 veya daha yeni sürümler kullanılması önerilir.

Bir kod editörüne ihtiyacınız var; örneğin Visual Studio Code, PhpStorm veya Sublime Text gibi. Bu editörler genellikle sözdizimi vurgulama, kod önerileri ve sürüm kontrolü entegrasyonu sunar ve kodlama deneyimini önemli ölçüde iyileştirir. Aynı zamanda, WordPress’in resmi “Eklenti Geliştirme Kılavuzu” ve “Kodlama Standartları” belgelerine aşina olmak ve bu standartlara uymak (örneğin, fonksiyon adları arasında çakışmaları önlemek için önekler kullanmak) yüksek kaliteli eklentiler geliştirmenin temelidir.

Eklentinin temel yapısını anlamak.

En temel WordPress eklentilerinden biri yalnızca bir ana dosyadan oluşabilir. Bu ana dosyanın adlandırılması çok önemlidir ve genellikle eklentinin işlevine göre adlandırılır. Örneğin: my-custom-plugin.phpDosyanın başında, WordPress’in eklentiyi tanımasını sağlayan belirli bir formata uygun bir eklenti başlık yorumu bulunmalıdır.

Tavsiye edilen okuma WordPress Eklenti Geliştirme Becerilerini Kazanın: Sıfırdan Başlayarak İlk Özel Eklentinizi Oluşturun

Eklenti başlık yorumları, eklentinin temel bilgilerini (adı, açıklaması, sürümü, yazarı vb.) sağlar. İşte standart bir eklenti başlık örneği:

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%).
<?php
/**
 * Plugin Name:       我的自定义功能扩展
 * Plugin URI:        https://example.com/my-custom-plugin
 * Description:       这是一个用于演示的 WordPress 自定义插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-custom-plugin
 * Domain Path:       /languages
 */

Core Development: Action and Filter Hooks

WordPress eklenti geliştirmenin temeli, “kancalar” (Hooks) sistemini anlamak ve kullanmaktır. Kancalar iki türe ayrılır: Eylemler (Actions) ve Filtreler (Filters). Eylemler, belirli WordPress yaşam döngüsü noktalarında (örneğin başlatma, sayfa yükleme, makale yayınlama sırasında) özel kodlarınızı çalıştırmanıza olanak tanır. Filtreler ise WordPress’in veya diğer eklentilerin çalışması sırasında üretilen verileri değiştirmenize imkan verir.

Eylem kancalarını kullanarak işlevler ekleyin.

Action hook’lar aracılığıyla… add_action() Fonksiyon montajı. Örneğin, web sitenizin yönetim arayüzünün üst kısmına özel bir bildirim eklemek istiyorsanız, bunu yapabilirsiniz. admin_notices Bu eylem için bir “hook” (düğüm) gerekiyor. Bildirim içeriğini çıkarmak için bir fonksiyon oluşturmanız ve bu fonksiyonu söz konusu “hook”a bağlamanız gerekiyor.

Aşağıdaki örnekte, bir fonksiyon oluşturduk. my_custom_admin_notice Lütfen basit bir uyarı mesajı oluşturun ve bunu şu şekilde iletilin: add_action Bunu bağlayın. admin_notices Kanca.

function my_custom_admin_notice() {
    echo '<div class="notice notice-success is-dismissible"><p>Özelleştirdiğim eklenti başarıyla etkinleştirildi!</p></div>';
}
add_action( 'admin_notices', 'my_custom_admin_notice' );

İçeriği filtre kancalarını kullanarak değiştirin.

Filtre hook’ları çalışıyor. add_filter() Fonksiyon bağlama. Bu, ona aktarılan verileri değiştirmek için kullanılır. Yaygın bir örnek, bir makalenin içeriğinin sonunda otomatik olarak bir telif hakkı bildirimi eklemektir.

Tavsiye edilen okuma WordPress eklenti geliştirmede ustalaşma: sıfırdan bire ilk eklenti modülünüzü oluşturma

Aşağıdaki örnekte, bir fonksiyon oluşturduk. append_copyright_to_contentBu araç, makale içeriğini bir parametre olarak alır ve sonuna telif hakkı bilgileri ekledikten sonra değiştirilmiş içeriği geri döndürür. Biz bunu kullanıyoruz. add_filter Bunu bağlayın. the_content Filtreler.

function append_copyright_to_content( $content ) {
    if ( is_single() ) { // 仅在单篇文章页面生效
        $copyright = '<p><em>© 2026 Tüm hakları saklıdır. Bu metin “Benim Eklentim” tarafından oluşturulmuştur.</em></p>';
        $content .= $copyright;
    }
    return $content;
}
add_filter( 'the_content', 'append_copyright_to_content' );

Yönetim sayfası oluşturma ve ayar seçeneklerini belirleme

Birçok eklenti, kullanıcılara yapılandırma arayüzü sunmayı gerektirir ve bu genellikle WordPress arka ucu üzerinde ayrı bir ayar sayfası ekleyerek sağlanır. WordPress, bu süreci kolaylaştırmak için zengin bir API sunar. Örneğin… add_menu_page()add_options_page()

Bir üst düzey yönetim menüsü ekleyin.

Kullanın. add_menu_page() Bir fonksiyon, eklentiniz için bir üst düzey menü öğesi oluşturabilir. Sayfa başlığını, menü başlığını, kullanıcı yetkilerini, menü takma adını, sayfa içeriğini renderlemek için kullanılacak geri çağırma fonksiyonunu ve diğer parametreleri tanımlamanız gerekir.

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

Aşağıdaki kod, “Benim Eklenti Ayarlarım” adında bir üst düzey menü sayfası nasıl oluşturulacağını göstermektedir. Geri çağırma fonksiyonu (callback function): render_my_plugin_settings_page Bu sayfanın HTML içeriğini üreten kişi veya sistem sorumludur.

function my_plugin_add_menu_page() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需用户权限
        'my-plugin-settings',   // 菜单别名 (slug)
        'render_my_plugin_settings_page', // 回调函数
        'dashicons-admin-generic', // 图标(可选)
        30                      // 菜单位置(可选)
    );
}
add_action( 'admin_menu', 'my_plugin_add_menu_page' );

function render_my_plugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Eklenti ayarlarım.</h1>
        <form method="post" action="/tr/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'my_plugin_settings_group' );
            do_settings_sections( 'my-plugin-settings' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="tr"/></form>
    </div>
    &lt;?php
}

Kayıt ve Doğrulama Ayarları Alanları

Kullanıcı girdilerini güvenli bir şekilde saklamak için WordPress’in ayar API’sini kullanmak zorundasınız. Bu, gerekli ayarların yapılmasını da içerir. register_setting()add_settings_section()add_settings_field() Bu fonksiyonlar gibi… API ayarları, veri doğrulamasını, güvenli olmayan isteklerin (nonce) kontrolünü ve veritabanı depolamayı otomatik olarak gerçekleştirir.

Aşağıdaki kod, bir ayar grubu, bir ayar bölgesi ve bir metin giriş alanının nasıl kaydedileceğini göstermektedir. Fonksiyon: sanitize_my_setting Kullanıcı tarafından girilen verilerin, veritabanına kaydedilmeden önce temizlenmesi ve doğrulanması için kullanılır.

Tavsiye edilen okuma Sıfırdan WordPress Eklentisi Geliştirmeyi Öğrenmek: İlk Özel Özelliğinizi Oluşturmak

function my_plugin_settings_init() {
    // 注册一个设置
    register_setting( 'my_plugin_settings_group', 'my_plugin_option_name', 'sanitize_my_setting' );

// 添加一个设置区域
    add_settings_section(
        'my_plugin_main_section',
        '主要设置',
        null, // 可选的区域描述回调函数
        'my-plugin-settings'
    );

// 在区域内添加一个字段
    add_settings_field(
        'my_plugin_text_field',
        '示例文本字段',
        'my_plugin_text_field_callback',
        'my-plugin-settings',
        'my_plugin_main_section'
    );
}
add_action( 'admin_init', 'my_plugin_settings_init' );

function sanitize_my_setting( $input ) {
    // 清理输入,例如移除 HTML 标签
    return sanitize_text_field( $input );
}

function my_plugin_text_field_callback() {
    $value = get_option( 'my_plugin_option_name', '默认值' );
    echo '<input type="text" name="my_plugin_option_name" value="' . esc_attr( $value ) . '" class="regular-text" />';
}

Eklentilerin Uluslararasılaştırılması ve Güvenlik Uygulamaları

Olgun bir eklenti, birden fazla dil desteği sunmalı ve en yüksek güvenlik standartlarına uymalıdır. Uluslararasılaştırma (i18n), eklentinin tüm dünyadaki kullanıcılar tarafından kolayca çevrilebilmesini sağlar. Güvenlik uygulamaları ise hem eklentinizi hem de kullanıcıların web sitelerini yaygın saldırılardan korur.

Metin çevirme özelliğinin desteklenmesini sağlayın.

WordPress, uluslararasılaştırma (internationalization) işlemlerini GNU gettext framework kullanarak gerçekleştirir. Eklentilerinizde kullanıcılar tarafından görülecek tüm metinleri belirli fonksiyonlar aracılığıyla sarmanız gerekir. En yaygın kullanılan yöntem şudur: __()(Çevrilen metni döndürmek için kullanılır) ve _e()(Kullanım amacı: Çevrilen metnin doğrudan ekrana yazdırılmasıdır.) Ayrıca, eklentinin başlık kısmında (plugin header) gerekli ayarların doğru bir şekilde yapılması gerekmektedir. Text DomainDomain PathVe kullanın. load_plugin_textdomain() Fonksiyon, çeviri dosyalarını uygun zamanda yükler.

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.

Aşağıdaki kod, bir eklentinin metin alanını nasıl yükleyeceğini ve çevrilebilir bir dizeyi nasıl çıktı olarak vereceğini göstermektedir.

function my_plugin_load_textdomain() {
    load_plugin_textdomain( 'my-custom-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'init', 'my_plugin_load_textdomain' );

// 在需要的地方使用翻译函数
$greeting = __( '你好,世界!', 'my-custom-plugin' );
_e( '这是一个直接输出的消息。', 'my-custom-plugin' );

Temel güvenlik ilkelerine uyun.

Eklenti güvenliği, geliştirme sürecinde en önemli konulardan biridir. Tüm kullanıcı girdilerinin doğrulanması ve temizlenmesi şarttır. Doğrulama (Validation), verilerin beklenen formata uyup uymadığını kontrol etmektir (örneğin, bir e-posta adresi olup olmadığını). Bunun için çeşitli yöntemler kullanılabilir. filter_var() Temizleme (Sanitization), verilerden güvenli olmayan karakterleri kaldırmayı ifade eder. WordPress, bu amaç için birçok fonksiyon sunar. sanitize_text_field()esc_html()esc_url() vs.

Herhangi bir veriyi tarayıcıya gönderirken, çapraz sitelik betik (XSS) saldırılarını önlemek için verinin kodlanması (escapement) gereklidir. Bunu yapmak için `escape()` gibi fonksiyonlar kullanılabilir. esc_html()esc_attr()wp_kses_post()Veritabanı işlemleri gerçekleştirilirken, mutlaka belirli kuralların ve yöntemlerin kullanılması gerekmektedir. $wpdb Klasyonları ve ön işleme ifadelerini kullanarak SQL enjeksiyonlarını önleyin. Kullanıcı girdilerini asla doğrudan SQL sorgularına eklemeyin.

Özetle.

WordPress eklenti geliştirme, yaratıcılığı işlevsel genişlemelere dönüştürme sürecidir ve bunun temeli, Hook (Kancalar) sisteminin derinlemesine anlaşılmasına dayanır. Yerel bir ortam kurmaktan ve standart eklenti başlık açıklamalarını yazmaktan başlayarak, geliştiricilerin WordPress’in yaşam döngüsüne ve veri akışına müdahale etmek için eylem (Action) ve filtre (Filter) hook’larını ustaca kullanmaları gerekir. Arka plan yönetim sayfaları oluşturmak ve ayar seçenekleri belirlemek, eklentilere kullanıcı arayüzü sağlar. Uluslararasılaştırma ve sıkı güvenlik uygulamaları (doğrulama, temizleme, kod dönüştürme, güvenli veritabanı işlemleri) ise eklentilerin profesyonel, güvenilir olmasını ve dünya çapında güvenli bir şekilde kullanılmasını sağlamanın temel taşlarıdır. WordPress kodlama standartlarına uymak, basit işlevlerden başlayarak karmaşık mantıkları kademeli olarak geliştirmek, eklenti geliştirme sanatını öğrenmenin etkili bir yoludur.

Sıkça Sorulan Sorular.

Bir eklentinin en az kaç dosyasına ihtiyacı vardır?

İşlevsel olarak tam bir WordPress eklentisi yalnızca bir PHP dosyası içerebilir. Bu dosya, doğru eklenti başlık yorumlarını (Plugin Header) içerdiği sürece WordPress tarafından bağımsız bir eklenti olarak tanınır. Elbette, eklentinin işlevselliği arttıkça kodu birden fazla dosyaya bölebilir ve CSS, JavaScript, resimler gibi kaynakları da bu dosyalara ekleyebilirsiniz.

Eklenti fonksiyon adlarının diğer eklentilerle çakışmasını nasıl önleyebilirim?

WordPress, tüm fonksiyonlarınızı, sınıflarınızı, değişkenlerinizi ve sabitlerinizi adlandırmak için benzersiz bir önek kullanmanızı önerir. Bu önek genellikle eklentinizin adı veya şirket adınızla ilgilidir ve yeterince benzersiz olmalıdır. Örneğin, eklentinizin adı “Awesome Slider” ise, şu tür bir önek kullanabilirsiniz: aslider_init()ASLIDER_VERSION Bu tür isimlendirmeler… Daha modern ve daha zarif bir yöntem ise PHP ad alanlarını (Namespace) kullanmaktır; bu, isim çatışmalarını temelden çözebilir.

Eklenti etkinleştirildiğinde ne yapılmalıdır?

Eklentinin etkinleştirilmesi, tek seferlik ayar görevlerinin gerçekleştirilmesi için ideal bir zamandır. Bunu, bir etkinleştirme işlemi (activation hook) kaydederek yapabilirsiniz. Bir fonksiyon oluşturun ve bu fonksiyonda çevre uyumluluğunu (örneğin PHP sürümü), gerekli veritabanı tablolarını oluşturmayı veya güncellemeyi, eklenti seçeneklerinin varsayılan değerlerini ayarlamayı vb. işlemleri gerçekleştirin. register_activation_hook( FILE, ‘your_setup_function’ ) Bu fonksiyonu bağlamak için…

Kullanıcıların eklentimi güvenli bir şekilde nasıl kaldırabilirler?

Kullanıcı deneyimini tam anlamıyla sunabilmek için, eklentinizin kendisi tarafından oluşturulan verileri temizleyebilmesi gerekir. Bu, bir kaldırma işlemi için bir “hook” (düğüm) kaydedilerek gerçekleştirilebilir. WordPress, iki farklı kaldırma yöntemi sunar: register_uninstall_hook( FILE, ‘your_cleanup_function’ ) Kayıtlı olan fonksiyon, kullanıcı “Ekle” eklentisini sildiğinde çalıştırılır. Bu fonksiyon içinde, eklentinin oluşturduğu tüm veritabanı seçeneklerini ve özelleştirilmiş veritabanı tablolarını güvenli bir şekilde silebilirsiniz. Lütfen unutmayın ki, asla doğrudan bu fonksiyonu kullanmayın. register_deactivation_hook Kalıcı veri silme işlemi yapılmalı; çünkü bir özelliğin devre dışı bırakılması, programın tamamen kaldırılması anlamına gelmez.