WordPress eklentilerinin temel yapısı ve oluşturulması
Bir WordPress eklentisi geliştirmek, basit bir PHP dosyasıyla başlar. Bu ana dosya, WordPress’in dosyayı tanıyabilmesi ve bir eklenti olarak yönetebilmesi için belirli dosya başlığı yorumlarını içermelidir. En temel eklentiler bile yalnızca bir dosyadan oluşabilir. my-first-plugin.php。
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于演示的简单WordPress插件。
* Version: 1.0.0
* Author: 开发者姓名
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ Dosya başlığındaki yorumlarda “Plugin Name” (Eklenti Adı) zorunludur; diğer bilgiler ise isteğe bağlıdır. Eklenti etkinleştirildikten sonra, işlevleri uygun zamanlarda PHP fonksiyonlarını çalıştırarak gerçekleştirilir. En yaygın kullanılan yöntemlerden biri “eylem kancaları” (action hooks)’dır. Örneğin, bir web sayfasının alt kısmına bir metin parçası eklemek istiyorsanız, bunu “eylem kancaları” aracılığıyla yapabilirsiniz. wp_footer Kanca.
// 在页脚输出自定义内容
function myplugin_add_footer_text() {
echo '<p style="text-align:center;">Eklentimi kullandığın için teşekkür ederim!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); add_action Bu, WordPress’in çekirdek bir fonksiyonudur ve özel fonksiyonları belirtilen eylem kancalarına (action hooks) bağlamak için kullanılır. Eklenti dizinlerinin genellikle şu yere konulması önerilir: /wp-content/plugins/your-plugin-name/ Aşağıda, ana dosyanın yanı sıra CSS, JavaScript, resimler gibi kaynak dosyaları da bulunabilir.
Tavsiye edilen okuma WordPress Temaları İçin Nihai Kılavuz: Seçimden Özelleştirmeye ve Geliştirmeye Kadar Kapsamlı Bir Rehber。
Bir eklentiye nasıl yönetim menüsü eklenir?
Eklentinin WordPress arayüzünde bir ayar sayfasına sahip olabilmesi için, ona bir yönetim menüsü eklemeniz gerekmektedir. Bu genellikle aşağıdaki adımlarla yapılır: admin_menu Eylemler, eylem kancaları (action hooks) aracılığıyla gerçekleştirilir.
Core Functions add_menu_page Arka planda, kenar çubuğuna bir üst düzey menü öğesi ve bununla ilgili ayar sayfası eklemek için kullanılır.
function myplugin_add_admin_menu() {
add_menu_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限
'myplugin-settings', // 菜单slug
'myplugin_settings_page', // 显示页面的回调函数
'dashicons-admin-generic', // 图标(可选)
6 // 菜单位置(可选)
);
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );
// 设置页面的HTML内容
function myplugin_settings_page() {
?>
<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' ); // 输出安全字段
do_settings_sections( 'myplugin-settings' ); // 输出设置区域
submit_button(); // 输出提交按钮
?>
<input type="hidden" name="trp-form-language" value="tr"/></form>
</div>
<?php
} Menü oluşturulduktan sonra, bir sonraki adım WordPress’in ayar API’sini kullanarak belirli yapılandırılabilir seçenekleri tanımlamaktır.
Eklenti ayarlarını kaydetmek için ayar API’sini kullanın.
Form gönderimlerini ve güvenlik doğrulamalarını manuel olarak işlemek hem zaman alıcıdır hem de hatalara açıktır. WordPress’in ayar API’si, ayarları kaydetmek, görüntülemek ve yönetmek için standartlaştırılmış bir yöntem sunar. Bu işlem esas olarak üç fonksiyonu içerir:register_setting, add_settings_section 和 add_settings_field。
Aşağıdaki örnek, bir seçenek grubunun nasıl kaydedileceğini ve bir metin alanının nasıl ekleneceğini göstermektedir.
Tavsiye edilen okuma WordPress web sitesi performans optimizasyonu rehberi: Detaylı analiz ve uygulamalı stratejiler.。
function myplugin_settings_init() {
// 注册一个新的设置项到数据库 `wp_options` 表中
register_setting( 'myplugin_options', 'myplugin_settings' );
// 在设置页面添加一个新的区域
add_settings_section(
'myplugin_section_basic', // 区域ID
'基础设置', // 区域标题
'myplugin_section_callback', // 区域说明的回调函数
'myplugin-settings' // 对应的页面slug
);
// 在区域中添加一个字段
add_settings_field(
'myplugin_field_text', // 字段ID
'示例文本', // 字段标题
'myplugin_field_text_cb', // 字段HTML输出的回调函数
'myplugin-settings', // 页面slug
'myplugin_section_basic' // 区域ID
);
}
add_action( 'admin_init', 'myplugin_settings_init' );
// 区域说明的回调函数
function myplugin_section_callback() {
echo '<p>Burada eklentilerin temel ayarlarını yapabileceğiniz bölüm bulunmaktadır.</p>';
}
// 文本字段的回调函数
function myplugin_field_text_cb() {
// 从数据库中获取之前保存的设置值
$options = get_option( 'myplugin_settings' );
$value = $options['myplugin_field_text'] ?? ''; // 使用空合并运算符提供默认值
// 输出HTML输入框
echo '<input type="text" name="myplugin_settings[myplugin_field_text]" value="' . esc_attr( $value ) . '" class="regular-text">'echo '<p class="description">Lütfen bazı örnek metinler girin.</p>';
} Bu şekilde kaydedilen ayar değerleri, eklenti kodunun herhangi bir yerinde kullanılabilir. get_option('myplugin_settings') Güvenli bir şekilde edinin ve kullanın.
Eklenti Geliştirme Sürecinde Güvenlik ve En İyi Uygulamalar
Güvenlik, eklenti geliştirme sürecinde en önemli konulardan biridir. Güvensiz bir eklenti, tüm web sitesinin güvenlik açığına neden olabilir. En temel ilke şudur: Kullanıcı girdilerine asla güvenmeyin. Kullanıcıdan veya harici kaynaklardan gelen tüm veriler, veritabanına, dosya sistemine girmeden veya sayfaya çıktı olarak gösterilmeden önce doğrulanmalı, temizlenmeli veya uygun şekilde işlenmelidir.
Veri doğrulama ve temizleme
Doğrulama, girilen verilerin beklenen formata uygun olup olmadığını kontrol etme işlemidir; örneğin, bir e-posta adresi olup olmadığı, rakamların belirli bir aralıkta olup olmadığı gibi. WordPress, bu işlem için bir dizi yardımcı fonksiyon sunar. is_email(), absint()Temizleme işlemi, verilerin doğrulanmasının ardından, verilerde bulunan yasadışı veya güvenli olmayan tüm karakterlerin kaldırılmasıdır. Metin alanları için bu işlem yapılırken belirli yöntemler kullanılabilir. sanitize_text_field()。
// 在处理表单提交时
$user_input = $_POST['some_field'] ?? ''; // 使用空合并运算符避免未定义索引警告
// 清理输入
$clean_input = sanitize_text_field( $user_input );
// 验证是否是正整数
$clean_id = absint( $_POST['post_id'] );
if ( $clean_id <= 0 ) {
// 处理无效ID的错误
} Verilerin çıktıdan önce kaçırılması.
Eşleme, verilerin farklı ortamlara (örneğin HTML, JavaScript, URL) güvenli bir şekilde aktarılmasını sağlama işlemidir. Bu, çapraz sitelik betik (XSS) saldırılarını önlemek için çok önemlidir. WordPress, güçlü eşleme fonksiyonları sunar:
* esc_html()`: HTML içeriğini escape (kaçırmak) için kullanılır; böylece içindeki HTML etiketlerinin yorumlanması engellenir.
* esc_attr()HTML etiketlerini dışlamak için kullanılan özellik değeridir.
* esc_url()`: URL’leri dönüştürmek için kullanılır.
* wp_kses_post()Belirlenen kurallar seti aracılığıyla bazı HTML içeriklerinin güvenli bir şekilde çıktı olarak verilmesine izin verilir.
// 在设置页面或前端输出用户数据时
echo '<div class="notice">'`. esc_html($clean_input)`.'</div>'echo '<input type="hidden" value="' . esc_attr( $clean_input ) . '">'echo '<a href="/tr/' . esc_url( $user_url ) . '/">bağlantı (bir web sitesinde)</a>'echo wp_kses_post($allowed_html_content); // Makale düzeyindeki HTML etiketlerine izin verilir. Ayrıca, veritabanı sorgularını işlerken her zaman WordPress veritabanı sınıflarını kullanmalısınız. $wpdb Ön işleme yöntemleri, veya daha gelişmiş API’lerin kullanımı gibi… WP_QueryBu araçlar, SQL enjeksiyonu saldırılarına karşı koruma özelliklerine sahiptir. Dosya işlemleri sırasında bu özellikler kullanılır. wp_upload_dir()、wp_handle_upload() API’leri kullanarak yol güvenliğini sağlayın.
Hook’ları kullanarak yüksek derecede genişletilebilirlik sağlanır.
WordPress eklenti sisteminin çekirdeği, “eylemler” (actions) ve “filtreler” (filters)den oluşan kancalama (hooking) mekanizmasıdır. Kancalama, eklentilerin WordPress’in davranışlarını veya verilerini, çekirdek kodu değiştirmeden değiştirmesine olanak tanır; aynı zamanda diğer geliştiricilerin de sizin eklentinizi genişletmelerini sağlar.
Tavsiye edilen okuma WordPress Tema Geliştirme Başlangıç Kılavuzu: Sıfırdan İlk Özel Temanızı Oluşturun。
Action hook’ların kullanımı ve oluşturulması
Eylem kancaları, belirli zaman noktalarında bir kod parçasını çalıştırır ve bir dönüş değeri beklememektedir. Eklentiler, WordPress tarafından sağlanan binlerce yerleşik kancadan herhangi birini kullanabilir. init, wp_enqueue_scripts, save_postAyrıca, diğer geliştiricilerin kullanımına sunacak kendi “hook’larınızı” (özel fonksiyonlarınızı) da oluşturabilirsiniz.
Kancaya monte edilen kod aşağıdaki gibidir:
// 在文章内容前自动添加一个横幅
function myplugin_prepend_content( $content ) {
if ( is_single() ) {
$custom_text = '<div class="myplugin-banner">Bu bir reklam panosudur.</div>';
$content = $custom_text . $content;
}
return $content;
}
add_filter( 'the_content', 'myplugin_prepend_content' ); Dikkat, burada içeriği değiştirmiş olsak da kullanılan şey bir filtre kancasıdır. the_contentÇünkü değiştirilmiş değerin dönmesini gerektirir.
Özel eylem kancaları oluşturmak için kullanılır. do_action Function:
// 在你的插件代码中定义一个动作点
function myplugin_complete_task() {
// ... 执行一些任务 ...
// 发出自定义动作,允许其他代码在此处添加功能
do_action( 'myplugin_after_task_complete', $task_id, $result );
} Diğer eklentiler veya temalar şu yollarla kullanılabilir: add_action('myplugin_after_task_complete', 'callback', 10, 2) Bu eyleme yanıt vermek için…
Filtre kancalarının (filter hooks) prensibi ve örnekleri
Filtre hook’ları, veriler kullanılmadan önce onları değiştirmek için kullanılır. Bir değer alır ve değiştirilmiş (veya değiştirilmemiş) bir değer döndürmelidir. Bu, eklentilerin metinleri, seçenekleri veya sorgu sonuçlarını değiştirmek için yaygın bir yöntemdir.
Yerleşik filtreleri kullanın:
// 修改文章摘要的长度
function myplugin_excerpt_length( $length ) {
return 20; // 将摘要字数限制改为20字
}
add_filter( 'excerpt_length', 'myplugin_excerpt_length' ); Özel filtre kancaları oluşturmak ve kullanmak için şu adımları izleyin: apply_filters Function:
function myplugin_get_price( $product_id ) {
$base_price = get_post_meta( $product_id, 'price', true );
// 应用过滤器,允许其他代码动态修改价格(例如添加税费、折扣)
$final_price = apply_filters( 'myplugin_product_price', $base_price, $product_id );
return $final_price;
} Bu yöntemle, eklentiniz esnek bir arayüz sunar ve diğer geliştiriciler, eklentinizin kaynak kodunu doğrudan değiştirmeye gerek kalmadan fiyat hesaplama mantığını kolayca değiştirebilirler.
Eklentilerin uluslararasılaştırılması ve betik kaynaklarının yönetimi
Olgun bir WordPress eklentisi, farklı dillere çevrilebilmesi için uluslararasılaştırmayı (internationalization) desteklemeli ve hem ön taraftaki (frontend) hem de arka taraftaki (backend) CSS ve JavaScript kaynaklarını etkili bir şekilde yönetmelidir.
Eklentiyi uluslararası hale getirmek (plugin internationalization)
Uluslararasılaştırma, çevrilmeye ihtiyaç duyan tüm metin dizelerini belirli fonksiyonlar aracılığıyla kapsayarak gerçekleştirilir. Bu süreç iki ana adımdan oluşur: Çeviri dosyalarını metin alanları kullanarak yüklemek ve kod içinde çevrilebilir metin dizelerini işaretlemek.
Öncelikle, eklentinin ana dosyasının baş kısmında tanımlanan… Text Domain(Örneğin) my-first-pluginİşte metin alanınız. Daha sonra, eklenti başlatıldığında (genellikle…) init (Köprü, kullanımı için) load_plugin_textdomain Bir fonksiyon, çeviri dosyalarını yüklemek için kullanılır.
function myplugin_load_textdomain() {
load_plugin_textdomain(
'my-first-plugin', // 文本域,必须与文件头一致
false, // 已弃用参数
dirname( plugin_basename( __FILE__ ) ) . '/languages' // 语言文件存放的相对路径
);
}
add_action( 'init', 'myplugin_load_textdomain' ); Kodda kullanmak __() Çeviri yapın ve dizgiyi döndürün, kullanarak. _e() Tabii ki, lütfen metni bana verin.
$settings_title = __( 'My Plugin Settings', 'my-first-plugin' );
_e( 'Hello World!', 'my-first-plugin' ); Geliştiriciler bunu kullanabilir. Poedit Bu tür araçlar, bu metin dizelerini kaynak koddan çıkarır ve bunlardan yeni içerikler oluşturur. .pot Şablon dosyası. .po 和 .mo Dosya, eklentinin içinde saklanmaktadır. /languages/ Katalogun içinde.
CSS ve JavaScript’i doğru bir şekilde dahil etmek için aşağıdaki adımları izleyin:
Asla bir PHP dosyasına verileri doğrudan ve sabit olarak (hard-coded) yazmayın. <link> 或 <script> Kaynakları tanıtmak için etiketler kullanılır. WordPress, kaynak bağımlılıklarını, sürüm kontrolünü ve yükleme zamanlamasını yönetmek için birleşik bir kuyruklama (enqueue) sistemi sunar.
Arka plan kaynakları için kullanılır. admin_enqueue_scripts Kanca.
function myplugin_admin_scripts( $hook ) {
// 只在特定插件设置页面加载
if ( $hook != 'toplevel_page_myplugin-settings' ) {
return;
}
wp_enqueue_style(
'myplugin-admin-style', // 句柄
plugins_url( 'css/admin-style.css', __FILE__ ), // 文件URL
array(), // 依赖
'1.0.0' // 版本号,可用于强制浏览器更新缓存
);
wp_enqueue_script(
'myplugin-admin-script',
plugins_url( 'js/admin-script.js', __FILE__ ),
array( 'jquery' ), // 依赖jQuery
'1.0.0',
true // 在页脚加载
);
}
add_action( 'admin_enqueue_scripts', 'myplugin_admin_scripts' ); Front-end kaynaklar için kullanılır. wp_enqueue_scripts Kancaların mantığı benzerdir. Bu, kaynakların sıralı bir şekilde yüklenmesini sağlar, çakışmaları önler ve tarayıcı önbelleğinden yararlanılmasına olanak tanır.
Özetle.
WordPress eklenti geliştirme, standartlara uygun bir ana dosya oluşturulmasıyla başlayan, arka plan arayüzlerinin oluşturulması, veri güvenliğinin sağlanması, çekirdek mekanizmaların (hook’ların) kullanımı ve uluslararasılaştırma desteği gibi birçok yönü kapsayan sistemli bir iştir. En iyi uygulamalara uyulması, özellikle de sıkı veri güvenliği kurallarına ve hook mekanizmalarına derinlemesine hakim olunması, stabil, güvenli ve genişletilebilir ticari sınıfı eklentiler geliştirmenin anahtarıdır. Ayar API’lerinin ve yönetim betik kaynaklarının akıllıca kullanılması, eklentinin profesyonelliğini ve kullanıcı deneyimini büyük ölçüde artırabilir. Geliştiriciler, eklentinin kullanım alanını genişletmek için kodlarında her zaman çeviriye uygun yapılar oluşturmalıdır.
Sıkça Sorulan Sorular.
En basit bir WordPress eklentisinin içermesi gereken temel öğeler şunlardır:
En basit eklentilerden biri yalnızca bir PHP dosyası gerektirir ve bu dosya standart eklenti başlık yorumlarını içermelidir. En önemli yorum satırı “Plugin Name” (Eklenti Adı)dır. Bu dosyada doğrudan PHP kodu yazabilir veya işlevler eklemek için “hook” (düğüm) kullanabilirsiniz.
Örneğin, yalnızca “Hello World” çıktısını veren kısa bir kod içeren bir eklenti için de yalnızca bu tür bir dosya yeterlidir.
Eklentiler, WordPress veritabanıyla nasıl etkileşim kurar?
WordPress’in yerleşik veritabanı işleme sınıflarının kullanılmasını öneririm. $wpdbGüvenli veri sorgulama yöntemleri sunar, özellikle de… prepare Bu yöntem, SQL enjeksiyon saldırılarını etkili bir şekilde önleyebilir.
Çoğu veri işlemi için (örneğin makalelerin alınması, meta verilerin değiştirilmesi gibi), WordPress’in gelişmiş fonksiyonlarını kullanmanız daha tavsiye edilir. get_posts(), WP_Query, get_post_meta(), update_post_meta() Bu fonksiyonlar, güvenlik ve önbellekleme sorunlarını zaten alt seviyede çözmüştür. Özelleştirilmiş veri yapıları için, geliştiriciler eklenti etkinleştirildiğinde özelleştirilmiş veri tabloları oluşturabilirler.
Hangi kaynaktan tüm kullanılabilir eylem (action) ve filtre (filter) hook’larını bulabilirim?
WordPress resmi geliştirme dokümanları, eklentilerin (hook’ların) bulunması için en iyi kaynaktır. Ayrıca, geliştiriciler WordPress’in çekirdek kaynak kodunu doğrudan arayarak da ilgili eklentileri bulabilirler.
WordPress’in kök dizinini kod editöründe açın ve arama yapın. do_action 或 apply_filters Fonksiyon çağrıları sayesinde tanımlanmış tüm oluklar (hooks) ve bunların parametreleri bulunabilir. Birçok çevrimiçi kaynak, sık kullanılan olukların listelerini de derlemiştir.
WordPress eklenti kodumu nasıl hata ayıklarım?
Öncelikle, emin olun ki sizin… wp-config.php Dosyada hata ayıklama (debugging) modu etkinleştirilmiştir: define( 'WP_DEBUG', true );Bu, PHP hatalarının ve uyarılarının görüntülenmesine olanak tanır. Hata bilgilerinin ziyaretçiler tarafından görülmesini önlemek için, aynı anda şu ayarlar da yapılabilir: define( 'WP_DEBUG_DISPLAY', false ); Hataları bir günlük dosyasına kaydedin:define( 'WP_DEBUG_LOG', true );。
İkinci olarak, kullanın. error_log() Fonksiyon, özelleştirilmiş hata ayıklama bilgilerini bir günlük dosyasına kaydeder. Karmaşık veri yapıları (örneğin diziler, nesneler) için bu işlem, ilgili veri yapılarının özelliklerine göre birleştirilebilir. print_r() 或 var_dump() Bu bilgilerin yalnızca yönetici giriş yaptığında görülebilmesi sağlanmalıdır ki bilgiler sızdırılmasın. Xdebug gibi profesyonel PHP hata ayıklama araçları kullanılarak kesme noktalarıyla hata ayıklama ve yığın izleme işlemleri daha verimli bir şekilde gerçekleştirilebilir.
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.
- WooCommerce’u Derinlemesine Analiz Etmek: Sıfırdan Başlayarak Güçlü Bir WordPress E-Ticaret Sitesi Oluşturmak
- WordPress Performans Optimizasyonu Kılavuzu: Çekirdekten Ön Yüze Kadar Kapsamlı Hız Artırma Yöntemleri
- WordPress web sitenize SSL sertifikası nasıl yüklersiniz ve yapılandırırsınız?
- WooCommerce Genel Site Önbellekleme Optimizasyon Kılavuzu: WordPress E-ticaret Sitelerinin Hızını ve Dönüşüm Oranlarını Artırma
- 2026 WooCommerce Kurulumu ve Tema Seçimi Kılavuzu