WordPress Eklenti Geliştirme Rehberi: Sıfırdan Başlayarak Profesyonel PHP Eklentileri Oluşturma

3 dakika okuma.
2026-03-13
2026-06-05
2,038
Aşağıdaki bağlantılar üzerinden alışveriş yaptığınızda, sizin için ek bir maliyet olmadan komisyon kazanıyorum.

WordPress eklentilerinin temel yapısı ve dosyaları

Bir standart WordPress eklentisinin en az bir ana dosyası olmalıdır. Bu ana dosya genellikle eklentinin adıyla adlandırılır, örneğin… my-first-plugin.phpBu dosyanın başında, WordPress sisteminine eklentinin meta bilgilerini bildirmek için belirli bir dosya başlığı yorumu bulunmalıdır. Bu bilgiler arasında eklentinin adı, açıklaması, sürümü, yazarı vb. yer alır ve bunlar arka plandaki “Eklentiler” yönetim sayfasında görüntülenir.

Ana dosyanın yanı sıra, iyi özelliklere sahip bir eklenti genellikle kodu düzenlemek için diğer klasörler ve dosyalar içerir. Yaygın klasör yapıları arasında CSS ve JavaScript dosyalarının saklandığı klasörler bulunur./assetsKatalog, PHP sınıf dosyalarını içermektedir./includesDizin ve kullanıcı arayüzü şablonları için kullanılanlar…/templatesİçindekiler. Bu modüler yapı, kodun bakımını ve takım çalışmasını kolaylaştırır.

Eklentinin ana dosyası, tüm eklenti işlevlerinin giriş noktasıdır. Meta bilgileri belirtmenin yanı sıra, ana görevleri arasında etkinleştirme/devre dışı bırakma işlemleri için gerekli mekanizmaların kaydı, gerekli bağımlılık dosyalarının dahil edilmesi ve eklentinin temel işlevlerinin başlatılması yer alır. Mantıklı bir dosya organizasyonu sayesinde, eklentinin işlevleri ne kadar karmaşık olursa olsun, açık ve anlaşılır bir yapıya sahip olması sağlanır.

Tavsiye edilen okuma WordPress Eklenti Geliştirme Başlangıç Kılavuzu

İlk temel eklentinizi oluşturun.

En basit “Hello World” eklentisini oluşturarak başlayalım; böylece eklentilerin nasıl oluşturulduğuna ve temel yaşam döngüsüne aşina olabiliriz.

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

Plugin bilgilerini ve ana fonksiyonu tanımlayın.

Öncelikle, yerel WordPress kurulum dizininizde…/wp-content/plugins/Yol üzerinde, “hello-world” adında bir yeni klasör oluşturun. Bu klasörün içinde, “” adında bir dosya oluşturun.hello-world.phpDosya.

Bu dosyanın başına, bir eklenti başlık bilgisi eklemeniz gerekiyor. Tipik bir eklenti başlığı aşağıdaki gibidir:

<?php
/**
 * Plugin Name:       你好世界示例插件
 * Plugin URI:        https://yourwebsite.com/hello-world
 * Description:       这是一个用于演示的简单WordPress插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://yourwebsite.com
 * License:           GPL v2 or later
 * Text Domain:       hello-world
 * Domain Path:       /languages
 */

Bundan sonra, bu eklentiye basit bir özellik ekleyeceğiz: Makale içeriğinin sonuna otomatik olarak bir metin parçası ekleyeceğiz. Bunu şu şekilde yapabiliriz:the_contentFiltrelemeyi gerçekleştirmek için, ana dosyanın baş kısmındaki bilgilerin ardından aşağıdaki kodu ekleyin:

function hello_world_add_footer_text( $content ) {
    // 仅在单篇文章页面添加
    if ( is_single() ) {
        $footer_text = '<p><em>Bu metin, “Hello World” eklentisi tarafından oluşturulmuştur.</em></p>';
        $content .= $footer_text;
    }
    return $content;
}
add_filter( 'the_content', 'hello_world_add_footer_text' );

Eklentilerin etkinleştirilmesi ve devre dışı bırakılması işlemleri

Profesyonel eklentiler, etkinleştirildiklerinde ve devre dışı bırakıldıklarında ilgili işlemleri doğru bir şekilde yürütmelidir. Örneğin, bir eklenti etkinleştirildiğinde veritabanı tabloları oluşturulması veya varsayılan ayarların belirlenmesi gerekebilir; devre dışı bırakıldığında ise geçici verilerin temizlenmesi gerekebilir. Biz de bu tür işlemleri gerçekleştirmek için uyregister_activation_hookregister_deactivation_hookİlgili kancaları (hooks) kaydetmek için bir fonksiyon kullanılır.

Tavsiye edilen okuma WordPress eklenti geliştirmeye yeni başlayanlar için kapsamlı bir rehber: özel işlevler oluşturma ve verimli genişletme.

Bu kodu ana dosyaya ekleyin:

// 插件激活时执行的操作
function hello_world_activate() {
    // 例如:添加一个选项到数据库
    if ( ! get_option( 'hello_world_installed' ) ) {
        add_option( 'hello_world_installed', time() );
    }
    // 可以在这里刷新固定链接规则,以确保新注册的URL结构生效
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'hello_world_activate' );

// 插件停用时执行的操作
function hello_world_deactivate() {
    // 例如:删除我们创建的临时选项(谨慎操作,用户数据通常不删除)
    // delete_option( 'hello_world_installed' );
    // 清理重写规则
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'hello_world_deactivate' );

Yukarıdaki adımları tamamladıktan sonra, WordPress arayüzünün “Eklentiler” sayfasında “Merhaba Dünya Örnek Eklentisi”ni görebilir ve etkinleştirebilirsiniz. Eklentiyi etkinleştirdikten sonra herhangi bir makaleye girdiğinizde, içeriğin alt kısmında eklenen metni göreceksiniz.

WordPress çekirdek API’sini kullanarak işlevselliği artırın.

WordPress, eklenti geliştiricilerinin çekirdek sistemle güvenli ve standart bir şekilde etkileşim kurmalarını sağlayan son derece zengin bir API sunar. Bu API’leri öğrenmek, profesyonel geliştirme çalışmaları için çok önemlidir.

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

Eylem kancaları ve filtreler kullanmak

Eylem Kancaları (Action Hooks), belirli zaman noktalarında kendi kodunuzu “ekleyip” çalıştırmanıza olanak tanır. Örneğin, bir makale yayınlandığında, WordPress bu olayı tetikler.save_postEylemler. Bunu şu yollarla gerçekleştirebilirsiniz:add_action()Fonksiyon, kendi fonksiyonunu bu “kancaya” (hook) monte eder.

function hello_world_on_post_publish( $post_id, $post, $update ) {
    // 检查是否不是修订版本,并且是发布操作
    if ( wp_is_post_revision( $post_id ) || $post->post_status != 'publish' ) {
        return;
    }
    // 发送邮件通知或执行其他逻辑
    // wp_mail( '[email protected]', '新文章已发布', '文章标题:' . $post->post_title );
}
add_action( 'save_post', 'hello_world_on_post_publish', 10, 3 );

Filtre kancaları (Filter Hooks), verileri değiştirmenize olanak tanır. Daha önce de belirtildiği gibi…the_contentBir örnek, tipik bir filtre uygulamasıdır. Başka bir yaygın örnek ise makale başlıklarını değiştirmektir.

function hello_world_modify_title( $title ) {
    return '【推荐】' . $title;
}
// add_filter( 'the_title', 'hello_world_modify_title' ); // 谨慎使用,这会修改所有标题

Yönetim menüsü ve seçenek sayfası oluşturun.

Birçok eklentinin ayarlarını yapılandırmak için bir arka plan arayüzüne ihtiyacı vardır. WordPress, yönetim paneline üst menü veya alt menüler eklemeyi kolaylaştıran fonksiyonlar sunar.

Tavsiye edilen okuma WordPress Eklenti Geliştirme Becerilerini Kazanın: Sıfırdan Başlayarak Verimli ve Özelleştirilebilir İşlev Modülleri Oluşturun

Aşağıdaki kod, basit bir seçenek sayfası nasıl eklenir ve bir seçeneğin WordPress ayarları API’si kullanılarak güvenli bir şekilde kaydedileceğini göstermektedir.

// 步骤1:向管理后台添加一个菜单项
function hello_world_add_admin_menu() {
    add_menu_page(
        '你好世界设置',       // 页面标题
        '你好世界插件',       // 菜单标题
        'manage_options',     // 所需权限
        'hello-world-settings', // 菜单slug
        'hello_world_settings_page', // 用于渲染页面的回调函数
        'dashicons-admin-generic', // 图标(可选)
        80                    // 菜单位置
    );
}
add_action( ‘admin_menu‘, ‘hello_world_add_admin_menu’ );

// 步骤2:定义设置页面的HTML内容
function hello_world_settings_page() {
    ?&gt;
    <div class="”wrap”">
        <h1>Hello World eklentisi ayarları</h1>
        <form method="”post”" action="/tr/”options.php”/" data-trp-original-action="”options.php”">
            <?php
                settings_fields( ‘hello_world_settings_group’ ); // 输出设置字段和非ce字段
                do_settings_sections( ‘hello-world-settings’ ); // 输出设置部分
                submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="tr"/></form>
    </div>
    &lt;?php
}

// 步骤3:注册设置、字段和章节
function hello_world_settings_init() {
    // 注册一个新的设置项到“hello_world_settings_group”组
    register_setting( ‘hello_world_settings_group’, ‘hello_world_custom_message’ );

// 在页面中新增一个章节
    add_settings_section(
        ‘hello_world_settings_section’,
        ‘自定义消息设置’,
        ‘hello_world_settings_section_callback’,
        ‘hello-world-settings‘
    );

// 向章节中添加一个字段
    add_settings_field(
        ‘hello_world_message_field’,
        ‘前台显示的消息’,
        ‘hello_world_message_field_render’,
        ‘hello-world-settings’,
        ‘hello_world_settings_section’
    );
}
add_action( ‘admin_init’, ‘hello_world_settings_init’ );

// 章节描述的回调函数
function hello_world_settings_section_callback() {
    echo ‘<p>Burada, eklentinin ön tarafta (frontend) göstereceği mesaj içeriğini yapılandırabilirsiniz.</p>’;
}

// 字段渲染的回调函数
function hello_world_message_field_render() {
    $option = get_option( ‘hello_world_custom_message’, ‘这是默认消息’ );
    echo ‘<input type="”text”" name="”hello_world_custom_message”" value="”‘" . esc_attr( $option ) ‘“ size ="”40”" />’;
}

Yukarıdaki kod sayesinde, WordPress standartlarına uygun ve verileri güvenli bir şekilde saklayabilen bir ayar sayfası arka planda oluşturmuş oldunuz.

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 Güvenliği, Performansı ve Yayın Hazırlığı

Eklentiyi başkalarıyla paylaşmadan veya resmi kataloga göndermeden önce, güvenli, verimli ve kullanımı kolay olduğundan emin olmak çok önemlidir.

Güvenlik en iyi uygulamalarına uyun.

Güvenlik, eklenti geliştirmenin en önemli önceliğidir. Temel ilke şudur: Kullanıcı girdilerine asla güvenmeyin. Kullanıcıdan veya harici kaynaklardan gelen tüm veriler…$_GET$_POST$_COOKIEVeritabanı sorgularında kullanılmadan, sayfalara gösterilmeden veya sistem komutları olarak çalıştırılmadan önce, her verinin doğrulanması, temizlenmesi veya uygun şekilde işlenmesi (örneğin: escape işlemi yapılması) gerekmektedir.

HTML içeriğine çıktı olarak verilecek veriler için, şu yöntemleri kullanabilirsiniz:esc_html()esc_attr()wp_kses_post()Bu fonksiyonlar, karakterlerin özel anlamlarını ortadan kaldırmak için kullanılır (yani “escape” işlemi yapılır).

`echo ‘`‘<div class="”“‘" . esc_attr( $user_provided_class ) ‘“>’`. esc_html($user_provided_content)`.‘</div>’;

Veritabanı sorguları için, değişkenleri asla doğrudan SQL ifadesine eklemeyin. Bunun yerine, değişkenleri uygun şekilde işleyip SQL ifadesine dahil etmelisiniz.$wpdb->prepare()Yöntem, ön işlemler için kullanılır.

global $wpdb;
$user_id = 123;
$query = $wpdb->prepare(
    “SELECT * FROM {$wpdb->prefix}my_table WHERE user_id = %d”,
    $user_id
);
$results = $wpdb->get_results( $query );

Ayrıca, tüm kullanıcıların erişebileceği geri çağırma fonksiyonları (ister ön uç AJAX ister arka uç işlemleri olsun), mutlaka şu kurallara uygun olmalıdır:current_user_can()check_ajax_referer()Bu fonksiyonlar, yetki ve güvenlik kontrolleri yapmak için kullanılır.

Eklentinin performansını optimize etmek.

Performansı düşük eklentiler, tüm web sitesinin kullanıcı deneyimini olumsuz etkileyebilir. Optimizasyon, birkaç farklı yönü ele alarak başlatılabilir: Önbelleği mantıklı bir şekilde kullanmak, her sayfa yüklendiğinde karmaşık veritabanı sorgularının veya uzak API çağrılarının yapılmasını önlemek. WordPress, anlık (transient) API’ler sunar.(Transients API)Geçici verileri kolayca saklamak için kullanılabilir.

// 尝试从缓存获取数据
$data = get_transient( ‘my_plugin_expensive_data’ );
if ( false === $data ) {
    // 缓存中没有,执行昂贵操作
    $data = expensive_database_query();
    // 将结果缓存12小时
    set_transient( ‘my_plugin_expensive_data’, $data, 12 * HOUR_IN_SECONDS );
}

İkincisi, CSS ve JavaScript dosyalarının yalnızca ihtiyaç duyulan sayfalarda yüklenmesini sağlayın. Bunu yapmak için…wp_enqueue_script()wp_enqueue_style()Fonksiyonlar, kaynakların yüklenmesini ve bağımlılık ilişkilerini hassas bir şekilde kontrol edebilir. Arka plan kaynakları için, bunları belirli bir yere monte edebilirsiniz.admin_enqueue_scriptsKancalar; ön uç kaynakları için, bunlar monte edilir.wp_enqueue_scriptsKanca.

Uluslararasılaştırma ve yayınlama için hazırlıklar yapın.

Eklentinin dünya genelindeki kullanıcılar tarafından kullanılabilmesi için uluslararasılaştırma (i18n) adımı kaçınılmazdır. Bu, tüm kullanıcıya yönelik metinlerin belirli fonksiyonlar kullanılarak sarılması gerektiği anlamına gelir.

“Plugin içindeki stringleri şu şekilden…”

echo “Hello World!”;

Değiştirilmiş hali:

echo __( ‘Hello World!’, ‘hello-world’ );

Bunların arasında‘hello-world’Bunu eklentinin başlık kısmında sen tanımladın.Text DomainDaha sonra, Poedit gibi araçları kullanarak içeriği dönüştürebilirsiniz..potŞablon dosyaları; çevirmenler, bu dosyalara dayanarak farklı dillerde içerikler oluşturabilirler..po.moDosyalar. Bu çeviri dosyalarını eklenti başlığına koyun.Domain PathBelirtilen katalog (örneğin…)/languagesAşağıya tıklayarak devam edebilirsiniz.

Yayınlamadan önce, lütfen mutlaka ayrıntılı bir belge hazırlayın.readme.txtDosyanın formatı, WordPress’in resmi gerekliliklerine uygun olmalıdır; içinde eklentinin açıklaması, kurulum adımları, sık karşılaşılan sorunlar vb. bilgiler bulunmalıdır. Bu, WordPress eklenti kataloğuna gönderilmesi için zorunlu bir şarttır. Aynı zamanda, eklenti koduna ayrıntılı PHP Doc açıklamaları eklemek, hem diğerlerinin kodunuzu anlamasına yardımcı olur hem de profesyonelliğinizin bir göstergesidir.

Özetle.

Bu makale, sıfırdan başlayarak profesyonel bir WordPress eklentisi geliştirmenin tam sürecini sistematik bir şekilde anlatmaktadır. Eklentilerin temel yapısını anlamakla başladık ve etkinleştirme/devre dışı bırakma mantığına sahip ilk basit eklentiyi kendimiz oluşturduk. Daha sonra, WordPress’in güçlü eylem (action) ve filtre (filter) sistemini derinlemesine inceledik ve bunları çekirdek sistemle nasıl entegre edebileceğimizi öğrendik; ayrıca standart bir yönetim ayar sayfası da oluşturduk. Son olarak, eklenti geliştirme sürecinde vazgeçilmez olan güvenlik kurallarını, performans optimizasyon yöntemlerini ve küresel çapta yayınlanmak üzere yapılan uluslararasılaştırma hazırlıklarını vurguladık. Bu temel bilgi ve becerilere sahip olursanız, güvenli, verimli ve kolayca bakımı yapılabilecek profesyonel seviyede WordPress eklentileri geliştirebilir ve kişisel ihtiyaçları karşılamaktan daha geniş bir kullanıcı kitlesine hizmet vermeye adım atabilirsiniz.

Sıkça Sorulan Sorular.

WordPress eklentisi geliştirmek için hangi temel bilgilere sahip olmak gerekiyor?

WordPress eklentisi geliştirmek için öncelikle sağlam bir PHP programlama temeline sahip olmanız gerekmektedir; çünkü eklenti kodlarının büyük bir kısmı PHP ile yazılmaktadır. Aynı zamanda, ön uç görünümünü ve etkileşimini yönetebilmek için HTML, CSS ve JavaScript konularında temel bilgilere sahip olmanız önemlidir. En önemlisi, WordPress’in temel kavramlarına aşina olmanız gerekmektedir; bunlar arasında Hook’lar (Kancalar), Kısa Kodlar (Shortcodes), Özelleştirilmiş Makale Türleri (Custom Post Types – CPT) ve veritabanı işlemleri yer almaktadır.$wpdbKullanımı.

Geliştirilmekte olan bir WordPress eklentisini nasıl hata ayıklarım?

Etkili bir hata ayıklama yöntemi, WordPress’in hata ayıklama özelliklerini etkinleştirmektir.WP_DEBUGBir model. Sizin için.wp-config.phpDosyada,define( ‘WP_DEBUG’, false );Değiştirin.define( ‘WP_DEBUG’, true );Ayrıca hepsini aynı anda da etkinleştirebilirsiniz.WP_DEBUG_LOGHataları bir günlük dosyasına kaydedin veya bunu etkinleştirin.WP_DEBUG_DISPLAYSayfada hatalar görüntülenir (yalnızca geliştirme ortamında). Ayrıca, tarayıcının geliştirici araçlarını (Console, Network sekmesi) kullanmak, ön uç JavaScript ve AJAX isteklerini hata ayıklamak için gereklidir.

Eklentim diğer eklentilerle nasıl uyumlu çalışır?

İyi bir uyumluluk sağlamanın anahtarı, WordPress kodlama standartlarına uymak ve global değişkenler ile fonksiyon adlarını dikkatli bir şekilde kullanmaktır. Eklentinizin fonksiyonlarına, sınıflarına ve sabitlerine benzersiz bir önek eklemek, ad çakışmalarını önlemenin en iyi yöntemidir; örneğin, şu şekilde yapabilirsiniz:myplugin_Veya geliştirici kısaltmaları bir önek olarak kullanılabilir. Diğer eklentilerle ilgili olabilecek içerikleri (örneğin makale içeriği, başlıklar) değiştirirken, filtre geri çağırma fonksiyonlarınızın uygun bir önceliğe sahip olduğundan emin olun.add_filterÜçüncü parametreyi dikkate alın ve döndürülen değerin formatına dikkat edin. Aynı zamanda, bunu makul bir şekilde kullanın.class_exists()function_exists()Bir sınıfın veya fonksiyonun tanımlanıp tanımlanmadığını kontrol etmek, koşullu yükleme işlemlerinin gerçekleştirilmesine veya alternatif çözümler sunulmasına olanak tanır.

Eklentiler geliştirmek için Nesne Yönelimli Programlama (OOP) bilgisine sahip olmak gerekiyor mu?

虽然使用传统的面向过程编程方式也可以开发功能完整的插件,但强烈推荐学习和使用面向对象编程(OOP)。OOP能够更好地组织代码,通过类(Class)来封装功能,提高代码的可复用性和可维护性。对于中大型插件项目,使用OOP结合命名空间(Namespaces)和自动加载(Autoloading)是行业内的标准做法,它能让你更清晰地区分不同模块,并显著降低代码的耦合度。