WordPress eklentileri, çekirdek işlevlerini genişletmenin temel yoludur. Eklentiler sayesinde, WordPress’in çekirdek kodunu değiştirmeden web sitenize sınırsız sayıda yeni özellik ekleyebilirsiniz. Eklenti geliştirme, güvenlik, performans ve sürdürülebilirlik açısından belirli kurallara ve en iyi uygulamalara uygun olarak yapılır. Standart bir eklentinin en az bir ana dosyası olmalıdır ve bu dosyanın adı genellikle eklentinin adıyla aynı olur. Örneğin: my-awesome-plugin.phpBu makale, temel kavramlardan başlayarak sizi adım adım eklenti geliştirme dünyasına götürecek.
Eklentilerin temel prensiplerini anlamak
WordPress eklentileri esasen bir veya daha fazla PHP dosyasından oluşur ve bu dosyalar belirli bir WordPress sitesinde saklanır. /wp-content/plugins/ Dizin içinde. Eklentiler, WordPress tarafından sağlanan API ve Hook (Kancalar) sistemi aracılığıyla çekirdek ile etkileşim kurar.
Hook sisteminin çalışma mekanizması
Kancalı sistem (Hook System), WordPress eklenti geliştirmenin temelini oluşturur. Geliştiriciler, WordPress’in varsayılan iş akışına “eklemeler” yapmak için esas olarak iki yöntem kullanırlar: Eylemler (Actions) ve Filtreler (Filters). Eylemler, belirli zaman noktalarında özelleştirilmiş kodları çalıştırmanıza olanak tanır; filtreler ise işlem sırasında iletilen verileri değiştirmenize imkan verir.
Tavsiye edilen okuma WordPress Eklenti Geliştirme: Başlangıçtan Uzmanlığa – Kendi Özel Özelliklerinizi Oluşturmayı Adım Adım Öğrenin。
Örneğin, kullanarak… add_action() Bir fonksiyon, bir eylem kancası (action hook) kaydedebilir. WordPress bu eylem noktasına ulaştığında, bağladığınız geri çağırma fonksiyonu (callback function) çalıştırılır.
Eklentinin standart dosya başlık bilgileri
Her eklentinin ana PHP dosyası, WordPress’e eklentinin meta bilgilerini sağlamak için standartlaştırılmış bir dosya başlığı yorum bloğu içermelidir. Bu bilgiler, eklentinin arka planda “Eklentiler” yönetim sayfasında nasıl görüntüleneceğini kontrol eder.
<?php
/**
* Plugin Name: 我的超级插件
* Plugin URI: https://www.example.com/my-super-plugin/
* Description: 这是一个用来演示插件开发基础的示例插件。
* Version: 1.0.0
* Author: 张三
* Author URI: https://www.example.com/
* License: GPL v2 or later
* Text Domain: my-super-plugin
*/ Eklentilerin yüklenmesi ve etkinleştirilmesi
Kullanıcılar bir eklentiyi WordPress arayüzünden aktive ettiklerinde, WordPress her sayfa yüklendiğinde eklentinin ana dosyasındaki kodu çalıştırır (tabii ki kod bir fonksiyonun içinde değilse veya koşullara bağlı olarak korunmuyorsa). Bu nedenle, tüm işlevsel kodların fonksiyonlar veya sınıflar içinde paketlenmesi ve yalnızca eklenti aktif olduğunda çalıştırılması için “hook” (bağlantı noktaları) kullanılması genellikle önerilir. Böylece, eklenti aktif olmadığında kodların çalışması engellenir.
İlk eklentinizi oluşturun
Hadi birlikte basit bir eklenti oluşturalım; bu eklentinin işlevi, web sitesindeki tüm makalelerin sonuna otomatik olarak bir telif hakkı bildirimi eklemektir.
Ana eklenti dosyasını oluşturun.
Öncelikle, /wp-content/plugins/ Bir dizin altında yeni bir klasör oluşturun ve buna bir ad verin. my-first-pluginArdından bu klasör içinde ana dosyayı oluşturun. my-first-plugin.phpVe yukarıda belirtilen standart dosya başlık bilgilerini de ekleyin.
Tavsiye edilen okuma WordPress Eklenti Geliştirme: Başlangıçtan Uzmanlığa – Yüksek Özelleştirilebilir İşlev Modülleri Oluşturmak İçin Kapsamlı Bir Rehber。
Makale içeriğini filtreler kullanarak değiştirin.
Kullanacağız. the_content Makalenin çıktısını değiştirmek için filtreler kullanılır. Ana dosyanıza aşağıdaki kodu ekleyin:
function myfp_add_copyright_to_content($content) {
// 确保只在文章主循环中、且非管理后台执行
if (is_single() && !is_admin()) {
$copyright_text = '<p><em>Bu metnin telif hakkı bu web sitesine aittir; yeniden yayımlanması durumunda kaynak belirtilmelidir.</em></p>';
$content .= $copyright_text;
}
return $content;
}
add_filter('the_content', 'myfp_add_copyright_to_content'); myfp_add_copyright_to_content Fonksiyon, bir parametre alır. $contentYani, makalenin içeriği. Koşullu ifade fonksiyonları aracılığıyla bunu yapıyoruz. is_single()Emin olun ki, bu içerik yalnızca tek bir makale sayfasına eklenir. !is_admin() Bu durum, arka plandaki düzenleyicide bu telif hakkı metninin görünmesini engeller.
Eklentilerin yerelleştirilmesi (Localization of plugins)
Eklentinin çok dilli olmasını sağlamak için uluslararasılaştırma (i18n) işlemleri yapılması gerekmektedir. Öncelikle, ana dosyanın baş kısmında gerekli ayarlar zaten yapılmıştır. Text Domain: my-first-pluginDaha sonra, eklenti başlatıldığında dil dosyaları yüklenir.
Genellikle, biz… plugins_loaded Eylemleri güvenli bir şekilde yüklemek ve çeviriyi gerçekleştirmek için kullanın. __() 或 _e() Tüm çevrilmeye ihtiyaç duyan metinleri kapsayacak `wait` gibi fonksiyonlar kullanın.
function myfp_load_textdomain() {
load_plugin_textdomain(
'my-first-plugin',
false,
dirname(plugin_basename(__FILE__)) . '/languages/'
);
}
add_action('plugins_loaded', 'myfp_load_textdomain'); Gelişmiş Eklenti Geliştirme Modu
Eklentilerin işlevleri karmaşıklaştığında, nesne yönelimli (OOP – Object-Oriented Programming) ve daha yapılandırılmış geliştirme modellerinin kullanılması, daha iyi bir organizasyon, kapsülleme ve sürdürülebilirlik sağlar.
Nesne yönelimli programlama kullanmak
Eklentinin tüm özelliklerini sınıflar kullanarak kapsamlamak akıllıca bir seçenektir. Bu, fonksiyon adı çakışmalarını önler ve net bir kod yapısı sağlar.
Tavsiye edilen okuma Derinlemesine Analiz: Sıfırdan Başlayarak WordPress Eklenti Geliştirmenin Temellerini ve Pratiklerini Öğrenin。
class My_Advanced_Plugin {
public function __construct() {
// 在构造函数中绑定所有钩子
add_action('wp_footer', array($this, 'add_footer_notice'));
add_filter('the_title', array($this, 'modify_post_title'));
}
public function add_footer_notice() {
echo '<p style="text-align:center;">Teknik destek, My Advanced Plugin tarafından sağlanmaktadır.</p>';
}
public function modify_post_title($title) {
if (in_the_loop()) {
return '📝 ' . $title;
}
return $title;
}
}
// 实例化插件类
new My_Advanced_Plugin(); Yönetim arayüzü ayarlar sayfası eklendi.
Birçok eklenti, kullanıcılara yapılandırma seçenekleri sunmayı gerektirir. WordPress arayüzünde ayar sayfaları eklemek genellikle belirli araçların kullanılmasını içerir. add_menu_page() 或 add_submenu_page() Bu fonksiyon, seçenekleri güvenli bir şekilde kaydetmek için Settings API’si ile birlikte kullanılır.
class My_Plugin_Settings {
public function __construct() {
add_action('admin_menu', array($this, 'add_admin_menu'));
add_action('admin_init', array($this, 'register_settings'));
}
public function add_admin_menu() {
add_options_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限
'my-plugin-settings', // 菜单别名
array($this, 'render_settings_page') // 回调函数
);
}
public function render_settings_page() {
?>
<div class="wrap">
<h1>Eklenti ayarlarım.</h1>
<form method="post" action="/tr/options.php/" data-trp-original-action="options.php">
<?php
settings_fields('my_plugin_options_group');
do_settings_sections('my-plugin-settings');
submit_button();
?>
<input type="hidden" name="trp-form-language" value="tr"/></form>
</div>
<?php
}
public function register_settings() {
register_setting('my_plugin_options_group', 'my_plugin_option_name');
// ... 添加设置字段和章节
}
} Özel bir veritabanı tablosu oluşturun.
Bazı karmaşık verileri depolamaya ihtiyaç duyan eklentiler için özel veri tabloları oluşturulması gerekebilir. Bu işlem, eklentinin etkinleştirildiği sırada tamamlanmalıdır.
WordPress, veritabanı işlemleri için kullanışlı bir sınıf sunar. wpdbTablo oluşturma kodu genellikle, bir `CREATE TABLE` komutu aracılığıyla yer alır. register_activation_hook Kayıtlı fonksiyonlar arasında.
function my_plugin_create_database_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'my_custom_data';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
user_id mediumint(9) NOT NULL,
data text 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);
}
register_activation_hook(__FILE__, 'my_plugin_create_database_table'); Eklentilerin Güvenliği ve Dağıtımı
Eklentinin piyasaya sürülmeden önce, güvenliğinden emin olunmalı ve dağıtım sürecinin temel adımları anlaşılmalıdır.
Güvenlik en iyi uygulamalarını hayata geçirin.
Kullanıcılardan alınan tüm veriler, ister hangi kaynaktan gelirse gelsin… $_GET、$_POST Yine de veritabanları söz konusu olduğunda, tüm verilerin doğrulanması, temizlenmesi ve uygun şekilde işlenmesi gerekmektedir. Her zaman WordPress tarafından sağlanan fonksiyonları kullanın. esc_html()、wp_strip_all_tags()、intval() çok prepare() SQL sorgularını işlemek için yöntemler, XSS ve SQL enjeksiyon saldırılarını önlemek amacıyla kullanılır.
Yönetici veya kritik işlemleri gerçekleştirme yeteneğinin kontrolü için, mutlaka yetenek kontrolü fonksiyonlarını kullanın. Örneğin: current_user_can('manage_options') 或 check_ajax_referer()。
Eklentiyi resmi kataloga göndermeye hazırlıyorum.
Eğer eklentiyi tüm dünyadaki kullanıcılara ücretsiz olarak dağıtmak istiyorsanız, bunu WordPress.org eklenti kataloğuna gönderebilirsiniz. Bunun için bazı standartlara sıkı sıkıya uymanız gerekmektedir; bunlar arasında SVN kullanarak sürüm kontrolü yapmak, kod kalitesini sağlamak ve çeviri dosyaları sunmak yer alır. İyi bir eklenti… readme.txt Bu dosya zorunludur ve eklenti detay sayfasında bilgilerin görüntülenmesi için kullanılan belirli bir formata uygundur.
Özetle.
WordPress eklenti geliştirme, temel hook sistemini anlamakla başlayan ve ardından işlevlerin oluşturulması, arka uç yönetimi, veri işleme ve güvenlik ile dağıtım konularına odaklanılan bir süreçtir. Yeni başlayanlar, basit filtreler içeren bir eklenti oluşturarak başlamalı; daha sonra nesne yönelimli programlama, ayar sayfaları eklemek ve özel veritabanı tablolarını yönetmek gibi konuları denemelidirler. Güvenliğin geliştirmenin en önemli unsuru olduğunu unutmayın; WordPress’in sunduğu birçok güvenlik fonksiyonunu ustaca kullanmak, güvenilir eklentiler yazmanın anahtarıdır. Geliştirme standartlarına ve en iyi uygulamalara uyum sağlamak, eklentinizin sadece kolayca bakım yapılabilir olmasını sağlamakla kalmaz, aynı zamanda gelecekte resmi kataloglara veya pazarlara yayınlanması için de temel oluşturur.
Sıkça Sorulan Sorular.
Bir eklentinin en az kaç dosyaya ihtiyacı vardır?
Bir eklentinin en azından bir PHP dosyasına ihtiyacı vardır. Yeter ki bu dosya doğru eklenti başlık bilgilerini içersin ve uygun bir yerde saklansın. /wp-content/plugins/ WordPress, belgenin bulunduğu klasörü veya alt klasörleri tanıyabilir ve içeriği yükleyebilir.
Elbette, işlevlerin karmaşıklaşmasıyla birlikte, kodu birden fazla dosyaya (örneğin JavaScript, CSS, ayrı PHP sınıf dosyaları vb.) bölmek daha iyi bir organizasyon yöntemidir.
WordPress eklentilerindeki “hook’lar” (kancalar) ve “filtreler” (filtreler) arasındaki fark nedir?
Action Hook’lar ve Filter Hook’lar bazen “Hook’lar” olarak adlandırılsa da, kullanım amaçları farklıdır.
Eylem kancaları (Action Hooks), WordPress’in belirli yaşam döngüsü noktalarında kendi özelleştirdiğiniz bir kod parçasını “eklemenize” olanak tanır. Geri dönüş değeri beklenmez; yalnızca bir işlem yapılır (örneğin, e-posta göndermek, günlük kaydı yapmak vb.). Temel fonksiyonlar şunlardır: add_action() 和 do_action()。
Filtre hook’ları, belirli bir değişkenin (genellikle bir dize veya dizi) değerini “değiştirmenize” olanak tanır. Bu hook’lar, geri çağırma fonksiyonunuzdan değiştirilmiş bir değer dönmesini bekler. Temel fonksiyon şudur: add_filter() 和 apply_filters()。
Basitçe söylemek gerekirse: “Eylem”, bir şey yapmak anlamına gelir; “Filtre” ise verileri değiştirmek anlamına gelir.
Eklenti fonksiyon adlarının temalarla veya diğer eklentilerle çakışmasını nasıl önleyebilirim?
En iyi yöntem, nesne yönelimli programlama kullanmaktır ve tüm işlevlerinizi bir sınıf içinde kapsamlamaktır. Böylece, yalnızca sınıf adları ve metot adlarının benzersiz olması gerekmektedir.
Eğer prosedürel programlama kullanılıyorsa, tüm fonksiyon adlarınıza, sabit adlarınıza ve global değişken adlarınıza benzersiz ve yüksek tanınırlığa sahip bir önek eklemelisiniz. Genellikle eklentinin adı veya bir kısaltma önek olarak kullanılır. Örneğin, eklentiniz “Super Tool” ise, fonksiyon adları şu şekilde olabilir: stool_get_data()、stool_OPTION_KEY İşte böyle.
Daha kapsamlı bir başka yöntem, PHP ad alanlarını (namespace’leri) kullanmaktır; bu, kodunuzu en etkili şekilde izole etmenizi sağlar.
Eklenti geliştirme sürecinde, kullanıcıların ayarlarını ve seçeneklerini nasıl yönetebiliriz?
WordPress, eklentilerin ayarlarını yönetmek için Settings API’sini kullanmayı şiddetle tavsiye eder. Bu API, ayarların güvenli bir şekilde saklanmasını sağlar. wp_options Tablolarda, CE doğrulamasının yapılmaması, alanların renderlanması ve formların gönderilmesi, güvenli ve standartlaştırılmış bir yöntemdir.
Ana adımlar şunları içerir: Kullanım register_setting() Bir seçenek grubu kaydedin ve kullanın. add_settings_section() 和 add_settings_field() Ayar bölgesi ve alanları ekleyin; ardından bunları ön tarafta (frontend) kullanın. settings_fields() 和 do_settings_sections() Böylece tam bir ayar formu oluşturulur. Seçenekleri kaydederken, lütfen... update_option() İşlev.
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.
- WordPress Eklenti Geliştirme Kılavuzu: Sıfırdan Başlayarak İlk Özel Eklentinizi Oluşturun
- WordPress Eklenti Geliştiricisi Olmak: Sıfırdan Bir’e Kapsamlı Rehber
- WordPress Eklenti Geliştirme Kılavuzu: Başlangıçtan Uzmanlığa Kadar Profesyonel Eklentiler Oluşturma
- WordPress Eklenti Geliştirme: Başlangıçtan Uzmanlığa – İlk Özel Eklentinizi Oluşturun
- Sıfırdan Bir: İlk WordPress Eklentinizi Adım Adım Geliştirmek İçin Kapsamlı Rehber