WordPress Eklenti Geliştirme Temelleri ve Ortam Hazırlığı
Kod yazmaya başlamadan önce, WordPress eklentilerinin temel kavramlarını anlamak ve geliştirme ortamını oluşturmak çok önemlidir. Bir WordPress eklentisi, esasen bir veya daha fazla PHP dosyasından oluşur ve WordPress’in sağladığı kancalar (Hooks) sistemi aracılığıyla çekirdek işlevleri genişletir veya değiştirir. Eklentiler, yalnızca kısa bir kod parçası ekleyecek kadar basit olabileceği gibi, tam bir e-ticaret sistemi oluşturacak kadar da karmaşık olabilir.
Geliştirme ortamının temeli, yerel bir sunucu ortamı oluşturmaktır. XAMPP, MAMP, Local by Flywheel veya Docker gibi araçları kullanarak PHP, MySQL ve Apache/Nginx içeren yerel bir WordPress sitesi hızlı bir şekilde kurabilirsiniz. Kullandığınız PHP sürümünün, WordPress’in resmi olarak önerdiği sürümle uyumlu olduğundan emin olun. Kod düzenleyicileri açısından Visual Studio Code, PhpStorm veya Sublime Text mükemmel seçeneklerdir; bu araçlar sözdizimi vurgulama, kod ipuçları ve hata ayıklama özellikleri sunarak geliştirme verimliliğinizi önemli ölçüde artırır.
Standart bir WordPress eklentisi en az bir ana PHP dosyası içermelidir ve bu dosyanın baş kısmında belirli eklenti bilgilerini içeren açıklamalar bulunmalıdır. Bu açıklamalar, WordPress’in eklentiyi tanımasında kritik bir rol oynar. Ayrıca, zorunlu olmamakla birlikte, eklentiniz için ayrı bir klasör oluşturmak kaynak dosyaları, dil paketlerini ve diğer bağımlılıkları yönetmenize yardımcı olur.
Tavsiye edilen okuma WordPress Eklenti Geliştirme: Başlangıçtan Uzmanlığa – Kişiselleştirilmiş Web Siteleri Oluşturmanın Kapsamlı Rehberi。
İlk eklenti dosyanızı oluşturun.
Şimdi, ilk eklentinin temel dosyasını oluşturmaya başlayalım. Öncelikle, WordPress’in kurulum dizininin içine girmeniz gerekiyor./wp-content/plugins/Klasör: Burada, eklentiniz için yeni bir klasör oluşturun; örneğin, “myplugin” adını verin.my-first-plugin。
Bu klasör içinde, bir ana PHP dosyası oluşturun. Genellikle, bu ana dosya eklenti klasörüyle aynı adı taşır; örneğin:my-first-plugin.phpBu dosyanın başında standart eklenti başlık bilgilerinin bulunması gerekmektedir.
<?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
* Domain Path: /languages
*/ Bu not, WordPress eklenti arayüzünün (backend) ihtiyaç duyduğu tüm meta bilgileri içermektedir. Dosyayı kaydettikten sonra, bu eklentiyi WordPress arayüzündeki “Eklentiler” (Plugins) sayfasında görebilir ve etkinleştirebilirsiniz. Şu an için herhangi bir özelliği yoktur, ancak yapı zaten oluşturulmuştur.
Eklentiye basit bir özellik ekleyin.
Eklenti etkinleştirildikten sonra, ona ilk gerçek işlevi ekliyoruz: Web sitesinin alt kısmında özelleştirilmiş bir metin satırı göstermek. Bunun için WordPress’i kullanacağız.wp_footerKanca.
Pluginin ana dosyasındamy-first-plugin.phpBaşlık yorumunun hemen altına aşağıdaki kodu ekleyin:
Tavsiye edilen okuma WordPress Eklenti Geliştirmeyi Sıfırdan Öğrenin: Özel İşlevler Oluşturma ve Genişletmeler。
// 在网站页脚输出自定义文本
function mfp_add_footer_text() {
echo '<p style="text-align: center; color: #666;">Bu web sitesini kullandığınız için teşekkür ederiz! Destek, “My First Plugin” tarafından sağlanmaktadır.</p>';
}
add_action( 'wp_footer', 'mfp_add_footer_text' ); Burada,mfp_add_footer_textBu, bizim özelleştirdiğimiz bir fonksiyondur ve içinde çıktı olarak gösterilecek HTML içeriği bulunmaktadır.add_action()Bu, eylem kancaları eklemek için kullanılan temel bir fonksiyondur; bu fonksiyon, kendi fonksiyonumuzu WordPress çekirdeğine “bağlar” (yani WordPress’in iç yapısına entegre eder).wp_footerBu yürütme noktasında, dosyayı kaydedip web sitesinin ön yüzünü yenilediğinizde, sayfanın alt kısmında bu metni görebilirsiniz.
İçerik düzenlemesini genişletmek için kısa kodlar kullanın.
Kısa kod (Shortcode), WordPress tarafından sağlanan güçlü bir özelliktir ve kullanıcıların makalelerine veya sayfalara basit etiketler aracılığıyla dinamik içerik eklemesine olanak tanır. Şimdi, mevcut tarihi göstermek için basit bir kısa kod oluşturacağız.
Aynı ana dosyaya aşağıdaki kodu da ekleyin:
// 创建一个显示当前日期的短代码
function mfp_show_current_date( $atts ) {
// 定义短码的默认属性
$attributes = shortcode_atts(
array(
'format' => 'Y年m月d日',
),
$atts
);
// 根据属性中的格式返回日期
return date( $attributes['format'] );
}
add_shortcode( 'show_date', 'mfp_show_current_date' ); fonksiyonmfp_show_current_dateKısa kodların mantığı tanımlanmıştır.shortcode_atts()Bu fonksiyon, kullanıcı tarafından tanımlanan özellikleri varsayılan özelliklerle birleştirmek için kullanılır ve böylece kodun sağlamlığı sağlanır. Son olarak…add_shortcode()Fonksiyon şunu yapacak:[show_date]Bu etiket, özelleştirdiğimiz işlem fonksiyonuyla ilişkilendirilmiştir.
Şimdi, herhangi bir makalede, sayfada veya küçük araç metin editöründe bunu girebilirsiniz.[show_date]Varsayılan biçimde tarihi göstermek için kullanılır, veya başka bir biçim kullanmak istenirse de bu seçenek mevcuttur.[show_date format="F j, Y"]İngilizce formatında tarihleri göstermek için…
Hook’ların ve filtrelerin derinlemesine anlaşılması
WordPress eklenti geliştirmenin temel felsefesi “kancalar” (Hooks)’dır. Kancalar iki türe ayrılır: Eylemler (Actions) ve Filtreler (Filters). Daha önce kullandığımız…add_action()Yani, bir eylem kancası (action hook) eklemek gerekiyor.
Tavsiye edilen okuma Sıfırdan Başlayın: İlk WordPress Eklentinizi Oluşturun。
Eylem kancaları, kodunuzu belirli bir zaman noktasında çalıştırır ve bir dönüş değeri beklememektedir; genellikle içerik çıkışı yapmak veya bir görevi yerine getirmek için kullanılır (örneğin, sayfanın alt kısmına metin eklemek). Filtre kancaları ise verileri değiştirmek için kullanılır. Bir değer alır, bu değer fonksiyonunuz tarafından işlendikten sonra değiştirilmiş bir değer olarak döndürülmelidir.
Makale başlıklarını filtreler kullanarak değiştirin.
Hadi, tüm makale başlıklarına otomatik olarak bir önek ekleyen bir filtre oluşturalım. Eklentinin ana dosyasına şunu ekleyin:
// 使用过滤器为文章标题添加前缀
function mfp_add_title_prefix( $title, $id = null ) {
// 确保只在主循环且是文章页面的标题上生效
if ( in_the_loop() && is_single() && get_post_type( $id ) === 'post' ) {
$title = '【推荐阅读】' . $title;
}
return $title;
}
add_filter( 'the_title', 'mfp_add_title_prefix', 10, 2 ); Burada,the_titleBu, bir filtre kancasıdır.add_filter()Üçüncü parametre “10”, önceliği belirtir (sayı ne kadar küçükse işlem o kadar önce gerçekleşir); dördüncü parametre “2”, işleme fonksiyonumuzun iki parametre aldığını gösterir (orijinal veriler).$title(Makale ID’si ile birlikte). Bu fonksiyon koşulları kontrol eder ve yalnızca tek bir makale sayfasında ve ana döngü içindeyken başlığa bir önek ekler.
Eklentilerin Güvenliği ve En İyi Uygulamalar
Eklentiler geliştirirken, güvenlik en önemli faktördür. Kullanıcıların girdiği verilere asla güvenmeyin; bu verilerin doğrulanması, temizlenmesi ve uygun şekilde işlenmesi gerekir.
Veri Doğrulama ve Kaçınma (Data Validation and Escaping)
Eklentiler, formlardan veya URL’lerden gelen verileri işlemek zorunda kaldığında, WordPress tarafından sağlanan güvenli fonksiyonları kullanmak zorundadır. Örneğin,sanitize_text_field()Metin girdisini temizlemek için kullanın.esc_html()或esc_attr()HTML veya özniteliklerin şu şekilde çıkarılması, çapraz sitelik betik (XSS) saldırılarını önlemek için gereklidir:
Basit bir ayar sayfası oluşturun.
Bir eklentinin tamamlanması genellikle bir arka plan ayar sayfasını gerektirir. Burada, basit bir seçenek sayfası nasıl oluşturulacağını ve bir ayarın güvenli bir şekilde nasıl kaydedileceğini gösteriyoruz.
// 在后台管理菜单中添加一个选项页面
function mfp_add_admin_menu() {
add_options_page(
'我的第一个插件设置', // 页面标题
'我的插件设置', // 菜单标题
'manage_options', // 权限要求
'my-first-plugin', // 菜单slug
'mfp_options_page_html' // 用于显示页面内容的回调函数
);
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );
// 注册一个设置项
function mfp_settings_init() {
register_setting( 'mfpPlugin', 'mfp_settings' ); // 设置组,选项名
add_settings_section(
'mfp_plugin_section', // 区块ID
'基础设置', // 区块标题
null, // 区块介绍的回调函数(此处为null)
'my-first-plugin' // 所属页面slug
);
add_settings_field(
'custom_text', // 字段ID
'自定义显示文本', // 字段标签
'mfp_custom_text_field_html', // 用于输出字段HTML的回调函数
'my-first-plugin', // 页面slug
'mfp_plugin_section' // 所属区块ID
);
}
add_action( 'admin_init', 'mfp_settings_init' );
// 渲染设置字段的HTML
function mfp_custom_text_field_html() {
$options = get_option( 'mfp_settings' );
$value = isset( $options['custom_text'] ) ? esc_attr( $options['custom_text'] ) : '';
?>
<input type='text' name='mfp_settings[custom_text]' value='<?php echo $value; ?>'>
<p class="description">Buraya girilen metin, sayfanın alt kısmında (footer) görüntülenecektir.</p>
<?php
}
// 渲染整个选项页面的HTML
function mfp_options_page_html() {
// 检查用户权限
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
?>
<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( 'mfpPlugin' ); // 输出安全字段
do_settings_sections( 'my-first-plugin' ); // 输出设置区块和字段
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="tr"/></form>
</div>
<?php
} Bu kod, “Ayarlar” menüsü altında bulunan ve özelleştirilmiş bir metni kaydetmek için kullanılan bir alt sayfa oluşturur. Kullanıcı yetkilerinin kontrol edildiğine dikkat edin.current_user_can) ve çıktı verilerinin kodlaması (escape)esc_html, esc_attrBunlar, güvenlik uygulamalarının bir parçasıdır. Daha sonra, önceki sayfanın alt kısmında (footer) üretilen fonksiyonları değiştirebilirsiniz.get_option( 'mfp_settings' )Bu değeri okuyarak dinamik olarak gösteriyoruz.
Özetle.
Bu eğitim sayesinde, sıfırdan başlayarak işlevsel bir WordPress eklentisi oluşturma sürecinin tamamını tamamladınız. Eklentinin temel dosya yapısını nasıl oluşturacağınızı ve eylem kancalarını (action hooks) nasıl kullanacağınızı öğrendiniz.add_actionSayfanın alt kısmına içerik ekleyin, bunu şu şekilde yapabilirsiniz:add_shortcodeÖzel kısa kodlar oluşturun ve filtre kancalarını (filter hooks) kullanın.add_filterMakale verilerini değiştirin. Daha da önemlisi, eklentilerin güvenliğiyle ilgili temel kavramlarla tanıştınız ve eklenti ayarlarını yönetmek için güvenli bir arka uç sayfası oluşturmayı uyguladınız.
Eklenti geliştirme, sürekli öğrenme ve pratik yapmayı gerektiren bir süreçtir. Bir sonraki adımda, eklentinize uluslararasılaştırma desteği eklemeyi deneyebilirsiniz (uluslararası dil desteği sağlamak için gerekli kodları yazabilirsiniz).__()和_e()Fonksiyonlar kullanarak, JavaScript ve CSS kaynaklarını dahil ederek veya nesne yönelimli programlama (OOP) tekniklerini kullanarak kod yapısını yeniden düzenleyebilir ve böylece kodun daha kolay bakımını ve genişletilmesini sağlayabilirsiniz. Unutmayın ki, WordPress’in resmi eklenti kılavuzlarını ve çekirdek kodunu okumak, becerilerinizi geliştirmenin en iyi yoludur.
Sıkça Sorulan Sorular.
WordPress eklentimizi nasıl hata ayıklarız?
WordPress’ın hata ayıklama (debugging) modunu açmak ilk adımdır. Web sitesinde…wp-config.phpDosyada,WP_DEBUGSabit, olarak ayarlandı.trueBu, PHP hatalarını, uyarılarını ve bildirimlerini doğrudan sayfada gösterecektir. Daha karmaşık hata ayıklamaları için ise başka araçlar kullanılabilir.error_log()Fonksiyon, bilgileri sunucunun hata günlüğüne yazar; ayrıca Query Monitor gibi profesyonel hata ayıklama araçları kullanılarak veritabanı sorguları, eklentilerin çalışması ve performans verileri incelenebilir.
Eklentim farklı WordPress sürümleriyle nasıl uyumlu olabilir?
Eklenti kodunuzda, WordPress çekirdek fonksiyonlarının, sınıflarının veya sabitlerinin varlığını kontrol etmek için koşullu ifadeler kullanmalı ve ancak ondan sonra bunları kullanmalısınız. Bunu yapmak için çeşitli yöntemler mevcuttur.function_exists()、class_exists()或defined()Değerlendirme yapın. Aynı zamanda, eklentiyle ilgili olarak…readme.txtDosyada, eklentinizin desteklediği en düşük WordPress sürümü açıkça belirtilmiştir.Requires at leastBu bilgiler, kullanıcıların uyumluluğu anlamalarına yardımcı olabilir.
Eklentiler geliştirirken nesne yönelimli programlama kullanılması zorunlu mu?
Zorunlu değil. Tam özellikli eklentiler geliştirmek için sadece prosedürel programlama (tıpkı bu öğreticideki örneklerde olduğu gibi) kullanabilirsiniz. Nesne yönelimli programlamanın (OOP) ana avantajları, daha iyi kod organizasyonu, kapsülleme ve yeniden kullanılabilirliktir; bu da büyük ve karmaşık eklenti projeleri için daha faydalıdır. Küçük eklentiler için prosedürel programlama daha basit ve doğrudan olabilir. Hangi yöntemi kullanacağınıza, projenin boyutuna ve karmaşıklığına göre karar verebilirsiniz.
WordPress resmi eklenti dizinine eklentimi nasıl yayınlayabilirim?
Öncelikle, WordPress.org’da bir hesap oluşturmanız ve eklentiyi buraya göndermeniz gerekiyor. Eklentinizin kodu, güvenlik, kötü amaçlı kod içermeme, GPL uyumlu lisans kullanımı gibi konularda resmi kod standartlarına ve kılavuzlara uymalıdır. Ayrıca, ayrıntılı bir...readme.txtDosyayı gönderin ve eklentinin ana dosyasının baş kısmındaki yorumların standartlara uygun olduğundan emin olun. Gönderimden sonra, eklenti inceleme ekibindeki gönüllüler dosyayı inceleyecek ve onaylandıktan sonra eklenti yayınlanabilir.
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.
- Mükemmel bir WordPress temasını nasıl seçer ve özelleştirirsiniz?
- 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
- Sıfırdan bire: WordPress'i kullanarak profesyonel bir web sitesi oluşturmanın eksiksiz rehberi ve uygulamalı ipuçları.
- WordPress Eklenti Geliştirme Kılavuzu: Başlangıçtan Uzmanlığa Kadar Profesyonel Eklentiler Oluşturma