Sıfırdan başlayarak WordPress eklenti geliştirmeyi öğrenmenize yardımcı olacak adım adım bir rehber.

3 dakika okuma.
2026-03-16
2026-06-03
2,427
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 Ortamının Hazırlanması

Kod yazmaya başlamadan önce, stabil ve izole bir geliştirme ortamına sahip olmak çok önemlidir. Bu, hem üretim sitenizi korur hem de test ve hata ayıklama işlemlerini özgürce yapmanıza olanak tanır. En önerilen yöntem, Local by Flywheel, XAMPP veya MAMP gibi yerel geliştirme ortamlarını kullanmaktır. Bu araçlar, WordPress için gerekli olan PHP, MySQL ve web sunucusunu tek bir tıklamayla yerel bilgisayarınıza kurmanıza olanak tanır.

Bundan sonra, yerel WordPress kurulumunuzda hata ayıklama modunu etkinleştirmeniz gerekiyor. Bu, geliştirme sürecinde hataları hızlı bir şekilde tespit etmenize yardımcı olacaktır. WordPress’in kök dizininde bulunan… wp-config.php Dosyada, aşağıdaki sabit tanımlarını bulun veya ekleyin:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Bu ayarlamadan sonra, tüm hatalar ve uyarı bilgileri kaydedilecektir. /wp-content/debug.log Bu bilgi, dosyada bulunur ve doğrudan sayfada görüntülenmez; bu da ön uç kullanıcılarını etkilemez.

Tavsiye edilen okuma WordPress Eklenti Geliştirme Başlangıç Kılavuzu: Sıfırdan İlk Özel Eklentinizi Oluşturun

Son olarak, bir kod editörüne ihtiyacınız var. Visual Studio Code, PhpStorm veya Sublime Text, PHP ve WordPress geliştirme için mükemmel seçeneklerdir; bu editörler PHP ve WordPress kodlarında iyi bir sözdizimi vurgulama (syntax highlighting) ve kod önerileri (code suggestions) desteği sunarlar. Editörünüzün yerel sunucudaki proje dosyalarına kolayca erişebilmesine dikkat edin.

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%).

İlk eklentinizi oluşturun.

Bir WordPress eklentisi esasen, klasöründe bulunan bir veya daha fazla dosyadan oluşur. wp-content/plugins Katalogdaki PHP dosyaları. Her eklentinin bir ana dosyası olmalı ve bu dosyanın baş kısmında, WordPress’in eklentiyi tanıyabilmesi için standart eklenti bilgileri içeren açıklamalar bulunmalıdır.

Plugin başlık bilgilerini yazın.

Senin… wp-content/plugins Dizin içinde, örneğin “new_folder” adında yeni bir klasör oluşturun. my-first-pluginBu klasör içinde, ana dosyayı oluşturun. my-first-plugin.phpDosyanın başında aşağıdaki formatta bir yorum bulunmalıdır:

<?php
/**
 * Plugin Name: 我的第一个插件
 * Plugin URI:  https://example.com/my-first-plugin
 * Description: 这是一个用于学习的简单 WordPress 插件。
 * Version:     1.0.0
 * Author:      你的名字
 * Author URI:  https://example.com
 * License:     GPL v2 or later
 * Text Domain: my-first-plugin
 */

Bu yorumdaki “Plugin Name” zorunlu bir bilgidir; diğerleri ise isteğe bağlıdır. WordPress bu bilgileri okur ve arka plandaki “Eklentiler” yönetim sayfasında gösterir.

Basit bir işlevi gerçekleştirin.

Şimdi, bu eklentiye ilk gerçek özelliği ekleyelim: Makale içeriğinin sonuna otomatik olarak özelleştirilmiş bir metin parçası ekleyeceğiz. Bunun için… the_content Bu filtre kancası (Filter Hook).

Tavsiye edilen okuma WordPress Eklenti Geliştirme: Başlangıçtan Uzmanlığa – Pratik Deneyimler ve Temel Teknikler Paylaşımı

Başlık yorumlarının hemen altına aşağıdaki kodu ekleyin:

function myfp_add_text_to_content( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Bu makaleyi okuduğunuz için teşekkür ederiz. Sizlere “Benim İlk Eklentim” tarafından sunulmuştur.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'myfp_add_text_to_content' );

Dosyayı kaydettikten sonra, WordPress yönetim panelinin “Eklentiler” sayfasına gidin. Orada “İlk Eklentim” adlı eklentiyi görmelisiniz. Bu eklentiyi etkinleştirin ve ardından sitenizdeki bir makaleye bakın; makalenin sonunda tanımladığımız metnin eklendiğini göreceksiniz.myfp_add_text_to_content Bu, bizim tanımladığımız bir fonksiyondur.add_filter() Bunu şuraya monte edin. the_content Kancada. Fonksiyon içindeki koşul kontrolü, bu metnin yalnızca ön taraftaki, ayrı makale sayfalarının ana döngüsünde görüntülenmesini sağlar.

WordPress eklentilerinin temel mekanizmalarını anlamak

WordPress eklentilerinin güçlü ve esnek temelini, “Hook” (Kancalar) mekanizması oluşturur. Hook’lar, WordPress’in çekirdek kodunun belirli noktalarında kendi kodunuzu eklemenize olanak tanır; bu sayede varsayılan davranışları değiştirebilir veya geliştirebilirsiniz. Hook’lar esas olarak iki türe ayrılır: Eylem Hook’ları (Action Hooks) ve Filtre Hook’ları (Filter Hooks).

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

Action Hook’lar ve Filter Hook’lar

Eylem kancaları (Action Hooks), belirli bir olay meydana geldiğinde özelleştirilmiş kodların çalıştırılmasına olanak tanır; örneğin bir makale yayınlandıktan sonra veya yönetim sayfası yüklendiğinde gibi. Geri dönüş değeri gerektirmezler. Kullanımı oldukça kolaydır. add_action() Bir fonksiyon, belirli bir işlemi gerçekleştirmek için kullanılır. Örneğin, bir eklenti etkinleştirildiğinde belirli bir işlem yapılabilir.

function myfp_plugin_activation_task() {
    // 创建数据库表、初始化选项等
    update_option( 'myfp_plugin_installed', '2026-01-01' );
}
register_activation_hook( __FILE__, 'myfp_plugin_activation_task' );

Burada kullanılmıştır. register_activation_hookBu, eklentilerin etkinleştirilmesi için özel olarak tasarlanmış özel bir eylem kancasıdır.

“Filtre kancaları” (Filter Hooks), size ona iletilen verileri değiştirmenize olanak tanır. Bir fonksiyonun bir değer almasını ve değiştirilmiş bir değer döndürmesini gerektirir. Daha önce makale içeriğini değiştirdiğimiz örnek, tipik bir filtre örneğidir. Bir diğer örnek ise makalenin özet uzunluğunu değiştirmektir.

Tavsiye edilen okuma WordPress Eklenti Geliştirme Konusunda Uzmanlaşın: Sıfırdan Başlayarak Kapsamlı Bir Pratik Rehber

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

Kısa kodlar kullanarak dinamik içerik ekleyin.

Kancaların yanı sıra, kısa kodlar (Shortcodes), eklentilerin içerikle etkileşim kurmasını sağlayan başka bir güçlü araçtır. Kullanıcıların makalelerde veya sayfalarda basit bir etiket ekleyerek belirli işlemleri gerçekleştirmesine olanak tanır. [my_shortcode]Bu, eklentinin oluşturduğu karmaşık içeriği çağırmak için kullanılır.

Bir kısa kod oluşturmak çok basittir, kullanmak için şu adımları izleyin: add_shortcode() Fonksiyonlar. Örneğin, mevcut zamanı gösteren kısa bir kod oluşturmak:

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.
function myfp_current_time_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'format' => 'Y-m-d H:i:s',
    ), $atts, 'current_time' );

return date( $atts['format'] );
}
add_shortcode( 'current_time', 'myfp_current_time_shortcode' );

Kullanıcılar editörde bir şeyler yazabilirler. [current_time format="H:i"] Sadece saat ve dakikayı göster.

Eklenti için bir yönetim sayfası ekleyin.

Birçok eklentinin yapılandırma seçenekleri sunması gerekmektedir ve bu genellikle WordPress arka ucu (backend) üzerindeki yönetim menü sayfaları aracılığıyla sağlanır. WordPress, üst düzey menüler veya alt menü öğeleri eklemek için bir dizi fonksiyon sunar.

Eklenti ayarları sayfası oluşturma

Eklentiye, makalelerin sonuna daha önce eklenen metin içeriğini yönetmek için basit bir ayar sayfası ekleyeceğiz. Öncelikle, add_menu_page()add_options_page() Sayfaları kaydetmek için fonksiyonlar kullanılır. Genellikle, basit eklentiler sayfaları “Ayarlar” alt menüsüne ekler.

Eklentinin ana dosyasına aşağıdaki kodu ekleyin:

function myfp_add_admin_menu() {
    add_options_page(
        '我的第一个插件设置', // 页面标题
        '我的插件设置',       // 菜单标题
        'manage_options',     // 所需权限
        'myfp-settings',      // 菜单slug
        'myfp_settings_page_html' // 用于输出页面内容的回调函数
    );
}
add_action( 'admin_menu', 'myfp_add_admin_menu' );

Bu kod, WordPress’e şunu söylüyor: Arka plan yönetim menüsü oluşturulurken…admin_menu Eylem), yürütme myfp_add_admin_menu Bir sayfa eklemek için bir fonksiyon kullanılır.

Oluşturulan ayar sayfası formu

Sonraki adımda, bir tanım yapmamız gerekir. myfp_settings_page_html Bu fonksiyon, sayfanın HTML içeriğini oluşturmak ve formların kaydedilmesini işlemek için kullanılır. Ayarları güvenli bir şekilde saklamak amacıyla WordPress’i kullanıyoruz. options API (Application Programming Interface).

function myfp_settings_page_html() {
    // 检查用户权限
    if ( !current_user_can( 'manage_options' ) ) {
        return;
    }

// 处理表单提交
    if ( isset( $_POST['myfp_footer_text'] ) ) {
        update_option( 'myfp_footer_text', sanitize_textarea_field( $_POST['myfp_footer_text'] ) );
        echo '<div class="notice notice-success"><p>Ayarlar kaydedildi!</p></div>';
    }

// 获取现有值
    $current_text = get_option( 'myfp_footer_text', '感谢阅读本文,由“我的第一个插件”为您呈现。' );
    ?&gt;
    <div class="wrap">
        <h1>İlk eklentim için yapılan ayarlar</h1>
        <form method="post" action="">
            <?php wp_nonce_field( 'myfp_settings_action', 'myfp_settings_nonce' ); ?>
            <table class="form-table">
                <tr>
                    <th scope="row"><label for="footer_text">Makale sayfa altı metni</label></th>
                    <td>
                        <textarea name="myfp_footer_text" id="footer_text" rows="4" cols="50" class="large-text"><?php echo esc_textarea( $current_text ); ?></textarea>
                        <p class="description">Bu metin, her makalenin sonunda görüntülenecektir.</p>
                    </td>
                </tr>
            </table>
            <?php submit_button(); ?>
        <input type="hidden" name="trp-form-language" value="tr"/></form>
    </div>
    &lt;?php
}

Son olarak, makale içeriğini filtreleyen fonksiyonu değiştirmeyi unutmayın; böylece seçeneklerden etkilenir. myfp_footer_text Metni dosyadan okuruz, yerleşik (hard-coded) string’ler kullanmayız. Böylece, temel yönetim özelliklerine sahip bir arka plan ayar sayfası hazırlanmış olur.

Özetle.

Bu makalenin adımlarını takip ederek, sıfırdan başlayarak işlevsel bir WordPress eklentisi oluşturdunuz. Geliştirme ortamını nasıl kuracağınızı, eklentinin temel yapısını nasıl oluşturacağınızı, WordPress’in çekirdek mekanizmalarını (eylemler ve filtreler) kullanarak işlevleri nasıl genişleteceğinizi, kısa kodlar (shortcodes) nasıl yazacağınızı ve arka uç yönetim arayüzünü nasıl oluşturacağınızı öğrendiniz. Eklenti geliştirmenin özü, çekirdek kodları değiştirmeden WordPress’in davranışlarını derinlemesine özelleştirebilmenizi sağlayan “çekmece mekanizmaları” (hooks) ve olay tabanlı (event-driven) yaklaşımları anlamaktadır. Unutmayın ki, iyi bir kod yapısı, güvenli giriş/çıkış işlemleri ve uluslararasılaştırmaya (internationalization) destek, yüksek kaliteli eklentiler geliştirmenin temelidir. Bundan sonra, eklentinize daha fazla özellik eklemeyi deneyebilirsiniz; örneğin özel makale türleri, araçlar (widgets) veya REST API uç noktaları (API endpoints) ekleyerek WordPress ekosisteminin sınırsız olanaklarını keşfetmeye devam edebilirsiniz.

Sıkça Sorulan Sorular.

Bir eklentinin yalnızca bir PHP dosyası olması gerekiyor mu?

Mutlaka öyle değil. Bir eklenti tek bir PHP dosyasından oluşabilir; ancak karmaşık eklentiler için modüler bir yapı daha tavsiye edilir. Farklı işlevleri farklı sınıflara veya dosyalara ayırabilirsiniz ve ana dosya sadece bu dosyaları içe aktarır ve eklentiyi başlatır. Bu, kodun bakımını ve düzenlenmesini kolaylaştırır. Örneğin, includes/ Klasör, işlevsel sınıfları (function classes) barındırmak için kullanılır.admin/ Katalog, arka planda çalışan ilgili kodları içerir.public/ Katalog, ön uç (front-end) mantığını içerir.

Eklentilerdeki kullanıcı girdilerini nasıl güvenli bir şekilde işleyebiliriz?

Kullanıcı girdilerini (örneğin form verileri, URL parametreleri) işlerken, doğrulama (validation), temizleme (sanitization) ve kaçınma (escaping) işlemlerinin yapılması gerekmektedir. Veritabanına kaydedilecek veriler için ise bu işlemler özellikle önemlidir. sanitize_text_field()sanitize_textarea_field()intval() Bu fonksiyonları temizlemek için gerekli adımları atın. Verileri HTML sayfasına çıkardığınızda, uygun yöntemleri kullanın. esc_html()esc_attr()esc_url()wp_kses() Web sitesi, XSS (Cross-Site Scripting) saldırılarını önlemek için kaçış karakterleri kullanır.

Eklenti geliştirme sürecinde kodu nasıl hata ayıklarsınız?

Bunun yanı sıra… WP_DEBUG Ayrıca, şunları da kullanabilirsiniz: error_log() Fonksiyon, özelleştirilmiş bilgileri hata ayıklama günlüğüne kaydeder. Değişken değerlerini kontrol etmek için…var_dump()print_r() Birleştirmek die() Hızlı ancak kaba bir yöntem. Daha çok, WordPress’in kendi sunduğu araçların kullanılmasını öneririm. wp_die()wp_send_json()(AJAX hatalarını gidermek için kullanılır.) Ayrıca, Query Monitor gibi profesyonel hata ayıklama eklentileri sayesinde veritabanı sorguları, işlemler, betikler ve diğer çalışma zamanı bilgileri daha kolay ve anlaşılır bir şekilde görüntülenebilir.

Eklentimi nasıl çok dilli hale getirebilirim?

Eklentinin uluslararasılaştırılmasını (i18n) desteklemek için WordPress’in çeviri fonksiyonlarını kullanmanız gerekmektedir. Öncelikle, eklentinin baş kısmındaki yorum satırlarında gerekli ayarlamaları doğru bir şekilde yapın. Text Domain(Örneğin ‘my-first-plugin’). Kodda, kullanıcıya yönelik tüm metinler için bu yöntemi kullanın. ()_e() Örneğin, bir fonksiyonu paketlemek için şu adımları izleyebilirsiniz: ( ‘Hello World’, ‘my-first-plugin’ )Daha sonra, Poedit gibi araçları kullanarak içeriği dönüştürün. .pot Şablon dosyaları; çevirmenler, bu dosyalara dayanarak farklı dillerde içerikler oluşturabilirler. .po.mo Dosyalar, eklentinin içinde saklanmaktadır. languages/ Klasörde.