Rahatça Başlayıp Uzmanlaşmaya: WordPress Eklenti Geliştirme Kapsamlı Rehberi ve Pratik Eğitim Kursu

3 dakika okuma.
2026-03-18
2026-06-03
2,162
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 Hazırlıkları

WordPress eklentisi geliştirmeye başlamadan önce, sağlam bir yerel geliştirme ortamı oluşturmak çok önemlidir. XAMPP, Local by Flywheel veya Docker gibi araçları kullanarak Apache/Nginx, MySQL/MariaDB ve PHP’yi içeren entegre bir ortam oluşturmanız önerilir. Kullandığınız PHP sürümünün WordPress’in resmi önerileriyle uyumlu olduğundan emin olun. Ayrıca, Visual Studio Code veya PHPStorm gibi bir kod editörü hazırlayın; bu editörler sözdizimi vurgulama ve kod ipuçları sağlayarak geliştirme verimliliğinizi büyük ölçüde artırır.

WordPress eklentilerinin temel yapısını anlamak ilk adımdır. Her eklenti, esasen belirli bir işlevi yerine getirmek için tasarlanmış ve WordPress sisteminin içinde çalışan bir program parçasıdır./wp-content/plugins/Katalogdaki klasörlerin içinde, genellikle eklenti klasörünün adıyla aynı adı taşıyan bir ana PHP dosyası bulunur. Bu ana dosya, WordPress’in eklentiyi tanımasını sağlayan belirli başlık bilgilerini içermelidir. En basit eklenti bile yalnızca bu başlık bilgilerini içerebilir.

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

Yukarıdaki kod, “Benim İlk Eklentim” adında bir temel eklenti tanımlamaktadır. Bu dosyayı belirli bir yere koyduğunuzda…/wp-content/plugins/my-first-plugin/Dizinin içine ekledikten sonra, WordPress arka planındaki “Eklentiler” sayfasında bunu görebilir ve etkinleştirme veya devre dışı bırakma işlemlerini gerçekleştirebilirsiniz. Bu yapı, tüm karmaşık eklentiler için başlangıç noktasıdır.

Tavsiye edilen okuma Sıfırdan başlayarak WordPress eklenti geliştirmeyi öğrenin: Kapsamlı bir rehber ve uygulamalı eğitimler.

Geliştirme işlemine başlamadan önce, WordPress’in kodlama standartlarına ve en iyi geliştirme uygulamalarına aşina olmanız gerekmektedir; örneğin, fonksiyon ve sınıf adları arasında çakışmaları önlemek için önekler kullanmak önemlidir. WordPress’in çalışma sürecini ve temel kavramlarını (Hook’lar, Eylemler – Actions, Filtreler – Filters) derinlemesine anlamak, güçlü ve stabil eklentiler oluşturmanın temelidir.

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

Temel geliştirme: Hook'ları kullanmak ve eklenti oluşturma işlevi.

WordPress eklenti geliştirmenin özü, güçlü kancalama (hook) sisteminden yararlanmaktadır. Kancalar, çekirdek dosyaları değiştirmeye gerek kalmadan, belirli zaman noktalarında veya veri işleme aşamalarında özel kodlar eklemenizi sağlar. Kancalar esas olarak iki kategoriye ayrılır: Eylem Kancaları (Action Hooks) ve Filtre Kancaları (Filter Hooks).

Geliştiriciler, şu yollarla…add_action()Bir fonksiyon, özel bir fonksiyonu belirli bir eylem kancasına (action hook) bağlamak için kullanılır. Örneğin, makalenin sonuna otomatik olarak telif hakkı bilgileri eklemek yaygın bir ihtiyaçtır.

function myplugin_add_copyright($content) {
    if (is_single()) {
        $copyright = '<p>© ' . date('Y') . ' Tüm hakları saklıdır.</p>';
        $content .= $copyright;
    }
    return $content;
}
add_filter('the_content', 'myplugin_add_copyright');

Burada biz şunu kullandık:add_filter()Fonksiyon. Dikkat edin.the_contentBu, makale içeriğini değiştirmenize olanak tanıyan bir filtre kancasıdır. Özel fonksiyonumuz…myplugin_add_copyrightOrijinal içeriği alın.$contentBir parametre olarak telif hakkı bilgilerini ekledikten sonra, değiştirilmiş içeriği geri göndermek zorundasınız. Filtreleme fonksiyonunun bir dönüş değeri olmalıdır.

Daha karmaşık işlevler için, örneğin bir yönetim arayüzü menü sayfası oluşturmak istiyorsanız, eylem kancalarından (action hooks) yararlanmanız gerekecektir.admin_menuVe bir dizi WordPress API fonksiyonu.

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

function myplugin_admin_menu() {
    add_menu_page(
        '我的插件设置', // 页面标题
        '我的插件',     // 菜单标题
        'manage_options', // 权限
        'myplugin-settings', // 菜单slug
        'myplugin_settings_page', // 回调函数
        'dashicons-admin-generic', // 图标
        20 // 位置
    );
}
add_action('admin_menu', 'myplugin_admin_menu');

function myplugin_settings_page() {
    echo '<div class="wrap"><h1>Eklenti ayarlarım.</h1><p>Burada sayfa içeriğini ayarlayabilirsiniz.</p></div>';
}

Bu kod,add_action('admin_menu', 'myplugin_admin_menu')Arka planda yükleme sırasında bir menü kaydedin.myplugin_admin_menuFonksiyon içinde, kullanılır.add_menu_page()Bir üst düzey menü öğesi eklemek için bir fonksiyon kullanılır ve kullanıcı bu menüye tıkladığında hangi işlemin gerçekleşeceği belirtilir.myplugin_settings_pageBu fonksiyon, sayfa içeriğini renderlemek için kullanılır.

Eklentilerin Gelişmiş Özellikleri ve Güvenlik Uygulamaları

Eklentilerin işlevleri arttıkça, kodu düzenlemek, verileri işlemek ve güvenliği sağlamak daha da önemli hale gelmektedir. İyi bir uygulama, işlevleri kapsamlamak için nesne yönelimli programlama kullanmaktır; bu, kodu daha iyi yönetmeye ve isim çakışmalarını önlemeye yardımcı olur.

class MyPlugin_Core {
    public function __construct() {
        add_action('init', array($this, 'register_shortcode'));
        add_action('wp_enqueue_scripts', array($this, 'enqueue_assets'));
    }

public function register_shortcode() {
        add_shortcode('myplugin_show', array($this, 'shortcode_handler'));
    }

public function shortcode_handler($atts) {
        return '<div class="myplugin">Merhaba, Shortcode’tan!</div>';
    }

public function enqueue_assets() {
        wp_enqueue_style('myplugin-style', plugins_url('css/style.css', __FILE__));
        wp_enqueue_script('myplugin-script', plugins_url('js/script.js', __FILE__), array('jquery'), null, true);
    }
}
new MyPlugin_Core();

Bu sınıf, başlatılırken kısa kodları ve ön uç kaynaklarını (frontend resources) kaydeder. Kullanımı şu şekildedir:array($this, 'method_name')Sınıf metotlarını bir geri çağırma (callback) fonksiyonu olarak kullanmanın standart bir yoludur.

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

Veri depolama, eklentiler için çok önemlidir. Basit yapılandırma seçenekleri için WordPress Options API’si (Seçenekler API’si) kullanılmalıdır. Kullanıcı girdilerinin güvenlik açıklarını önlemek amacıyla mutlaka doğrulanması, temizlenmesi ve escape işleminden geçirilmesi gerekir.

// 保存设置
function myplugin_save_settings() {
    if (isset($_POST['myplugin_nonce']) && wp_verify_nonce($_POST['myplugin_nonce'], 'myplugin_action')) {
        $safe_value = sanitize_text_field($_POST['my_option']);
        update_option('myplugin_option', $safe_value);
    }
}
add_action('admin_post_myplugin_save', 'myplugin_save_settings');

Bu kod parçası, form gönderimlerinin güvenli bir şekilde işlenmesi sürecini göstermektedir:wp_verify_nonce()Rastgele sayıyı (nonce) doğrulayın, kullanın.sanitize_text_field()Girdiyi temizleyin ve son olarak kullanın.update_option()Verileri güvenli bir şekilde saklayın. Daha karmaşık veri yapıları için özel veritabanı tabloları oluşturmayı düşünebilirsiniz; ancak bunu yaparken dikkatli olmalı ve WordPress veritabanı şablonlarına uymalısınız.

Eklentilere CSS ve JavaScript dahil ederken, bunların belirli bir şekilde kullanılması gerekmektedir.wp_enqueue_style()wp_enqueue_script()Bu, fonksiyonları tanımlar ve bağımlılıkları belirtir. Bu sayede kaynakların doğru sırayla yüklenmesi sağlanır ve diğer eklentilerle çakışmalar önlenir.

Tavsiye edilen okuma Sıfırdan başlamak: WordPress eklenti geliştirme altyapısı.

Uluslararasılaştırma, Dağıtım ve Bakım

Eklentinizin dünya genelindeki kullanıcılar tarafından kullanılabilmesi için uluslararasılaştırma (internationalization) kaçınılmaz bir adımdır. WordPress, çok dilli desteği sağlamak için GNU gettext çerçevesini kullanır. Kullanıcılara yönelik tüm metinleri belirli fonksiyonlar kullanarak paketlemeniz gerekir.

function myplugin_load_textdomain() {
    load_plugin_textdomain('myplugin', false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
add_action('plugins_loaded', 'myplugin_load_textdomain');

// 在代码中使用翻译函数
echo esc_html__('你好,世界!', 'myplugin');
$title = _x('Post', 'noun', 'myplugin');

Öncelikle,plugins_loadedMetin alanını eylem sırasında yükleyin. Daha sonra, çevrilmesi gereken metin dizelerinin bulunduğu yerlerde…__()Fonksiyon, çevrilmiş dizeyi alır veya kullanır._x()Poedit gibi araçlar kullanılarak çeviri işlemleri gerçekleştirilebilir..potŞablon dosyası, çevirmenlerin kullanımı için hazırlanmıştır..po.moÇeviri dosyası.

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.

Eklenti geliştirme işlemi tamamlandıktan sonra, yayınlanabilir bir sürüm oluşturmanız gerekmektedir. Bunun için şu adımları izleyin:readme.txtDosyanın formatı WordPress.org’un standartlarına uygun olmalıdır; bu dosya eklenti katalogu sayfasında kullanılacaktır. Ayrıca, eklentinin ekran görüntüleri ve simgelerini de hazırlayın.

Dağıtımdan önce, çeşitli PHP sürümleri, WordPress sürümleri ve farklı temalar altında temel işlevlerin test edilmesini içeren kapsamlı testler yapın. Otomatik test araçlarının kullanılmasını düşünebilirsiniz.

Yayınlandıktan sonra, bakım çalışmaları yeni başlamıştır. Kullanıcı geri bildirimlerine aktif olarak yanıt vermeniz, WordPress destek forumlarında soruları cevaplamanız ve eklentiyi düzenli olarak güncellemeniz gerekmektedir; bu sayede güvenlik açıkları giderilebilir, yeni özellikler eklenir veya eklentinin yeni WordPress sürümleriyle uyumluluğu sağlanır. Kullanıcılara her güncellemenin içeriğini açıkça bildiren güvenilir bir sürüm güncelleme kaydı oluşturun.

Özetle.

WordPress eklenti geliştirme, temel yapıyı anlamaktan başlayarak, hook sistemlerini kullanmaya, ileri düzey özellikler oluşturmaya ve güvenlik ile uluslararasılaştırma standartlarına sıkı sıkıya uymaya kadar ilerleyen bir süreçtir. Basit bir eklenti başlığı oluşturarak başlayan geliştiriciler, eylemleri (actions) ve filtreleri (filters) ustaca kullanmayı öğrenirler; ardından nesne yönelimli kod yazmayı ve verileri güvenli bir şekilde işlemeyi öğrenirler. Böylece güçlü, güvenli ve kolayca bakımı yapılabilecek eklentiler geliştirebilirler. Son olarak, uluslararasılaştırma ve standartlara uygun dağıtım sayesinde eklentileriniz dünya genelindeki kullanıcılara hizmet verebilir ve sürekli bakım ve güncellemelerle WordPress ekosisteminde uzun süre yer edinebilir. Bu tam süreci öğrenerek, “başlamaktan” “uzmanlaşmaya” doğru gerçekten ilerleyebilirsiniz.

Sıkça Sorulan Sorular.

WordPress eklentisi geliştirmek için hangi ön koşul bilgilerine ihtiyaç vardır?

PHP programlama diliyle ilgili temel bilgilere sahip olmanız gerekmektedir; çünkü WordPress ve eklentileri esas olarak PHP ile yazılmıştır. Ayrıca, HTML, CSS ve JavaScript konularında da temel bir bilgiye sahip olmanız, ön uç görünümünü ve etkileşimlerini yönetmeniz açısından faydalı olacaktır. En önemlisi, WordPress’in temel kavramlarına ve yapısına aşina olmanızdır; özellikle makaleler, sayfalar, kullanıcı rolleri ve en önemlisi de “hook” (kancalama) sistemi konularında.

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

Çatışmaları önlemenin en iyi yolu, tüm fonksiyonlarınızı, sınıflarınızı, değişkenlerinizi ve sabitlerinizi benzersiz bir önek kullanarak adlandırmaktır. Genellikle, eklentinizin adının kısaltması veya tam adı önek olarak kullanılması önerilir. Örneğin, eklentiniz “Super Gallery” adını taşıyorsa, şöyle bir önek kullanabilirsiniz:sg_super_gallery_SuperGallery_Bu tür önekler… Daha modern ve önerilen bir yaklaşım ise PHP ad alanlarını (PHP 5.3+ gerektirir) kullanmaktır veya tamamen nesne yönelimli programlama ile kodu sınıflar içinde paketlemektir.

Eklentim verileri nasıl depolamalı ve okumalı?

Basit ayar seçenekleri için WordPress Ayar API’si tercih edilmelidir.add_option()get_option()update_option()Bu fonksiyonlar, anahtar-değer çiftlerini depolamak için basit ve güvenli bir yol sunar. Makaleler, kullanıcılar veya yorumlarla ilgili veriler için `post meta`, `user meta` gibi özel meta verilerinin kullanılması düşünülebilir. Yalnızca çok sayıda, karmaşık ve ayrı ayrı sorgulanması gereken yapılandırılmış verileriniz varsa özel veritabanı tabloları oluşturmayı düşünmelisiniz; ayrıca veritabanı şemasındaki değişikliklerin kurulum ve yükseltme sırasında dikkatli bir şekilde yönetilmesi gerekir.

Eklentime nasıl bir ayarlar sayfası ekleyebilirim?

Eklentilere ayar sayfaları eklemek için genellikle aşağıdaki yöntemler kullanılır:add_menu_page()Üst düzey bir menü ekleyin veya bunu kullanın.add_submenu_page()Bir alt menü öğesi ekleyin. Daha sonra, sayfanın HTML içeriğini renderlemek için bir geri çağırma (callback) fonksiyonu yazmanız gerekecek. Formlar, alanlar ve doğrulamalar içeren ayar sayfalarını daha standart bir şekilde oluşturmak için WordPress, alan kaydı, güvenli olmayan doğrulamalar ve ayarların saklanması işlemlerini kolaylaştıran bir API (Settings API) sunar; bu da ayar sayfaları oluşturmak için önerilen bir yöntemdir.

Geliştirme işlemi tamamlandıktan sonra, eklentiyi WordPress resmi kataloğuna nasıl yayınlayabilirsiniz?

Öncelikle, WordPress.org üzerinden bir eklenti (plugin) için SVN deposu (repository) talebinde bulunmanız gerekiyor. Eklenti dosyalarınızı hazırlayın ve standartlara uygun olduğundan emin olun.readme.txtDosya. Daha sonra, kodu SVN aracılığıyla deposa gönderin./trunk/İçerik tablosu. Yayınlanan sürümde, stabil kod kopyalanır./tags/Katalog altında sürüm numarası ile adlandırılan alt kataloglarda (örneğin…)/tags/1.0.0Ve güncelleyin.trunkEklentinin ana dosyasının baş kısmındaki sürüm numarasıdır. WordPress.org bu bilgileri otomatik olarak okur ve eklenti dizinini günceller.