Hazırlık İşlemleri ve Ortam Kurulumu
Kod yazmaya başlamadan önce, uygun bir geliştirme ortamına ihtiyacınız var. Bu, yerel bir WordPress kurulumu, bir kod editörü ve temel PHP bilgilerini içerir. XAMPP, MAMP veya Local by Flywheel gibi araçları kullanarak hızlı bir şekilde yerel bir WordPress ortamı oluşturmanız önerilir. PHP sürümünüzün WordPress’in resmi gereksinimlerine uygun olduğundan emin olun; genellikle PHP 7.4 veya daha yüksek bir sürüm gereklidir.
Bir eklenti, esasen WordPress’e yerleştirilen bir veya daha fazla PHP dosyasıdır.wp-content/pluginsKatalogda yer alır. Her eklentinin benzersiz bir adı olmalıdır ve ana dosyasının baş kısmında, WordPress’in eklentiyi tanımasının temelini oluşturan standart eklenti bilgileri bulunmalıdır.
İlk eklenti dosyanızı oluşturun.
Öncelikle,wp-content/pluginsKatalogda yeni bir klasör oluşturun, örneğin…my-first-pluginDaha sonra bu klasör içinde, genellikle klasörün adıyla aynı olan ana PHP dosyasını oluşturun:my-first-plugin.phpBu dosyada, eklentinin başlık bilgilerini yazmanız gerekiyor.
Tavsiye edilen okuma WordPress Eklenti Geliştirme Kılavuzu: Sıfırdan Başlayarak İlk Eklentinizi Oluşturun。
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个学习WordPress插件开发的示例插件。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ Dosyayı kaydettikten sonra, WordPress arayüzünün “Eklentiler” sayfasına gidin. “İlk Eklentim” adlı eklentinin eklenti listesinde yer aldığını görmelisiniz. Bu eklentiyi etkinleştirin; her ne kadar henüz herhangi bir özelliği olmasa da, bu eklentinizin WordPress tarafından başarıyla yüklendiğini gösterir.
WordPress’in temel mekanizmalarını anlamak: Hook’lar ve Filtreler
WordPress’in güçlü genişletilebilirliği, olay tabanlı mimarisinden kaynaklanmaktadır ve bu mimarinin temelini “kancalar” (Hooks) oluşturur. Kancalar iki türe ayrılır: Eylemler (Actions) ve Filtreler (Filters). Bunları anlamak, etkili eklenti geliştirmenin anahtarıdır.
Eylem kancaları, belirli zaman noktalarında (örneğin makale yayınlanırken, sayfa yüklenirken vb.) kendi kodunuzu ekleyip çalıştırmanıza olanak tanır. Örneğin, bir makale yayınlandığında bir e-posta göndermek için bunları kullanabilirsiniz.add_action()Bu fonksiyon, özel fonksiyonunuzu belirtilen eylem kancasına (action hook) bağlar.
Filtre kancaları, verileri değiştirmenize olanak tanır. Veriler kullanılmadan önce (örneğin veritabanına kaydedilmeden veya tarayıcıda gösterilmeden önce), bunları durdurup değiştirebilirsiniz. Örneğin, bir makalenin başlığını veya yorum içeriğini değiştirebilirsiniz. Bunu yapmak için…add_filter()Filtreleri uygulamak için bir fonksiyon kullanılır.
Eylem kancalarını kullanarak işlevler ekleyin.
Diyelim ki, web sitemizin yönetim arayüzünün alt kısmına özel bir metin satırı eklemek istiyoruz. WordPress, bunun için “footer.php” adında bir dosya sunar.admin_footerEylem kancaları (action hooks). Eklentinin ana dosyasına aşağıdaki kodu ekleyebiliriz:
Tavsiye edilen okuma WordPress eklenti geliştirmeye yeni başlayanlar için bir rehber: ilk işlevsel eklentinizi sıfırdan oluşturma.。
// 定义一个在管理后台页脚显示信息的函数
function myplugin_display_admin_footer_text() {
echo '<p>“İlk Eklentim”i kullandığınız için teşekkür ederiz!</p>';
}
// 将函数挂载到 admin_footer 动作钩子
add_action( 'admin_footer', 'myplugin_display_admin_footer_text' ); Dosyayı kaydedin ve WordPress arka plan sayfasını yenileyin. Sayfanın en alt kısmına (footer) gidin; eklenen metni görmelisiniz. İşte bu, eylem kancalarının (action hooks) temel kullanımıdır: Belirli bir yerde kod çalıştırmak.
İçeriği filtreler kullanarak değiştirin.
Şimdi, tüm makale başlıklarını değiştirmeyi ve başlıkların sonuna bir ticari marka sembolü eklemeyi deneyelim. Bunu yapmak için…the_titleFiltreler.
// 定义一个修改文章标题的函数
function myplugin_modify_post_title( $title, $post_id ) {
// 确保只在主循环且非管理后台中修改
if ( ! is_admin() && in_the_loop() ) {
$title = $title . ' ™';
}
return $title;
}
// 将函数挂载到 the_title 过滤器钩子,参数2表示接受2个参数
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 ); Bu kod, mevcut ortamın ön taraftaki makale ana döngüsünde olup olmadığını kontrol eder. Eğer öyleyse, başlığın ardına “™” sembolünü ekler.10Bu, öncelikle ilgilidir (sayı ne kadar küçükse, işlem o kadar önce gerçekleşir).2Bu, fonksiyonumuzun iki parametre aldığını gösterir (orijinal olanlar).$title和$post_id)。
Eklenti özelliklerinin oluşturulması: Yönetim menüsü ve ayar sayfalarının oluşturulması
Olgun bir eklentinin genellikle WordPress arayüzünde ayar seçenekleri sunması gerekir. Bu, eklenti için özel bir yönetim menü sayfası oluşturmayı içerir. WordPress, bu işlevi gerçekleştirmek için zengin API fonksiyonları sunar. Örneğin…add_menu_page()和add_options_page()。
Üst düzey yönetim menüsü ekleyin.
Eklentiye ayrı bir üst düzey menü ekleyeceğiz. Bu genellikle…admin_menuİşlemler, eylem kancaları (action hooks) aracılığıyla tamamlandı. Menü ve sayfaları tanımlamak için bir fonksiyon oluşturuyoruz.
// 定义添加管理菜单的函数
function myplugin_add_admin_menu() {
add_menu_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限(管理员)
'myplugin-settings-page', // 菜单slug(唯一标识)
'myplugin_display_settings_page', // 用于显示页面内容的回调函数
'dashicons-admin-generic', // 菜单图标(Dashicons)
30 // 菜单位置
);
}
// 将函数挂载到 admin_menu 钩子
add_action( ‘admin_menu’, ‘myplugin_add_admin_menu’ ); Daha sonra, bir geri çağırma (callback) fonksiyonu tanımlamamız gerekiyor.myplugin_display_settings_page()HTML içeriğini renderleme ayarları sayfası için getirin.
Tavsiye edilen okuma WordPress eklenti geliştirmeye başlamak için bir rehber: özel işlevler oluşturmanın kapsamlı bir rehberi。
// 定义设置页面的显示内容
function myplugin_display_settings_page() {
?>
<div class="wrap">
<h1>Eklenti ayarlarım.</h1>
<form method="post" action="/tr/options.php/" data-trp-original-action="options.php">
<?php
// 输出设置字段、安全nonce等
settings_fields( ‘myplugin_settings_group’ );
do_settings_sections( ‘myplugin-settings-page’ );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="tr"/></form>
</div>
<?php
} Kayıt Ayarları, Alanlar ve Bölgeler
Form verilerini güvenli bir şekilde işlemek için WordPress’in ayar API’sini kullanmamız gerekiyor. Bu işlem, ayarların kaydedilmesini, ayar bölümlerinin ve alanlarının eklenmesini içerir.
// 初始化插件设置
function myplugin_settings_init() {
// 1. 注册一个设置(存储在wp_options表中)
register_setting(
‘myplugin_settings_group’, // 设置组名,与 settings_fields() 对应
‘myplugin_options’ // 存储在数据库中的选项名
);
// 2. 添加一个设置分区
add_settings_section(
‘myplugin_section_basic’, // 分区ID
‘基础设置’, // 分区标题
‘myplugin_section_basic_callback’, // 分区介绍的回调函数
‘myplugin-settings-page’ // 所属页面的slug
);
// 3. 为分区添加一个字段
add_settings_field(
‘myplugin_field_message’, // 字段ID
‘欢迎信息’, // 字段标签
‘myplugin_field_message_callback’, // 渲染字段HTML的回调函数
‘myplugin-settings-page’, // 所属页面的slug
‘myplugin_section_basic’ // 所属分区的ID
);
}
add_action( ‘admin_init’, ‘myplugin_settings_init’ );
// 分区介绍的回调函数
function myplugin_section_basic_callback() {
echo ‘<p>Eklentinin temel bilgilerini yapılandırın.</p>’;
}
// 字段渲染的回调函数
function myplugin_field_message_callback() {
// 从数据库获取现有值
$options = get_option( ‘myplugin_options’ );
$value = $options[‘message’] ?? ‘’; // PHP 7.0+ 空合并运算符
// 输出输入框
echo ‘<input type="“text”" name="“myplugin_options[message]”" value="“‘" . esc_attr( $value ) ‘” class ="“regular-text”" />‘;
} Artık, eklentiniz WordPress standartlarına uygun, eksiksiz bir yönetim ayarları sayfasına sahip. Bu sayfa sayesinde yapılandırma seçenekleri güvenli bir şekilde kaydedilebilir ve okunabilir.
Eklentilerin Uluslararasılaştırılması ve Güvenlik İçin En İyi Uygulamalar
Eklentinizin tüm dünyadaki kullanıcılar tarafından kullanılabilmesi için uluslararasılaştırma (i18n) adımı şarttır. Aynı zamanda, güvenlik kurallarına uymak, hem sizi hem de kullanıcıların web sitelerini saldırılardan korumanın temelidir.
Metnin uluslararasılaştırılmasını gerçekleştirmek
WordPress kullanılır.__()、_e()Çeviri işlemini gerçekleştirmek için `translate` gibi fonksiyonlar kullanılır. Öncelikle, eklentinin baş kısmında (header) gerekli ayarların doğru bir şekilde yapıldığından emin olmanız gerekir.Text DomainÖrneğin:my-first-pluginDaha sonra, tüm kullanıcıya yönelik metinleri çeviri fonksiyonu ile sarın.
// 在插件代码中,将硬编码的文本替换
// 修改前:echo ‘<p>“İlk Eklentim”i kullandığınız için teşekkür ederiz!</p>’;
// 修改后:
function myplugin_display_admin_footer_text() {
echo ‘<p>‘ . esc_html__( ‘感谢使用“我的第一个插件”!’, ‘my-first-plugin’ ) . ‘</p>’;
} Bundan sonra, Poedit gibi araçları kullanarak içeriği dönüştürmeniz gerekecek..pot(Template) dosyası, eklentinin içine konulmuştur.languagesKlasörde. Çevirmen, buna karşılık gelen içeriği oluşturabilir..poVe derlenen.moDosya. Son olarak, eklenti başlatılırken kullanılır.load_plugin_textdomain()Function loading.
function myplugin_load_textdomain() {
load_plugin_textdomain( ‘my-first-plugin’, false, dirname( plugin_basename( __FILE__ ) ) . ‘/languages/’ );
}
add_action( ‘plugins_loaded’, ‘myplugin_load_textdomain’ ); Güvenli kodlama standartlarına uyun.
Güvenlik her şeyden önce gelir. Öncelikle, kullanıcıların girdilerine asla güvenmeyin. Kullanıcılardan veya dış kaynaklardan gelen tüm veriler…$_GET, $_POST, $_COOKIEHepsi doğrulanmalı, temizlenmeli ve escape işlemine tabi tutulmalıdır.
- Eşleşme çıktısı: Verileri HTML, JavaScript veya URL'ye çıktı yaparken, ilgili eşleşme fonksiyonunu kullanın.
// 输出到HTML属性
echo ‘<input value="“‘" . esc_attr( $value ) ‘“ />‘;
// 输出到HTML内容
echo ‘<p>‘. esc_html($text)‘.‘</p>’;
// 输出到JavaScript变量
echo ‘<script>var msg = “‘ . esc_js( $message ) . ‘“;</script>’;
// 输出到URL
echo ‘<a href="/tr/“‘/" . esc_url( $url ) ‘“>bağlantı (bir web sitesinde)</a>’; - Girdiyi doğrula: Verilerin beklenen formata uygun olup olmadığını kontrol edin (örneğin, bir e-posta adresi veya sayı olup olmadığını).
if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
// 不是有效的邮箱地址
wp_die( ‘无效的邮箱格式。’ );
} - Yetenek Kontrolü: Yönetim işlemleri gerçekleştirilmeden önce, mevcut kullanıcının ilgili yetkilere sahip olup olmadığı kontrol edilir.
if ( ! current_user_can( ‘manage_options’ ) ) {
wp_die( ‘你没有执行此操作的权限。’ );
} - Nonce Doğrulaması: Durum değişikliğini gerektiren işlemler için (örneğin form gönderimi, AJAX istekleri), Nonce (tek seferlik bir sayı) kullanılarak çapraz sitelik istek sahteciliği (CSRF) saldırıları önlenir.
// 在表单中输出nonce字段
wp_nonce_field( ‘myplugin_action’, ‘myplugin_nonce’ );
// 在处理请求时验证nonce
if ( ! isset( $_POST[‘myplugin_nonce’] ) || ! wp_verify_nonce( $_POST[‘myplugin_nonce’], ‘myplugin_action’ ) ) {
wp_die( ‘安全校验失败。’ );
} Özetle.
Bu rehber sayesinde, temel eklenti dosyalarını oluşturmaktan, WordPress çekirdeğinin hook sistemini anlamak ve kullanmaktan, arka uç yönetim arayüzleri oluşturmaya, uluslararasılaştırmayı gerçekleştirmeye ve temel güvenlik uygulamalarını uygulamaya kadar tüm süreci tamamladınız. Artık, işlevsel, yapısal olarak bütünlüklü, güvenli ve güvenilir bir WordPress eklentisi geliştirmek için gerekli temel becerilere sahipsiniz. Eklenti geliştirmenin özü, WordPress’in özelliklerini genişletmek için eylem (action) ve filtre (filter) hook’larını etkili bir şekilde kullanmaktır ve aynı zamanda güvenlik ile sürdürülebilirliği her zaman öncelikli tutmaktır. Bundan sonra, özel veritabanı tabloları, AJAX etkileşimleri veya REST API uç noktaları gibi daha karmaşık API’leri keşfetmeyi deneyebilir ve daha güçlü araçlar geliştirebilirsiniz.
Sıkça Sorulan Sorular.
###: WordPress eklentisi geliştirmek için hangi ön koşullara sahip olmak gerekir?
Temel PHP programlama bilgisine sahip olmanız gerekmektedir. HTML, CSS ve JavaScript (özellikle jQuery) konularına hakim olmanız da oldukça faydalı olacaktır. En önemlisi, WordPress’in temel yapısına dair kavramlara, örneğin temalar, eklentiler, makale türleri, kullanıcı rolleri gibi konulara ilk elden bir fikir edinmeniz gerekmektedir. Bu rehber, bu temel bilgilere sahip olduğunuzu varsayar.
WordPress eklentimizi nasıl hata ayıklarız?
Öncelikle, emin olun ki…wp-config.phpDosyadakiWP_DEBUGSabit, olarak ayarlandı.trueBu, sayfada PHP hatalarını, uyarılarını ve bildirimlerini gösterecektir. İkincisi, bunları kullanmak mümkündür.error_log()Fonksiyon, hata ayıklama bilgilerini sunucunun hata günlüğüne yazar. Daha karmaşık hata ayıklamaları için, veritabanı sorgularını, hook işlemlerini, betik yüklemelerini ve benzeri ayrıntılı bilgileri görüntüleyebilen Query Monitor gibi özel hata ayıklama eklentileri kullanılabilir.
Geliştirdiğim eklentiyi nasıl dağıtmalıyım?
Bireysel kullanım veya küçük çaplı paylaşım için dosyaları doğrudan ZIP formatında sıkıştırabilirsiniz. Eğer dosyalarınızı herkese açık olarak yayınlamak istiyorsanız, iki temel yol bulunmaktadır: Birincisi, dosyalarınızı WordPress’in resmi eklenti dizinine (WordPress.org) göndermektir; bu, belirli gönderim kılavuzlarına ve kod standartlarına uymanızı gerektirir, ancak en yüksek tanınırlığı sağlar. İkincisi ise kendi web siteniz veya CodeCanyon gibi üçüncü parti pazarlar aracılığıyla dağıtmaktır. Resmi dizine dosya göndermeden önce, lütfen kod kalitesinden ve güvenliğinden emin olun.
Eklentime özel makale türleri veya kategorileri nasıl eklerim?
Kullanabilirsiniz.register_post_type()Bu fonksiyon, özel makale türleri (Custom Post Types - CPT) oluşturmak için kullanılır.register_taxonomy()Bu işlemler, özel bir sınıflandırma sistemi oluşturmak için kullanılan fonksiyonlar aracılığıyla yapılır. Bu işlemlerin en iyi şekilde gerçekleştirildiği yer…initEylem kancaları (action hooks) içinde yürütülür. WordPress Codex ve Developer Handbook’da bu iki fonksiyonla ilgili ayrıntılı parametre açıklamaları bulunmaktadır; bu da WordPress’in içerik yönetim yeteneklerini genişletmenin güçlü bir yoludur.
Eklentilerdeki işlev adları diğer eklentilerle çakışmayı nasıl önler?
Fonksiyon adları, sınıf adları veya sabit adları arasında çakışmaları önlemek için en iyi uygulama, ad alanları (namespace) kullanmaktır (PHP 5.3 ve sonraki sürümler). Eğer eklentiniz daha eski PHP sürümlerini desteklemesi gerekiyorsa veya maksimum uyumluluğu korumak istiyorsanız, tüm tanımlayıcılara benzersiz bir önek ekleyebilirsiniz. Örneğin, eklentinin adını veya kısaltmasını önek olarak kullanabilirsiniz.myplugin_function_name、MyPlugin_ClassName或MYPLUGIN_CONSTANTBu kılavuzdaki örnek kodlar, önek yöntemini kullanmaktadır.
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.
- Önsöz: Neden WordPress ile geliştirme yapmayı seçtik?
- Neden e-ticaret çözümünüz olarak WooCommerce’u seçtiniz?
- WooCommerce Kapsamlı Kılavuzu: Sıfırdan Online Mağazanızı ve Satış Stratejinizi Oluşturun
- WordPress Tema Geliştirme Konusunda Uzmanlaşın: Sıfırdan Profesyonel Web Siteleri Oluşturmanın Kapsamlı Rehberi
- Web sitesinin performansını ve güvenliğini her yönüyle artıracak 10 önerilen WordPress eklentisi: