WordPress eklenti geliştirmeyi öğrenmek, WordPress’in özelliklerini genişletmek isteyen her geliştiricinin kat etmesi gereken bir süreçtir. Özel eklentiler oluşturarak, web sitenize benzersiz özellikler ve iş akışları ekleyebilir, özelliklerin nasıl gerçekleştirileceğinin tüm ayrıntılarını tamamen kontrol altına alabilirsiniz; temalara veya başkalarının kodlarına bağlı kalmadan. Bu rehber, sıfırdan başlayarak eklenti geliştirmenin temel kavramlarını ve en iyi uygulamalarını sistematik bir şekilde açıklayacak ve sonunda öğrendiklerinizi bir pratik proje ile pekiştirecektir.
WordPress Eklentileri Temelleri ve Yapısı
Bir WordPress eklentisi, esasen bir veya daha fazla PHP dosyasından oluşur ve belirli bir WordPress sitesinde çalışmak üzere tasarlanmıştır. Bu dosyalar, genellikle `wp-content/plugins` dizininde bulunur./wp-content/plugins/Katalogda, WordPress’un içeriği tanıyıp yükleyebilmesi için belirli bir yapıya uyulur. Bu temelleri anlamak, stabil eklentiler oluşturmanın ilk adımıdır.
Eklentinin temel dosya yapısı
Eklentilerin başlangıç noktası genellikle, eklentinin adıyla aynı adı taşıyan bir PHP dosyasıdır. Örneğin, “My First Plugin” adlı bir eklentinin ana dosyası “my_first_plugin.php” olarak adlandırılabilir.my-first-plugin.phpBu dosyanın başında, bir WordPress eklentisinin meta verilerini (adı, açıklaması, sürümü, yazarı vb.) tanımasını sağlayan standart bir eklenti başlık bilgisi yorum bloğu bulunmalıdır.
Tavsiye edilen okuma WordPress Eklenti Geliştirme İleri Seviye Rehberi: Sıfırdan Profesyonel Seviye Eklentiler Oluşturmak。
İşte en temel bir eklenti ana dosyası örneği:
<?php
/**
* Plugin Name: My First Plugin
* Plugin URI: https://yourwebsite.com/my-first-plugin
* Description: 这是一个简单的自定义插件,用于演示基础结构。
* Version: 1.0.0
* Author: Your Name
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/
// 防止直接访问文件
if ( ! defined( 'ABSPATH' ) ) {
exit;
} Bu kod bloğu, eklentinin WordPress arka planındaki eklentiler listesinde nasıl görüntüleneceğine dair bilgileri tanımlar.Text DomainUluslararasılaştırma (i18n – Internationalization) için kullanılır.if ( ! defined( 'ABSPATH' ) )Bu ifade, kullanıcıların bu güvenli dosyaya doğrudan URL aracılığıyla erişmesini engelleyen bir güvenlik önlemidir.
Eklentilerin kapsamını (scope) ve yaşam döngüsünü (lifecycle) anlamak önemlidir.
Eklentiyi aktive ettiğinizde, ana dosyası WordPress’in başlatılma sürecinin erken aşamalarında yüklenir. Bu, WordPress’in temel fonksiyonlarına ve sınıflarına genel bir kapsamda (global scope) erişebileceğiniz anlamına gelir. Eklentinin kodu her sayfa isteğiyle birlikte çalıştırılır; bu nedenle performans konusunda dikkatli olmanız ve her istekte zaman alıcı işlemlerden kaçınmanız gerekir.
İyi bir uygulama, işlevsel kodu sınıflar veya fonksiyonlar içinde kapsamlamak ve bunları WordPress’in kancalama sistemi (Hooks) aracılığıyla belirli zamanlarda tetiklemektir; bunun yerine kodu doğrudan dosyanın genel (global) kapsamında çalıştırmamaktır. Bu, kodun ihtiyaç duyulduğunda çalışmasını sağlar, verimliliği ve kontrol edilebilirliği artırır.
Temel Geliştirme İlkesi: Hook’lar ve Filtreler
WordPress eklenti geliştirmenin temel felsefesi “Kancalar” (Hooks)dır. Kancalar mekanizması, eklentilerinizin belirli zaman noktalarında WordPress’in temel işleyiş sürecine dahil olmasına olanak tanır; böylece temel dosyaları değiştirmeden işlevler ekleyebilir veya mevcut işlevleri değiştirebilirsiniz. Kancalar esas olarak iki türe ayrılır: Eylemler (Actions) ve Filtreler (Filters).
Tavsiye edilen okuma WordPress Performans Optimizasyonunu Öğrenin: Temelden İleri Seviyeye Kadar Kapsamlı Bir Rehber。
Action Hook’ların Kullanımı
Eylem kancaları, WordPress’in belirli bir noktasında ek kod eklemenize olanak tanır. Örneğin, bir makale yayınlandığında veya yönetim arayüzü menüsü başlatıldığında. Eylem kancalarını kullanmak için…add_action()İşlev.
Diyelim ki bir makaleyi yayınladığınızda yöneticiye bir e-posta göndermek istiyorsunuz, şöyle yazabilirsiniz:
function myplugin_on_publish_post( $post_id ) {
$post = get_post( $post_id );
$admin_email = get_option( 'admin_email' );
wp_mail( $admin_email, '新文章已发布', '文章“' . $post->post_title . '”刚刚发布。' );
}
add_action( 'publish_post', 'myplugin_on_publish_post' ); Bu örnekte,publish_postBu, bir eylem kancasıdır. Makalenin durumu “Yayınlandı”ya dönüştüğünde, WordPress bu kancayı tetikler ve bizim bağladığımız işlemleri gerçekleştirir.myplugin_on_publish_postİşlev.
Filtre kancalarının (filter hooks) uygulaması
Filtre kancaları, verileri değiştirmek için kullanılır. Veriler kullanılmadan önce (örneğin veritabanına kaydedilmeden veya bir sayfada gösterilmeden önce), WordPress verileri filtreler aracılığıyla iletir. Eklentiniz bu verileri yakalayabilir, değiştirdikten sonra tekrar geri gönderebilir. Bunun için belirli bir yapıyı kullanmanız gerekir.add_filter()İşlev.
Klasik bir örnek, bir makalenin son kısmını değiştirerek otomatik olarak bir telif hakkı bildirimi eklemektir:
function myplugin_add_copyright_to_content( $content ) {
if ( is_single() ) {
$copyright_text = '<p><small>© 2026 Tüm hakları saklıdır.</small></p>';
$content .= $copyright_text;
}
return $content;
}
add_filter('the_content', 'myplugin_add_copyright_to_content'); Burada,the_contentBu, makale içeriğini geçiren bir filtre kancasıdır.$contentFonksiyonumuz bir içerik alır, üzerine bir metin parçası ekler ve ardından değiştirilmiş içeriği geri döndürür.
Tavsiye edilen okuma Sıfırdan Başlayarak: WordPress Tema Geliştirmenin Temel Mimarisi。
Eklenti seçenekleri ve veri depolama
Çoğu eklentinin kullanıcı ayarlarını veya verilerini saklaması gerekmektedir. WordPress, bunu gerçekleştirmek için çeşitli yöntemler sunar: Seçenek API’si, basit anahtar-değer çiftlerini saklamak için kullanılır; Ayar API’si, standartlaştırılmış arka plan seçenek sayfaları oluşturmak için kullanılır; özel veritabanı tabloları ise daha karmaşık ilişkisel verileri saklamak için kullanılır.
Seçenekleri ve ayarları kullanmak için API’yi kullanın.
Eklenti yapılandırmaları için en yaygın kullanılan yöntem, seçenek API’sidir. Bunu kullanabilirsiniz.add_option()、get_option()和update_option()Verileri yönetmek için kullanılır.
Ancak, daha profesyonel bir yaklaşım, API ayarlarını kullanmaktır; bu API, seçenek sayfasındaki formların oluşturulması, güvenlik doğrulaması (Nonce) ve veri kaydı gibi karmaşık işlemleri sizin yerinize yapar. Kullanmanız gerekmektedir.register_setting()、add_settings_section()和add_settings_field()WordPress arka plan stiline uygun bir ayar sayfası oluşturmak için `get_settings()` gibi fonksiyonları kullanın.
Özel bir veritabanı tablosu oluşturun.
Büyük miktarda yapılandırılmış verinin (örneğin siparişler, form gönderim kayıtları) saklanması gerektiğinde, özel veritabanı tabloları oluşturmak gereklidir. Bu işlem genellikle bir eklenti etkinleştirildiğinde gerçekleştirilir.dbDelta()Bu fonksiyon, tablo yapısını güvenli bir şekilde oluşturmak veya güncellemek için kullanılır.
Bu nedenle, tablo oluşturma kodunu şu yere monte etmeniz gerekiyor:register_activation_hookBu özel kancada bulunuyor. Bu, bir eylem kancasıdır ve yalnızca eklentiniz etkinleştirildiğinde bir kez çalışır.
register_activation_hook( __FILE__, 'myplugin_create_custom_table' );
function myplugin_create_custom_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'myplugin_data';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name varchar(100) NOT NULL,
email varchar(100) NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
} Gerçek Proje: Basit bir Görev Listesi Eklentisi Oluşturma
Şimdi bu bilgileri bir araya getirerek basit bir arka plan görev listesi eklentisi oluşturalım. Bu eklenti, WordPress arka planına bir menü öğesi ekleyecek ve yöneticilerin görevleri eklemesine, görmesine ve tamamlandıklarını işaretlemesine olanak tanıyacaktır.
Bir eklenti ana dosyası ve menüsü oluşturun.
Öncelikle, eklentinin ana dosyasını oluşturun.wp-todo-list.phpAyrıca eklentinin başlık bilgilerini de ekleyin. Daha sonra, bunu kullanın.add_action( ‘admin_menu’, … )Bir yönetim menüsü sayfası eklemek için bir “kancaya” (hook) ihtiyacınız var.
// 在插件主文件中
function mytodo_add_admin_menu() {
add_menu_page(
'待办事项', // 页面标题
'待办事项', // 菜单标题
'manage_options', // 权限
'wp-todo-list', // 菜单slug
'mytodo_display_page', // 显示页面的回调函数
'dashicons-editor-ul', // 图标
6 // 位置
);
}
add_action( 'admin_menu', 'mytodo_add_admin_menu' );
// 显示页面的回调函数
function mytodo_display_page() {
// 页面HTML和逻辑将在这里处理
echo '<div class="wrap"><h1>Benim yapılacak işlerim</h1></div>';
} Veri ekleme ve gösterme işlevlerini gerçekleştirme
Yeni bir görev eklemek için bir form ve bu görevleri göstermek için bir liste gerekiyor. Basitlik adına, bir görev dizisini saklamak için seçenek API’sini (option API) kullanacağız.mytodo_display_page()Fonksiyonda, form gönderimlerini işliyoruz ve verileri seçeneklere kaydediyoruz.
function mytodo_display_page() {
echo '<div class="wrap"><h1>Benim yapılacak işlerim</h1>';
// 处理表单提交
if ( isset( $_POST['new_todo'] ) && ! empty( $_POST['new_todo'] ) ) {
$todos = get_option( 'mytodo_list', array() );
$new_todo = sanitize_text_field( $_POST['new_todo'] );
$todos[] = array( 'task' => $new_todo, 'done' => false );
update_option( 'mytodo_list', $todos );
}
// 显示表单
echo '<form method="POST" action="">'echo '<input type="text" name="new_todo" placeholder="Yeni bir görev girin….">'echo '<input type="submit" value="Ekle" class="button button-primary">'echo '<input type="hidden" name="trp-form-language" value="tr"/></form>';
// 显示列表
$todos = get_option( 'mytodo_list', array() );
if ( ! empty( $todos ) ) {
echo '<ul style="margin-top: 20px;">';
foreach ( $todos as $index => $todo_item ) {
$status = $todo_item['done'] ? '(已完成)' : '(待办)';
echo '<li>'`. esc_html($todo_item['task'])`. `'`. $status`. `'</li>';
}
echo '</ul>';
}
echo '</div>';
} Bu basit örnek, eklenti geliştirmenin temel sürecini göstermektedir: Yönetim arayüzü oluşturma, kullanıcı girdilerini işleme, verileri güvenli bir şekilde depolama ve geri çağırma. Gerçek geliştirme sürecinde ayrıca görevleri tamamlama, görevleri silme, AJAX işlemleri yapma ve daha gelişmiş güvenlik doğrulamaları (örneğin Nonce) ile yetki kontrolü eklemeniz gerekecektir.
Özetle.
WordPress eklenti geliştirme, yaratıcılığı somut işlevlere dönüştürme sürecidir ve temelinde, hook (kancalama) sistemini anlamak ve ustaca kullanmak yatar. Net bir şekilde tanımlanmış eklenti dosya yapısından başlayarak, eylem (action) ve filtre (filter) hook’larını kullanarak WordPress iş akışına hassas bir şekilde müdahale eder, verileri seçenek API’si veya özel tablolar aracılığıyla yönetir ve sonunda işlevsel ve kullanıcı dostu bir eklenti oluşturursunuz. Güvenlik ve performans konusundaki en iyi uygulamalara uyarak, geliştirdiğiniz eklenti sayısız WordPress sitesine stabil ve verimli bir şekilde hizmet verebilir.
Sıkça Sorulan Sorular.
WordPress eklentisi geliştirmek için hangi ön koşul bilgilerine ihtiyaç vardır?
Sağlam bir PHP programlama temeline sahip olmanız gerekmektedir; HTML, CSS ve JavaScript (özellikle jQuery) konularına hakim olmanız da oldukça faydalı olacaktır. Nesne yönelimli programlama (OOP) kavramlarına aşina olmak, eklenti kodlarınızın daha net ve daha kolay bakım yapılabilir hale gelmesini sağlayacaktır. Elbette, WordPress’in temel işleyiş süreçlerini anlamanız da şarttır.
Geliştirdiğim eklentinin güvenli olduğundan nasıl emin olabilirim?
Güvenlik, eklenti geliştirmede en önemli husustur. Kullanıcı girdilerini her zaman doğrulayın ve temizleyin; bunun için uygun yöntemleri kullanın.sanitize_text_field()、esc_html()、wp_kses()WordPress tarafından sağlanan fonksiyonları kullanın. Form işlemleri sırasında, CSRF (Cross-Site Request Forgery) saldırılarını önlemek için WordPress’in nonce (tek sefer kullanılan sayı) mekanizmasını mutlaka kullanın. Veritabanı işlemleri için ise…$wpdbSınıflar ve hazırlık ifadeleri (Classes and their preparation statements)prepare()SQL enjeksiyonlarını önlemek için belirli yöntemler kullanılmalıdır. Unutmayın, bu yöntemleri mutlaka uygulayın.current_user_can()Yetenek kontrolü yapılır.
Eklentilerde uluslararasılaştırma (i18n) nasıl gerçekleştirilmelidir?
WordPress, uluslararasılaştırma (internationalization) işlemlerini GNU gettext teknolojisi kullanarak gerçekleştirir. Eklentinizin metin alanlarında (eklentinin baş kısmında tanımlanmış olan alanlarda), çevrilmesi gereken tüm metinleri belirli bir format kullanarak yerleştirmelisiniz.()或_e()Fonksiyon kapsüllemesi. Örneğin:echo ( ‘Hello World’, ‘my-plugin-textdomain’ )Daha sonra, Poedit gibi bir araç kullanarak bunu oluşturun..potŞablon dosyaları; çevirmenler, buna karşılık gelen dosyaları oluşturabilirler..po和.moDil dosyaları… Dil dosyalarını eklentinin içine koyun./languages/Kataloğun altında olabilir.
Eklentimi nasıl hata ayıklamalı ve test etmeliyim?
Öncelikle, emin olun ki sizin…wp-config.phpDosyada bu özellik etkinleştirilmiştir.WP_DEBUG和WP_DEBUG_LOGBu, hata bilgilerini kaydedecektir./wp-content/debug.logDosyada. Kullanın.error_log()Fonksiyon, özelleştirilmiş hata ayıklama bilgileri çıkarır. PHP kodu için Xdebug gibi profesyonel araçlar kullanılabilir. Ayrıca, yayınlamadan önce farklı PHP sürümleri (örneğin 7.4, 8.0, 8.1) ve WordPress sürümlerinde uyumluluk testleri yapmak çok önemlidir; ayrıca eklentinizin yaygın olarak kullanılan temalar veya diğer eklentilerle çakışmamasına dikkat edin.
Bir sonraki adım, bundan sonra ne yapmalıyım?
Daha fazla okuma ve pratik bilgiler.
Aşağıdaki içerikler bu makalenin konusuyla ilgilidir ve daha fazla okumak için uygundur. Öncelikle mevcut sorununuza en yakın makaleden başlayın, sonra çevresel konulara doğru ilerleyin, genellikle daha iyi sonuçlar alırsınız.
- Neden bir çevrimiçi mağaza oluşturmak için WooCommerce kullanmalıyız?
- Neden WordPress’ü seçmelisiniz: Açık kaynaklı bir içerik yönetim sisteminin (CMS) on temel avantajı
- WooCommerce’u On Dakikada Öğrenin: Başlangıçtan Karlı Bir E-Ticaret Sitesi Kurmaya
- WooCommerce Kapsamlı Kılavuzu: Kurulumdan Canlıya, İleri Düzey E-Ticaret Ayarlarına Kadar
- WordPress nedir? Kapsamlı bir içerik yönetim sistemi tanıtımı