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

3 dakika okuma.
2026-03-11
2026-06-04
2,893
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 Kurulumu

WordPress eklenti geliştirmenin temeli, WordPress’in temel özelliklerini genişletmektir ve tüm bunlar iyi yapılandırılmış bir geliştirme ortamıyla başlar. Bir eklenti, esasen bir veya daha fazla PHP dosyasından oluşur ve bu dosyalar WordPress’in kurulum dizinine yerleştirilir./wp-content/plugins/Dosya içinde. Her eklentinin bir ana dosyası olmalıdır ve bu dosyanın en üstündeki yorum bloğu, eklentinin “kimlik kartı”dır; bu blok, WordPress sisteminine eklentinin temel bilgilerini bildirmek için kullanılır.

Tipik bir eklenti başlık yorumu aşağıdaki gibidir:

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

Bu yorum çok önemlidir; çünkü eklentinin WordPress arka planındaki “Eklentiler” yönetim sayfasında görünmesini sağlar.Text DomainUluslararasılaştırma amacıyla kullanılır ve sonraki çeviri işlemleri için hazırlık yapar.

Tavsiye edilen okuma WordPress Eklenti Geliştirme Kılavuzu: Sıfırdan Başlayarak Yayına Hazırlamaya Kadar Pratik Bir Rehber

Yerel Geliştirme Ortamı Ayarları

Kodlamaya başlamadan önce, yerel bir geliştirme ortamı oluşturmak verimli ve güvenli bir seçenektir. Apache/Nginx, MySQL ve PHP içeren bir yerel sunucu kurmak için XAMPP, MAMP, Local by Flywheel veya Docker gibi araçların kullanılması önerilir. Kullandığınız PHP sürümünün mevcut popüler WordPress sürümlerinin gereksinimlerine uygun olduğundan emin olun (genellikle PHP 7.4 veya daha yüksek bir sürüm önerilir). Ayrıca,wp-config.phpAçık.WP_DEBUGBu modeller, geliştirme sürecinde hataları hızlı bir şekilde tespit etmeye ve düzeltmeye yardımcı olur.

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%).
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // 将错误日志保存到 /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // 不在页面上显示错误信息

Eklenti Çekirdek Mimarisi ve Kancalar Mekanizması (Plugin Core Architecture and Hook Mechanism)

WordPress’in hook (kancalar) mekanizmasını anlamak, eklenti geliştirmenin temelini oluşturur. Hook’lar, eklentilerinizin belirli zaman noktalarında WordPress’in çekirdek işlemlerine dahil olmasına ve özelleştirilmiş kodları çalıştırmasına olanak tanır. Hook’lar esas olarak iki türe ayrılır: Eylemler (Actions) ve Filtreler (Filters).

Action Hook’lar ve Filter Hook’lar

Eylem Kancaları (Action Hooks), belirli bir olay meydana geldiğinde kod çalıştırmanıza olanak tanır. Örneğin, bir makale yayınlandıktan sonra bildirim e-postası göndermek veya bir kullanıcı giriş yaptığında günlük kaydı tutmak için kullanılabilir.add_action()Bir fonksiyon, kendi fonksiyonunuzu belirli bir eylem düğümüne (action hook) kaydetmek için kullanılır.

function myplugin_send_notification( $post_id ) {
    // 当文章发布时,执行发送通知的逻辑
    wp_mail( '[email protected]', '新文章已发布', '文章ID:' . $post_id );
}
// 将 myplugin_send_notification 函数挂载到 ‘publish_post’ 这个动作钩子上
add_action( 'publish_post', 'myplugin_send_notification' );

Filtre kancaları (Filter Hooks), işlem sırasında iletilen verileri değiştirmenize olanak tanır. Örneğin, makale içeriğinin görünümünü değiştirmek veya belirli bir fonksiyonun dönüş değerini değiştirmek için kullanılabilir.add_filter()Filtreleri kaydetmek için bir fonksiyon kullanılır.

function myplugin_modify_content( $content ) {
    // 在文章内容的末尾追加一段自定义文本
    $custom_text = '<p><em>Okuduğunuz için teşekkür ederim! Bu metin, benim eklentim tarafından eklenmiştir.</em></p>';
    return $content . $custom_text;
}
// 将 myplugin_modify_content 函数挂载到 ‘the_content’ 这个过滤器钩子上
add_filter( 'the_content', 'myplugin_modify_content' );

Plugin ana sınıfını oluşturun.

Basit eklentiler yalnızca birkaç fonksiyondan oluşabilse de, kodun modülerliği, sürdürülebilirliği ve isim çakışmalarının önlenmesi için, eklentinin işlevlerinin bir ana sınıf içinde paketlenmesi amacıyla nesne yönelimli (OOP – Object-Oriented Programming) yaklaşımının kullanılması şiddetle tavsiye edilir. Bu, modern WordPress eklenti geliştirmenin en iyi uygulamalarından biridir.

Tavsiye edilen okuma WordPress tema geliştirmeye giriş: ilk temanızı sıfırdan oluşturun.

class My_First_Plugin {
    public function __construct() {
        // 在构造函数中挂载所有的钩子
        add_action( 'init', array( $this, 'register_shortcode' ) );
        add_action( 'admin_menu', array( $this, 'add_admin_page' ) );
    }

public function register_shortcode() {
        add_shortcode( 'greeting', array( $this, 'render_greeting' ) );
    }

public function render_greeting( $atts ) {
        return '<h3>Merhaba, WordPress!</h3>';
    }

public function add_admin_page() {
        add_menu_page(
            '我的插件设置',
            '我的插件',
            'manage_options',
            'my-plugin-settings',
            array( $this, 'render_admin_page' )
        );
    }

public function render_admin_page() {
        echo '<div class="wrap"><h2>Eklenti Ayarları Sayfası</h2><p>Bu, yönetim arayüzüdür.</p></div>';
    }
}
// 初始化插件
new My_First_Plugin();

Yönetim arayüzü ve kısa kodlar oluşturma

İyi bir şekilde geliştirilmiş bir eklentinin genellikle kullanıcılarla etkileşim kurması gerekir; bu, web sitesi yöneticilerine arka uç ayar sayfaları sağlamayı ve içerik editörlerine basit ön uç işlev çağrı yöntemleri sunmayı içerir.

Arka plan ayarları sayfasını oluşturun.

WordPress, arka plan menüleri ve alt menü sayfaları oluşturmak için zengin bir API sunar. Örneğin…add_menu_page()add_submenu_page()Ayarlar sayfasında, WordPress’in Ayarlar API’sini (Settings API) kullanarak seçenekleri güvenli bir şekilde kaydedebilir, doğrulayabilir ve saklayabilirsiniz; bu, manuel olarak işlem yapmaktan daha kolaydır.$_POSTVeriler çok daha güvenli ve güvenilir olmalı.

public function add_admin_page() {
    add_options_page(
        '我的插件选项',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 权限要求
        'my-plugin-options',    // 菜单slug
        array( $this, 'options_page_html' ) // 回调函数,用于输出页面HTML
    );
    // 注册设置、节和字段
    add_action( 'admin_init', array( $this, 'register_settings' ) );
}

public function register_settings() {
    register_setting( 'myplugin_options_group', 'myplugin_option_name' );
    add_settings_section( 'myplugin_section_id', '主要设置', null, 'my-plugin-options' );
    add_settings_field( 'myplugin_field_id', '示例字段', array( $this, 'field_html' ), 'my-plugin-options', 'myplugin_section_id' );
}

public function field_html() {
    $option = get_option( 'myplugin_option_name' );
    echo '<input type="text" name="myplugin_option_name" value="' . esc_attr( $option ) . '" />';
}

public function options_page_html() {
    if ( ! current_user_can( 'manage_options' ) ) return;
    ?&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
            settings_fields( 'myplugin_options_group' );
            do_settings_sections( 'my-plugin-options' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="tr"/></form>
    </div>
    &lt;?php
}

Kısa kod özelliğini gerçekleştirme

Kısa kodlar (Shortcodes), kullanıcıların makalelerde veya sayfalarda eklentilerin işlevlerini kolayca entegre etmeleri için mükemmel bir yöntemdir. Kullanımı oldukça basittir.add_shortcode()Bir fonksiyon kaydedilir ve geri çağırma (callback) fonksiyonu bu fonksiyonun alacağı özellikleri (attributes) alır.$atts) ve içerik ($contentParametreleri alır ve nihayetinde görüntülenecek içeriği döndürür.

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
public function register_shortcodes() {
    add_shortcode( 'display_latest_posts', array( $this, 'render_latest_posts' ) );
}

public function render_latest_posts( $atts ) {
    // 设置默认属性,并使用 shortcode_atts 合并用户传入的属性
    $attributes = shortcode_atts( array(
        'count' =&gt; 5,
        'category' =&gt; '',
    ), $atts );

$args = array(
        'posts_per_page' =&gt; intval( $attributes['count'] ),
        'post_status' =&gt; 'publish',
    );
    if ( ! empty( $attributes['category'] ) ) {
        $args['category_name'] = sanitize_text_field( $attributes['category'] );
    }

$query = new WP_Query( $args );
    $output = '<ul>';
    while ( $query-&gt;have_posts() ) {
        $query-&gt;the_post();
        $output .= '<li><a href="/tr/' . get_permalink() . '/">'`.get_the_title().`'</a></li>';
    }
    wp_reset_postdata();
    $output .= '</ul>';
    return $output;
}

Eklenti Güvenliği, Performansı ve Yayın Hazırlığı

Geliştirmenin son aşamasında, eklentinin güvenli, verimli ve dağıtımı kolay olduğundan emin olmanız gerekir. Bu hususlara önem vermemek, güvenlik açıklarına, web sitesinin yavaşlamasına veya kötü bir kullanıcı deneyimine neden olabilir.

Güvenlik ve Veri Doğrulama

Kullanıcıdan veya dış kaynaklardan (örneğin URL parametreleri, form gönderimleri, veritabanları) gelen tüm veriler güvenilmezdir. Bu verilerin doğrulanması, temizlenmesi ve uygun şekilde işlenmesi için WordPress tarafından sağlanan bir dizi fonksiyon kullanılmalıdır.
* 验证(Validation):检查数据是否符合预期格式(如是否为邮箱、数字),使用is_email()intval()vs.
* 清理(Sanitization):在数据保存到数据库之前,移除其中不安全的字符,使用sanitize_text_field()sanitize_email()wp_kses_post()vs.
* 转义(Escaping):在将数据输出到HTML、JavaScript或URL之前,对其进行编码,防止XSS攻击,使用esc_html()esc_js()esc_url()esc_attr()vs.

Veritabanı işlemleri için mutlaka…$wpdbSınıf tarafından sağlanan metotları kullanarak…prepare()Sorgular, SQL enjeksiyonunu önlemek için parametreleştirilir.

Tavsiye edilen okuma CDN Hızlandırma Prensibi ve Pratik Rehberi: Web Siteniz İçin En İyi İçerik Dağıtım Ağını Nasıl Seçersiniz?

Performans Optimizasyonu ve Sonraki Bakım

Performans, kullanıcı deneyiminin anahtarıdır. Her sayfa yüklendiğinde zaman alıcı sorguların veya işlemlerin çalıştırılmasından kaçının. Sık sık değişmeyen veriler için WordPress’in Geçici Önbellekleme API’sini (Transients API) kullanarak verileri saklayın.

$data = get_transient( 'myplugin_expensive_data' );
if ( false === $data ) {
    $data = // ... 执行复杂的数据库查询或远程API调用 ...
    set_transient( 'myplugin_expensive_data', $data, HOUR_IN_SECONDS ); // 缓存1小时
}

Eklentilere uluslararasılaştırma (internationalization) ve yerelleştirme (localization) desteği eklemek için şu adımları izleyin:__()_e()Bu fonksiyonlar, tüm kullanıcı tarafından görülebilen metni kapsar ve bunu belirli bir şekilde işler veya yönetir.load_plugin_textdomain()Dil dosyasını yüklüyoruz. Aynı zamanda, eklentilerin yaşam döngüsünü iyi planlamalı ve etkinleştirme işlemlerini yazmalıyız.register_activation_hookDevre dışı bırakma (Deactivate), kullanımı durdurma (Disabling)register_deactivation_hookYükleme (Install) ve Kaldırma (Uninstall)register_uninstall_hookKancanın işleme mantığı, veritabanı tablolarının oluşturulması/deletilmesi, seçeneklerin temizlenmesi gibi işlemler için kullanılı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.

Yayın Hazırlığı: Belgeler ve Paketleme

Yayınlamadan önce, ayrıntılı bir… (create a detailed…)readme.txtDosyanın formatı, WordPress’in resmi standartlarına uygun olmalıdır; bu standartlar arasında eklenti açıklamaları, kurulum adımları, sık karşılaşılan sorunlar, güncelleme kayıtları vb. bulunmaktadır. Bu, eklentinizin WordPress eklenti dizinindeki tanıtım sayfasıdır. Son olarak, eklenti dizininizin yapısının net olduğundan ve yalnızca gerekli dosyaları içerdiğinden emin olun; ayrıca dosyaları standart ZIP formatında sıkıştırın.

Özetle.

WordPress eklenti geliştirme, fikirleri işlevlere dönüştürme sürecidir ve bu süreç, WordPress’in temel yapısına (özellikle de “hook” mekanizmasına) derin bir anlayışa dayanır. Ortam kurmaktan, temel eklenti kodlarını yazmaya; eylem (action) ve filtre (filter) hook’larını ustaca kullanmaya kadar olan adımlar, başlamanın ilk adımlarıdır. Kodu nesne yönelimli programlama teknikleriyle düzenlemek, projenin sürdürülebilirliğini önemli ölçüde artırır. Ayarlar API’si (Settings API) aracılığıyla güvenli bir arka uç arayüzü oluşturmak ve kısa kodlarla esnek ön uç özellikleri sağlamak, eklentilerin kullanıcılarla etkileşim kurmasının temel yollarıdır. Son olarak, geliştirme sürecinin her aşamasında güvenlik (doğrulama, temizleme, kod dönüştürme), performans (önbellekleme, sorgu optimizasyonu) ve uluslararasılaştırma konusundaki en iyi uygulamalara dikkat etmek; ayrıca kapsamlı dokümantasyon hazırlamak, profesyonel, güvenilir ve popüler bir WordPress eklentisi oluşturmanın anahtarıdır.

Sıkça Sorulan Sorular.

WordPress eklentisi geliştirmek için hangi programlama dillerini bilmek gerekiyor?

Temel gereklilik, PHP’yi ustalıkla kullanabilmektir; çünkü WordPress’in kendisi ve eklentileri, temaları PHP ile yazılmıştır. Aynı zamanda, eklentilerin ön uç arayüzlerini ve etkileşim mantığını oluşturmak için HTML, CSS ve JavaScript konularında temel bilgilere sahip olmak gerekmektedir. Veritabanıyla ilgili karmaşık işlemler söz konusu olduğunda, temel SQL bilgisi de gereklidir.

Geliştirdiğim eklentinin diğer eklentilerle çakışmasını nasıl önleyebilirim?

Ana yöntem, fonksiyon adlarınızın, sınıf adlarınızın, değişken adlarınızın ve diğer tanımlayıcıların benzersiz olmasını sağlamaktır. En iyi uygulama, nesne yönelimli programlama kullanmaktır ve tüm kodu tek bir sınıf içinde paketlemektir. Fonksiyonlar ve genel değişkenler için benzersiz önekler kullanılabilir; örneğin, eklentilerin kısaltmalarını veya isimlerini önek olarak kullanmak mümkündür.myplugin_function_nameMyPlugin_ClassName

Neden eklentim arka planda bir menü ekledi, ancak sayfada “Bu sayfaya erişmek için yeterli yetkiniz yok” mesajı görünüyor?

Bu, çağrı yapıldığı için oluyor.add_menu_page()Benzer fonksiyonlar kullanılırken, ayarlanan yetki (Capability) parametreleri doğru değildir. Üçüncü parametrenin (yetkinin) mevcut kullanıcı rolü tarafından sahip olunan yetkiler arasında olduğundan emin olmanız gerekir. Yalnızca yöneticilerin erişimine izin verilen ayar sayfaları için genellikle…‘manage_options’Geri çağırma fonksiyonunda bunu tekrar kullanabilirsiniz.current_user_can( ‘manage_options’ )Kontrol edin.

Eklentime çeviri desteği nasıl eklerim?

Öncelikle, eklentinin ana dosyasının baş kısmındaki yorumlarda doğru ayarlamaları yapın.Text Domain(Örneğin)my-pluginArdından, kullanın.__( ‘Text’, ‘my-plugin’ )_e( ‘Text’, ‘my-plugin’ )Fonksiyon, çevrilmeye ihtiyaç duyan tüm metinleri kapsar. Son olarak, eklenti başlatıldığında (örneğin…)init(Hareket halindeyken) kullanılır.load_plugin_textdomain()Bir fonksiyon, dil dosyalarını yüklemek için kullanılır. Poedit gibi araçları kullanarak dil dosyalarını oluşturabilirsiniz..potŞablon dosyaları ve….po/.moÇeviri dosyası.