WordPress Eklenti Geliştirmeyi Sıfırdan Öğrenin: Özel İşlevler Oluşturma ve Genişletmeler

3 dakika okuma.
2026-03-15
2026-06-03
2,301
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

WordPress eklentileri, WordPress’in temel özelliklerini genişleten bağımsız PHP betik koleksiyonlarıdır. Geliştiricilere, WordPress’in temel dosyalarını değiştirmeden web sitelerine yeni özellikler eklemelerine veya mevcut davranışları değiştirmelerine olanak tanır. Bir eklenti, yalnızca bir dosyadan oluşabileceği gibi, birden fazla dosya, betik ve stil şeması içeren karmaşık bir katalog da olabilir.

Eklentinin temel yapısını anlamak.

Bir eklentinin en temel dosyası, ana eklenti dosyasıdır. Bu dosya, WordPress’un eklentinizi tanımasını sağlayan belirli bir eklenti başlık yorumu içermelidir. Eklenti başlığı genellikle dosyanın en üst kısmında bulunur ve eklentinin adı, açıklaması, sürümü, yazarı gibi bilgileri içerir. Örneğin, “Benim Selamlaşma Eklentim” adında bir ana dosya… my-greeting-plugin.php Başlangıcı şu şekilde olabilir:

<?php
/**
 * Plugin Name: 我的问候插件
 * Plugin URI:  https://example.com/my-greeting-plugin
 * Description: 一个简单的插件,用于在网站前台显示问候语。
 * Version:     1.0.0
 * Author:      开发者名称
 * License:     GPL v2 or later
 * Text Domain: my-greeting-plugin
 */

Eklenti başlığının ardından, eklentinin işlevsel kodunu yazmaya başlayabilirsiniz. Tüm eklenti kodları, doğrudan erişimin güvenlik sorunlarına yol açmasını önlemek ve yalnızca WordPress ortamında çalıştırılmasını sağlamak için koşullu ifadeler içinde yer almalıdır.

Tavsiye edilen okuma Sıfırdan Başlayın: İlk WordPress Eklentinizi Oluşturun

Eklenti dizini ve dosya organizasyonu

İşlevi basit eklentiler için tek bir PHP dosyası yeterli olabilir. Ancak işlevler arttıkça, iyi bir dosya organizasyonu çok önemlidir. Tipik bir eklenti dizini aşağıdaki yapıyı içerebilir:
- my-plugin/ Ana Klasör
- my-plugin.php Ana eklenti dosyası
- uninstall.php (Kaldırma işlemi için betik)
- includes/ (Kurucu işlev sınıflarının veya fonksiyonlarının bulunduğu klasör)
- admin/ (Arka plan yönetimi ile ilgili kodların bulunduğu klasör)
- public/ (Websitesinin ön yüzüyle ilgili kodların bulunduğu klasör)
- assets/ (Javascript, CSS ve resim kaynaklarının saklandığı klasör)
- languages/ (Uluslararası çeviri dosyalarının saklandığı klasör)

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

Bu modüler yapı, kodun daha kolay bakım, test ve işbirliği yapılmasını sağlar.

Çekirdek Geliştirme Kavramları: Hook’lar ve Filtreler

WordPress eklenti geliştirmenin temeli, “Kancalar” (Hooks) sistemidir. Kancalar, WordPress’in belirli noktalarında kendi kodunuzu eklemenize olanak tanır; böylece varsayılan davranışları değiştirebilir veya geliştirebilirsiniz. Kancalar esas olarak iki türe ayrılır: Eylem Kancaları (Action Hooks) ve Filtre Kancaları (Filter Hooks).

Eylem kancalarını kullanarak işlevler ekleyin.

Eylem kancaları, belirli bir olay meydana geldiğinde çalışır; örneğin bir makale yayınlanırken, bir kullanıcı giriş yaparken veya bir yönetim sayfası yüklenirken. Çağıran tarafa herhangi bir değer döndürmezler; sadece “bir eylemi gerçekleştirmek” için kullanılırlar. Bunu kullanabilirsiniz. add_action() Fonksiyon, kendi fonksiyonunu bir eylem kancasına (“action hook”) “bağlar” (mounts).

Örneğin, web sitenizin ön sayfasının alt kısmına özelleştirilmiş bir metin eklemek istiyorsanız, bunu yapabilirsiniz. wp_footer Bu eylem hook’u (action hook). Eklentinin ana dosyasında bunu şu şekilde yazabilirsiniz:

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

function myplugin_add_footer_text() {
    echo '<p style="text-align:center;">Bu web sitesini kullandığınız için teşekkür ederiz!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

WordPress çalıştırıldığında… wp_footer Konum belirlendiğinde, kaydettiğiniz bilgiler otomatik olarak çağrılır. myplugin_add_footer_text İşlev.

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

Filtre kancaları, verileri değiştirmek için kullanılır. Veriler veritabanına veya tarayıcıya gönderilmeden önce, onları değiştirme şansı sunarlar. Filtre fonksiyonları, değiştirilmiş değerleri döndürmelidir. add_filter() Filtreleri kaydetmek için bir fonksiyon kullanılır.

Yaygın bir örnek, makale başlıklarını değiştirmektir. Tüm makale başlıklarının sonuna otomatik olarak bir ticari marka simgesi (™) eklemek istediğinizi varsayalım; bunu yapmak için şu yöntemi kullanabilirsiniz: the_title Filtre:

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
function myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且不是管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

Buradaki parametreler 10 Bu, öncelikle ilgilidir (sayı ne kadar küçükse, işlem o kadar önce gerçekleşir).2 Bu, geri çağırma fonksiyonumuzun iki parametre aldığını gösterir.$title$post_id)。

Eklenti Yönetim Sayfası Oluşturma

Birçok eklentinin, kullanıcıların seçenekleri ayarlayabilmesi için WordPress yönetim panelinde bir yapılandırma sayfası sunması gerekmektedir. WordPress, üst düzey menüler ve alt menüler oluşturmak için zengin bir API sağlar.

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

Kullanabilirsiniz. add_menu_page() Bu fonksiyon, eklentiniz için bağımsız bir yönetim menüsü oluşturur. Bu fonksiyonun sayfa başlığı, menü başlığı, kullanıcı yetkileri, menü takma adı, geri çağırma fonksiyonu gibi birçok parametreye ihtiyacı vardır.

Tavsiye edilen okuma WordPress Eklenti Geliştirme Kılavuzu: Başlangıçtan Uzmanlığa Kadar Pratik Bir Eğitim Kitabı

Aşağıdaki kod, basit bir üst düzey menü sayfasının nasıl ekleneceğini göstermektedir:

function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',       // 所需权限(管理员)
        'myplugin-settings',    // 菜单别名(URL中的slug)
        'myplugin_settings_page', // 用于输出页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(使用Dashicons)
        30                      // 菜单位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

// 定义输出页面内容的回调函数
function myplugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form action="/tr/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出设置字段和安全 nonce 字段
            settings_fields( 'myplugin_options' );
            do_settings_sections( 'myplugin-settings' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="tr"/></form>
    </div>
    &lt;?php
}

Ayar API’sini kullanarak seçenekler oluşturun.

Form gönderimlerini ve doğrulamalarını manuel olarak işlemek hem zahmetli hem de güvensizdir. WordPress’in ayar API’si, ayarları kaydetmek, doğrulamak ve yönetmek için standartlaştırılmış bir yol sunar. Bu süreç üç ana fonksiyonu içerir:register_setting()add_settings_section()add_settings_field()

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 örnek, bir ayar grubu ve bir metin alanının nasıl kaydedileceğini göstermektedir:

function myplugin_settings_init() {
    // 注册一个新的设置组 “myplugin_options” 到 “reading” 页面(这里我们用自己的页面)
    register_setting(
        'myplugin-settings', // 选项组,通常与页面别名一致
        'myplugin_options',  // 存储在 wp_options 表中的选项名
        'myplugin_sanitize_callback' // 可选的清理回调函数
    );

// 在页面中添加一个区域
    add_settings_section(
        'myplugin_section_main', // 区域的ID
        '主要设置',               // 区域标题
        'myplugin_section_callback', // 区域描述的回调函数
        'myplugin-settings'      // 页面别名
    );

// 向区域中添加一个字段
    add_settings_field(
        'myplugin_field_greeting', // 字段ID
        '问候语',                  // 字段标签
        'myplugin_field_greeting_callback', // 用于输出字段HTML的回调函数
        'myplugin-settings',      // 页面别名
        'myplugin_section_main',  // 区域ID
        [ 'label_for' => 'myplugin_field_greeting' ] // 额外参数
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段HTML的回调函数
function myplugin_field_greeting_callback() {
    $options = get_option( 'myplugin_options' );
    $value = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
    echo '<input type="text" id="myplugin_field_greeting" name="myplugin_options[greeting]" value="' . esc_attr( $value ) . '" class="regular-text" />';
}

Eklenti güvenliği ve en iyi uygulamalar.

Popüler bir eklenti geliştirmek istiyorsanız, güvenlik ve kod kalitesi en önemli önceliklerdir. Güvenli olmayan eklentiler, bir web sitesinin saldırıya uğramasına neden olabilir.

Veri Doğrulama, Temizleme ve Kaçınma (Data Validation, Cleaning, and Escaping)

Kullanıcı tarafından girilen verilere veya veritabanından alınan verilere asla güvenmeyin. Herhangi bir veriyle işlem yapmadan önce, verilerin doğrulanması (Validation), temizlenmesi (Sanitization) ve escape işlemlerinin yapılması zorunludur.

  • Doğrulama: Verilerin beklenen formata veya kurallara uygun olup olmadığını kontrol eder (örneğin, bir e-posta adresi veya sayı olup olmadığı gibi). Bunun için `is_email`, `is_digit` gibi fonksiyonlar kullanılır. is_email()ctype_digit() Veya düzenli ifadeler (regular expressions).
  • Temizleme: Verileri veritabanına kaydetmeden veya başka işlemler için kullanmadan önce, içlerindeki güvensiz veya gereksiz kısımları ortadan kaldırın. Farklı veriler için uygun temizleme fonksiyonlarını kullanın. sanitize_text_field()(Kullanım alanı: Metinlerde)sanitize_email()(E-posta için kullanılır)intval()(Tam sayılar için kullanılır.)
  • Eşleşme: Verileri HTML, JavaScript veya URL'ye çıktı olarak verirken, XSS saldırılarını engellemek için verilerin güvenli bir şekilde kodlandığından emin olun. Aşağıdaki gibi fonksiyonlar kullanın: esc_html()esc_attr()esc_url()wp_kses()

Örneğin, daha önce oluşturduğumuz selamlaşma seçeneklerini kaydedip çıkardığımızda:

// 在保存设置时的清理回调函数中
function myplugin_sanitize_callback( $input ) {
    $sanitized = [];
    if ( isset( $input['greeting'] ) ) {
        // 清理文本输入
        $sanitized['greeting'] = sanitize_text_field( $input['greeting'] );
    }
    return $sanitized;
}

// 在前台输出问候语时
function myplugin_display_greeting() {
    $options = get_option( 'myplugin_options' );
    $greeting = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
    // 在输出到HTML前进行转义
    echo '<div class="greeting">'`. esc_html($greeting).`'</div>';
}

Uluslararası destek sağlamak

Eklentinizin dünya genelindeki kullanıcılar tarafından kullanılabilmesi için uluslararasılaştırma (i18n – Internationalization) desteği sağlanmalıdır. Bu, kullanıcıya yönelik tüm metinlerin çeviri işlemleri için uygun hale getirilmesi gerektiği anlamına gelir; böylece metinler diğer dillere kolayca çevrilebilir.

WordPress, GNU gettext çerçevesini kullanır. Çekirdek çeviri fonksiyonları şunlardır: __()(Kullanım amacı: Çevrilen metnin alınması için.) _e()Sizin eklentiniz için benzersiz bir metin alanı (Text Domain) ayarlamanız gerekiyor; bu metin alanı zaten eklentinin başlık kısmında tanımlanmış durumda.

Kodda bunu şu şekilde kullanmalısınız:

// 获取翻译后的字符串并赋值给变量
$message = __( '感谢你使用我的插件!', 'my-greeting-plugin' );

// 直接输出翻译后的字符串
_e( '设置已成功保存。', 'my-greeting-plugin' );

// 带占位符的翻译
printf(
    __( '欢迎,%s!', 'my-greeting-plugin' ),
    esc_html( $username )
);

Daha sonra, Poedit gibi bir araç kullanarak bu metinleri koddan çıkarabilir ve bunlardan yeni dosyalar oluşturabilirsiniz. .pot Şablon dosyaları; çevirmenler, bu dosyalara dayanarak farklı dillerde içerikler oluşturabilirler. .po.mo Dosyayı alın ve eklentinin içine yerleştirin. /languages/ Katalogun içinde.

Özetle.

WordPress eklenti geliştirme, geliştiricilere WordPress’ü derinlemesine özelleştirmeler yapma ve genişletme imkanı sunan güçlü ve esnek bir alandır. Temel eklenti yapısını ve kancalama sistemini (hook system) anlamaktan, etkileşimli yönetim arayüzleri oluşturmaya, ve sıkı güvenlik ile uluslararasılaştırma (internationalization) ilkelerine uymaya kadar her adım, yüksek kaliteli, bakımı kolay ve popüler eklentiler oluşturmanın anahtarıdır. Unutmayın ki asıl mesele, WordPress’in sunduğu zengin API’leri kullanmaktır; bunları atlamamaktır. Kodu modüler bir şekilde organize ederek, verileri dikkatli bir şekilde işleyerek ve en başından itibaren çok dilli desteği göz önünde bulundurarak, oluşturduğunuz eklenti sadece güçlü olmakla kalmayacak, aynı zamanda güvenli, profesyonel ve küresel bir potansiyele de sahip olacaktır.

Sıkça Sorulan Sorular.

Bir WordPress eklentisinin en az kaç dosyası olması gerekiyor?

Bir eklentinin en azından bir PHP dosyasına ihtiyacı vardır. Bu dosya, doğru eklenti başlık yorumunu (Plugin Header Comment) içerdiği sürece, WordPress onu arka plandaki eklenti listesinde tanıyıp etkinleştirebilir. Bu tek dosya, eklentinin tüm kodunu içerebilir.

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

Fonksiyon adlarının, sınıf adlarının veya sabitlerin (constantlerin) diğer eklentilerle veya temalarla çakışmasını önlemek için benzersiz bir önek kullanmalısınız. Genellikle, bu önek eklentinizin adına veya kısaltmasına dayanabilir. Örneğin, eklentiniz “Awesome Slider” adını taşıyorsa, şu önekleri kullanabilirsiniz: as_awesome_slider_ Tüm fonksiyonlar ve sınıflar için bir önek olarak kullanılır. Sınıf adları için daha özgün, ad alanı tarzında bir yapı düşünülebilir.

Eklenti kaldırılırken veritabanındaki veriler nasıl temizlenir?

WordPress, eklentilerin kaldırılması sırasında yapılacak temizlik işlemlerini gerçekleştirmek için iki yöntem sunar. İlk yöntem, ana eklenti dosyanızda bir kaldırma işlemi için “hook” (düğüm) kaydetmektir. register_uninstall_hook() İlk yöntemde, eklentinin oluşturduğu veritabanlarını ve ayarları silmek için bir geri çağırma (callback) fonksiyonu belirtilir. İkinci ve daha önerilen yöntem ise, bunları yapmak için ayrı bir fonksiyon oluşturmaktır. uninstall.php Bu dosya, bir eklenti WordPress arayüzü üzerinden silindiğinde WordPress tarafından otomatik olarak çalıştırılır. Bu dosyada, bazı sabitlerin (constantlar) doğru şekilde ayarlandığından emin olmanız gerekir. WP_UNINSTALL_PLUGIN Tüm eklenti verilerinin tanımlanıp tanımlanmadığı kontrol edilir ve ardından güvenli bir şekilde silinir.

Eklentime JavaScript ve CSS dosyalarını nasıl eklemeliyim?

WordPress’in sunduğu kuyruk (queue) fonksiyonlarını kullanarak script’leri ve stil dosyalarını doğru bir şekilde eklemelisiniz; bunları doğrudan HTML içinde çıkarmamalısınız. <script><link> Etiketler. Ön uç kaynakları için kullanılır. wp_enqueue_script()wp_enqueue_style() fonksiyonları ve bunları bağlamak. wp_enqueue_scripts Eylem kancalarına bağlanır. Yönetim arayüzündeki kaynaklar için ise, ilgili yere monte edilir. admin_enqueue_scripts Kancada. Bu, bağımlılıkların doğru bir şekilde işlendiğinden emin olur ve aynı kaynağın tekrar tekrar yüklenmesini önler.

Eklentiler geliştirirken nasıl hata ayıklama (debugging) yapılır?

Öncelikle, emin olun ki sizin… wp-config.php WordPress’un hata ayıklama modunu dosyada etkinleştirin. WP_DEBUG Sabit, olarak ayarlandı. trueAynı zamanda hepsini de açabilirsiniz. WP_DEBUG_LOG(Hataları bir dosyaya kaydet) ve WP_DEBUG_DISPLAY(Hata ekran üzerinde gösteriliyor.) Kullanın. error_log() Fonksiyon, özelleştirilmiş hata ayıklama bilgilerini sunucunun hata günlüğüne kaydeder. Ayrıca, JavaScript ve AJAX isteklerini ayıklamak için tarayıcı geliştirici araçlarının konsolu ve ağ panelinden yararlanabilirsiniz. Karmaşık mantıklar için Xdebug gibi profesyonel PHP hata ayıklama araçlarını kullanmayı düşünebilirsiniz.