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

3 dakika okuma.
2026-03-15
2026-06-03
2,273
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, uygun bir geliştirme ortamı çok önemlidir. Bu, sadece verimli çalışmanızı sağlamakla kalmaz, aynı zamanda gerçek üretim ortamını da simüle ederek yerel ve çevrimiçi ortamlar arasında oluşabilecek uyumsuzlukları önler. Tipik bir geliştirme ortamı, yerel sunucu ortamı, kod editörü ve hata ayıklama araçlarını içermelidir.

Öncelikle, WordPress’u çalıştırabileceğiniz bir yerel sunucu ortamına ihtiyacınız var. Laragon, XAMPP veya Local by Flywheel gibi entegre ortam paketlerinin kullanılması önerilir. Bu araçlar, Apache/Nginx, PHP ve MySQL’i tek tıklamayla kurmanıza olanak tanır ve karmaşık yapılandırma işlemlerinden sizi kurtarır. Kullandığınız PHP sürümünün mevcut popüler WordPress sürümleriyle uyumlu olduğundan emin olun; genellikle PHP 7.4 veya daha yeni sürümler önerilir. Ayrıca, WordPress arayüzündeki “Araçlar” -> “Site Sağlığı” bölümünde, eklenti geliştirmeyi etkileyebilecek herhangi bir sorun olup olmadığını kontrol edin.

İkincisi, güçlü bir kod editörü seçin. Visual Studio Code şu anda çok popüler bir seçenektir; hafif, ücretsizdir ve PHP Intelephense (kod için akıllı ipuçları sağlar), WordPress Snippet (kod parçaları) gibi birçok eklentiye sahiptir. Bir diğer klasik seçenek isePhpStorm’dur; WordPress geliştirme desteğini daha derinlemesine sunar, ancak ücretli bir yazılımdır.

Tavsiye edilen okuma Sıfırdan Bir: WordPress Eklenti Geliştirme Kapsamlı Rehberi ve En İyi Uygulamalar

Son olarak, hata ayıklama modunun etkinleştirilmesi geliştirme sürecinde vazgeçilmez bir adımdır. Bu, WordPress’in kök dizinindeki dosyaları değiştirerek yapılır.wp-config.phpDosya için ayrıntılı hata raporlamasını etkinleştirebilirsiniz; bu, koddaki sorunları tespit etmek ve düzeltmek açısından çok önemlidir. Dosyada tanımlanan öğeleri bulabilirsiniz.WP_DEBUGConstantların bulunduğu yerde, aşağıdaki kodu ekleyin:

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%).
// 启用 WordPress 调试模式
define( 'WP_DEBUG', true );
// 将错误记录到 /wp-content/debug.log 文件
define( 'WP_DEBUG_LOG', true );
// 在页面上显示错误(开发环境推荐,生产环境必须关闭)
define( 'WP_DEBUG_DISPLAY', true );

İlk eklenti dosyanızı oluşturun.

Bir WordPress eklentisi, yalnızca bir dosyadan oluşacak kadar basit olabilir. Tüm eklentilerin belirli bir klasörde saklanması gerekir./wp-content/plugins/Katalog altında her eklentinin kendi alt kataloğu olabilir; bu, daha karmaşık kod yapılarını düzenlemeye yardımcı olur.

Eklenti Başlık Açıklaması

Her eklentinin ana dosyası, standartlaştırılmış PHP başlık yorumları ile başlamalıdır; bu, WordPress’in eklenti bilgilerini tanımasının bir yoludur. Yeni bir dosya oluşturun ve adını şu şekilde belirleyin:my-first-plugin.phpVe içine koyun./wp-content/plugins/my-first-plugin/Dosya, belirtilen klasörde bulunmaktadır. Dosyanın içeriği şu şekildedir:

<?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
 * Domain Path:       /languages
 */

Bu yorum, eklentinin WordPress arka planındaki “Eklentiler” sayfasında gösterilen tüm meta bilgilerini sağlamaktadır.Text DomainDomain PathEklentilerin uluslararasılaştırılması (i18n) için hazırlık amacıyla kullanılır.

Basit bir işlevi gerçekleştirin.

Şimdi, bu eklentiye basit bir özellik ekleyelim: Makale içeriğinin sonuna otomatik olarak özelleştirilmiş bir metin satırı ekleyelim. Bunun için WordPress’in özelliklerinden yararlanacağız.the_contentFiltre hook’ları. Az önce oluşturduğunuz…my-first-plugin.phpDosyanın başlık bölümündeki yorumların hemen altına aşağıdaki fonksiyonu ekleyin:

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

// 在文章内容末尾添加自定义文本
function my_first_plugin_add_footer_text( $content ) {
    // 确保只在主循环的单篇文章页面执行
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $footer_text = '<p><em>Okuduğunuz için teşekkürler! Bu makale size My First Plugin tarafından sunulmuştur.</em></p>';
        $content .= $footer_text;
    }
    return $content;
}
add_filter( 'the_content', 'my_first_plugin_add_footer_text' );

Dosyayı kaydettikten sonra, WordPress arayüzüne giriş yapın ve “Eklentiler” sayfasına gidin. Orada “İlk Eklentim” adında bir eklenti görmelisiniz. Bu eklentiyi etkinleştirin, ardından bir blog makalesine göz atın; makalenin sonunda ayarladığımız metnin başarıyla eklendiğini göreceksiniz.

WordPress çekirdek API’sini kullanmak

Derinlemesine geliştirme yaparken, WordPress tarafından sağlanan çeşitli API’lerle sık sık etkileşimde bulunacaksınız. Bunlar arasında en temel olanı “Kancalar” (Hooks) sistemidir; bu sistem “Eylemler” (Actions) ve “Filtreler” (Filters)’den oluşur.

Hareket kancalarını anlamak.

Eylem kancaları, belirli zaman noktalarında özelleştirilmiş kodları çalıştırmanıza olanak tanır. Örneğin, bir makale yayınlandığında bir e-posta ile bildirim göndermek istiyorsanız, bunun için eylem kancaları kullanılabilir.publish_postAşağıdaki örnek, bir makale yayınlandığında hata günlüğüne bilgi kaydetme işlevinin nasıl oluşturulacağını göstermektedir:

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 my_first_plugin_log_post_published( $post_id, $post ) {
    // 避免无限循环和非文章类型
    if ( wp_is_post_revision( $post_id ) || $post->post_type != ‘post’ ) {
        return;
    }
    // 记录日志
    error_log( “文章 ID {$post_id} 已发布,标题为:{$post->post_title}” );
}
// 将函数挂载到 publish_post 动作钩子上
add_action( ‘publish_post’, ‘my_first_plugin_log_post_published’, 10, 2 );

fonksiyonadd_actionÜçüncü parametre önceliktir (varsayılan değer 10); sayı ne kadar küçükse öncelik o kadar yüksektir. Dördüncü parametre ise fonksiyonun kabul ettiği parametre sayısını belirtir.

“Filtre hook’larını anlamak” (Understanding filter hooks)

Filtre hook’ları, verileri değiştirmek için kullanılır. “İlk eklenti dosyanızı oluşturun” bölümünde kullandığımız…the_contentBu, bir filtre düğümüdür. Orijinal içeriği alır ve sizin değişiklik yapmanıza izin verdikten sonra tekrar geri gönderir. Bir başka yaygın örnek ise makale özetlerinin uzunluğunu değiştirmektir:

// 修改摘要的默认字数
function my_first_plugin_custom_excerpt_length( $length ) {
    return 30; // 将摘要字数改为30字
}
add_filter( ‘excerpt_length’, ‘my_first_plugin_custom_excerpt_length’ );

Giriş menüsü ekleyin.

Kullanıcılarla etkileşim kurabilmek için, genellikle WordPress’in arka planındaki yönetim kenar çubuğuna bir menü sayfası eklememiz gerekmektedir. Bu, aşağıdaki adımlarla yapılabilir:add_menu_pageİşlev uygulaması. Aşağıdaki kod, eklentiye bir üst düzey ayar sayfası ekler:

Tavsiye edilen okuma WordPress Eklenti Geliştirme Kılavuzu: Sıfırdan Başlayarak Yüksek Kaliteli WordPress Genişletmeleri Oluşturma

// 创建插件管理菜单
function my_first_plugin_add_admin_menu() {
    add_menu_page(
        ‘我的第一个插件设置’, // 页面标题
        ‘我的插件’,           // 菜单标题
        ‘manage_options’,     // 所需权限
        ‘my-first-plugin’,    // 菜单slug
        ‘my_first_plugin_settings_page’, // 回调函数,用于输出页面内容
        ‘dashicons-admin-plugins’, // 图标(可选)
        100                    // 菜单位置(可选)
    );
}
add_action( ‘admin_menu’, ‘my_first_plugin_add_admin_menu’ );

// 设置页面的回调函数
function my_first_plugin_settings_page() {
    ?&gt;
    <div class="“wrap”">
        <h1>İlk eklentim için yapılan ayarlar</h1>
        <p>Bu, eklentinin ayarlar sayfasıdır. Gelecekte buraya formlar ve seçenekler ekleyebilirsiniz.</p>
    </div>
    &lt;?php
}

Eklenti güvenliği ve en iyi uygulamalar.

Başkaları tarafından kullanılmak üzere eklentiler geliştirirken, güvenlik ve kod kalitesi göz ardı edilemez. En iyi uygulamalara uyulması, web sitelerini saldırılardan koruyabilir ve eklentilerin uyumluluğunu ve sürdürülebilirliğini sağlayabilir.

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

Kullanıcı tarafından girilen verilere veya veritabanından alınan verilere asla güvenmeyin. Verileri tarayıcıya göndermeden önce mutlaka escape (kaçırma) işlemi yapılmalı; veritabanına kaydetmeden önce ise doğrulama ve temizleme işlemleri gerçekleştirilmelidir. WordPress, bu amaç için birçok yardımcı fonksiyon sunar.

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.
  • Escape çıktısı: kullanın.esc_html()esc_attr()esc_url()wp_kses_post()`escape()` gibi fonksiyonlar, verileri bağlamına göre dönüştürür (yani bazı karakterleri özel anlamlarından dolayı değiştirir).
  • Girdiyi doğrula: Kullansanitize_text_field()sanitize_email()intval()Bu fonksiyonlar, kullanıcıların gönderdiği form verilerini temizler.

Örneğin, sayfa ayarlarında form verilerini işlerken:

$user_input = $_POST[‘some_field’] ?? ‘’; // 使用空合并运算符提供默认值
$clean_input = sanitize_text_field( $user_input ); // 清理数据
update_option( ‘my_plugin_option’, $clean_input ); // 安全存储

CE (Common Encryption Standard) ve yetki kontrolü kullanmayan bir yöntem kullanmak…

Form isteklerini işlerken (özellikle admin-ajax.php veya admin-post.php’den gelen isteklerde), mutlaka belirli kurallara ve yöntemlere uyulmalıdır.wp_verify_nonce()İsteklerin geçerliliğini doğrulamak ve çapraz sitelik istek sahteciliği (CSRF) saldırılarını önlemek için kullanılır. Aynı zamanda,current_user_can()Mevcut kullanıcının işlemi gerçekleştirme yetkisine sahip olup olmadığını kontrol edin.

function my_first_plugin_handle_form_submit() {
    // 1. 检查nonce
    if ( ! isset( $_POST[‘my_nonce_field’] ) || ! wp_verify_nonce( $_POST[‘my_nonce_field’], ‘my_action’ ) ) {
        wp_die( ‘安全校验失败!’ );
    }
    // 2. 检查权限
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘权限不足!’ );
    }
    // 3. 安全地处理数据…
}

Kod Düzeni ve Uluslararasılaştırma

Karmaşık eklentiler için, kodu organize etmek ve işlevleri sınıflar halinde modüler hale getirmek amacıyla nesne yönelimli programlama (OOP – Object-Oriented Programming) kullanılması önerilir. Bu, kodun okunabilirliğini ve yeniden kullanılabilirliğini artırır.

Aynı zamanda, eklentinin uluslararasılaştırılması için en başından itibaren hazırlıklar yapılmalıdır. Bu, kullanıcılara yönelik tüm metinlerin WordPress’in çeviri fonksiyonları kullanılarak çevrilmesi gerektiği anlamına gelir.__()_e()Paketleme işlemi gerçekleştiriliyor. Eklentinin baş kısmındaki açıklamalara bakarsak, zaten gerekli tanımları yapmıştık.Text DomainKodda şu şekilde kullanılmalıdır:

$message = __( ‘感谢阅读!本文由“我的第一个插件”为您呈现。’, ‘my-first-plugin’ );

Daha sonra, Poedit gibi araçları kullanarak oluşturabilirsiniz..potŞablon dosyası, çevirmenlerin farklı dillerde içerikler oluşturması için kullanılır..moDosya.

Özetle.

Bu rehber sayesinde, sıfırdan bir WordPress eklentisi oluşturma sürecinin temel adımlarını tamamladınız. Geliştirme ortamını nasıl kuracağınızı, standart başlık bilgilerini içeren eklenti dosyalarını nasıl oluşturacağınızı ve WordPress’in güçlü eylem (action) ve filtre (filter) sistemlerini kullanarak yeni özellikler ekleyeceğinizi öğrendiniz. Ayrıca, yönetim menülerinin nasıl güvenli bir şekilde ekleneceğini, verilerin nasıl işleneceğini inceledik ve güvenlik ile uluslararasılaştırmanın (internationalization) önemini vurguladık. Eklenti geliştirme, sürekli öğrenme ve pratik yapma gerektiren bir süreçtir; asıl önemli nokta, WordPress’in eylem ve filtre sistemlerini ve güvenlik kurallarını anlamaktır. Bundan sonra, özel veritabanı tabloları oluşturma, kısa kodlar (shortcodes) ve araççıklar (widgets) ekleme veya REST API uç noktaları geliştirme gibi daha karmaşık özellikler deneyebilir ve zamanla işlevsel olarak gelişmiş, sağlam kodlu ticari seviye eklentiler oluşturabilirsiniz.

Sıkça Sorulan Sorular.

Bir eklenti mutlaka ayrı bir klasörde bulunmak zorunda mıdır?

Hayır, bir eklenti sadece tek başına bir şey olabilir..phpDosyaları doğrudan oraya koyun./wp-content/plugins/Klasörün içinde. Ancak, birden fazla dosya, kaynak (örneğin JS, CSS) içeren veya çevrilmesi gereken dosyaları bulunan eklentiler için, tüm ilgili dosyaların ayrı bir klasörde saklanması şiddetle önerilir. Bu, proje yapısını daha net hale getirir ve yönetimi kolaylaştırır.

Eklentimdeki ayarların veritabanında nasıl saklanacağını öğrenmek isterim?

WordPress, oldukça kullanışlı bir seçenek API’si (Option API) sunar. Bunu kullanabilirsiniz.add_option()get_option()update_option()Bu fonksiyonlar, eklenti ayarlarını eklemek, almak ve güncellemek için kullanılır. Bu veriler, WordPress’in güvenli sistemine güvenli bir şekilde kaydedilir.wp_optionsVeritabanı tablolarında, büyük miktarda yapılandırılmış veri söz konusu olduğunda, bu verilerin dizi veya JSON string formatına dönüştürülerek saklanması düşünülebilir.

Geliştirdiğim eklenti diğer eklentilerle çakışır mı?

Mümkün, özellikle eklentiler genel kancalar, fonksiyon adları veya sınıf adları kullanıyorsa. Çakışmaları önlemek için en iyi uygulama şudur: Tüm fonksiyonlarınıza, sınıflarınıza ve değişkenlerinize benzersiz bir önek ekleyin (örneğin, eklentinin kısaltmasını veya adını kullanın), eklentinin adını ad alanı olarak kullanın (PHP 5.3+’da gerçek ad alanları kullanılabilir) ve kancaları kullanırken uygun önceliği seçin, böylece yürütme sırasının beklentilerinize uygun olmasını sağlayın.

Bu eklentinin hangi WordPress sürümleriyle uyumlu olması gerekiyor?

Bu, hedef kullanıcılara bağlıdır. Genellikle, mevcut ana sürümle ve bir veya iki önceki sürümle uyumlu olmanız önerilir. Eklentinin…readme.txtDosyada belirtilen adımlar takip edilerek işlem tamamlandı.Requires at least:Bu alan, WordPress için minimum gereken sürümü belirtmek için kullanılır. Geliştirme sürecinde, yalnızca daha yeni sürümlerde mevcut olan fonksiyonların kullanımından kaçınılmalıdır.function_exists()Uyumluluk değerlendirmesi yaparak, eklentinin kullanım alanını genişletin.