WordPress Eklenti Geliştirme Temelleri ve Ortam Hazırlığı
WordPress eklentileri esasen, WordPress tarafından sağlanan API aracılığıyla çekirdek işlevleri genişleten bir dizi PHP dosyasından oluşur. Bir eklenti, yalnızca kısa bir kod ekleyecek kadar basit olabileceği gibi, tam bir yönetim sistemi oluşturacak kadar karmaşık da olabilir. Kodlamaya başlamadan önce, eklentilerin temel yapısını anlamak çok önemlidir. Her eklentinin, genellikle eklentinin adıyla adlandırılan bir ana dosyası olmalıdır. my-first-plugin.phpBu dosyanın en üstündeki yorum satırı, WordPress’in eklentileri tanımasında kritik bir rol oynar.
Geliştirme ortamı, verimli çalışmanın temel taşıdır. Çevrimiçi ortamla mümkün olduğunca uyumlu bir test ortamı oluşturmanız gerekmektedir. XAMPP, MAMP veya Local by Flywheel gibi yerel sunucu entegrasyon paketlerinin kullanılması önerilir. Aynı zamanda, kod düzenleyicinizin veya entegre geliştirme ortamınızın (IDE) PHP sözdizimini vurgulamasını ve hata ayıklama özelliklerini desteklediğinden emin olun; örneğin VS Code, PhpStorm veya Sublime Text gibi. WordPress’in…WP_DEBUGModeller, geliştirme aşamasında hataları tespit etmek için son derece önemlidir. Bunları web sitenizde kullanabilirsiniz.wp-config.phpDosyada, tanımlar yoluyla…define('WP_DEBUG', true);Onu etkinleştirmek için buraya gelin.
İlk eklenti dosyanızı oluşturun.
En basit eklentiyi oluşturarak başlayalım; bu eklenti, web sitesinin yönetim arayüzünde özelleştirilmiş bir bildirim gösterecektir.
Tavsiye edilen okuma WordPress Eklenti Geliştirme Kılavuzu: Sıfırdan Başlayarak Kendi Özel Özelliklerinizi Oluşturun。
Eklenti ana dosyasını ve yorum başlığını yazın.
Öncelikle, WordPress kurulum dizininizin altındaki…wp-content/pluginsDosya içinde, “” adında yeni bir klasör oluşturun.my-first-pluginBu klasör içinde, aynı adı taşıyan bir PHP dosyası oluşturun.my-first-plugin.php。
Bu dosyayı açın ve aşağıdaki standart eklenti bilgilerini içeren açıklama satırlarını ekleyin. Bu bilgiler, WordPress arayüzündeki “Eklentiler” yönetim sayfasında görüntülenecektir.
<?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
*/ Dosyayı kaydettikten sonra, WordPress yönetim panelinin “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 işlev gerçekleştirmese de, WordPress tarafından başarıyla yüklendi.
Temel bir arka plan bildirim işlevi gerçekleştirin.
Şimdi, bu eklentiye ilk özelliği ekleyeceğiz: Yönetim panelinin üst kısmında bir hoş geldin mesajı göstereceğiz. Bunun için WordPress’in özelliklerinden yararlanacağız.admin_noticesKancalar. Az önceki eklenti ana dosyasında, yorum satırının hemen altına aşağıdaki kodu ekleyin:
// 在管理后台显示自定义通知
function mfp_show_admin_notice() {
?>
<div class="notice notice-success is-dismissible">
<p><?php _e( '欢迎使用“我的第一个插件”!', 'my-first-plugin' ); ?></p>
</div>
<?php
}
add_action( 'admin_notices', 'mfp_show_admin_notice' ); Kod açıklaması: Bir adı "myfunc" olan bir fonksiyon oluşturduk.mfp_show_admin_noticeBu fonksiyon, WordPress arka planıyla uyumlu bir HTML bildirim kodu üretir. Kullanımı şu şekildedir:_e()Fonksiyonlar, gelecekteki uluslararasılaştırma (i18n) ihtiyaçlarını desteklemek için tasarlanmıştır. Son olarak,add_action()Bu fonksiyon, özel olarak oluşturduğumuz fonksiyonu WordPress’e bağlar.admin_noticesBu “kancaya” dosyayı kaydettikten sonra, WordPress arka plan sayfasını yenileyin; o zaman bu yeşil başarı mesajını göreceksiniz.
Tavsiye edilen okuma WordPress eklenti geliştirme eksiksiz rehberi: sıfırdan ileri düzey uygulama eğitimine kadar.。
Eklentinin temel işlevlerinin derinlemesine geliştirilmesi
Temel yapıyı öğrendikten sonra, daha kullanışlı özellikler geliştirebiliriz. Yaygın bir ihtiyaç, makale içeriğinin sonuna otomatik olarak özelleştirilmiş bir metin eklemektir.
Makale içeriğini filtreler kullanarak değiştirin.
WordPress, çeşitli verileri değiştirmek için birçok “filtre” (Filter) sunar. Makale içeriğinin ardına metin eklemek için bunlardan birini kullanacağız.the_contentFiltreler: Eklentinin ana dosyasına aşağıdaki yeni fonksiyonu ekleyin:
// 在文章内容末尾添加自定义文本
function mfp_append_to_content( $content ) {
// 确保只在主循环的单篇文章页面执行
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_text = '<div class="my-plugin-footer"><p>Okuduğunuz için teşekkürler! Bu makale size My First Plugin tarafından sunulmuştur.</p></div>';
$content .= $custom_text;
}
return $content;
}
add_filter( 'the_content', 'mfp_append_to_content' ); Bu fonksiyon, orijinal veriyi alır.$contentKoşullu kontrol yoluyla, yalnızca belirli bir makale sayfasında ve ana sorgu kapsamında olduğunda özel HTML metnimizi ekleyerek, sonunda değiştirilmiş içeriği geri döndürürüz. Bu yöntem müdahaleci değildir ve veritabanındaki orijinal içeriği değiştirmez.
Basit bir yönetim ayarları sayfası oluşturun.
Kullanıcıların makalenin sonuna eklemek istedikleri metni özelleştirebilmeleri için, eklenti için bir ayar sayfası oluşturmamız gerekiyor. Bu işlem birkaç adımdan oluşuyor: menüye kayıt etme, sayfa geri çağırma fonksiyonlarının oluşturulması ve form verilerinin işlenmesi.
Öncelikle, kullanın.admin_menuKancaya bir alt menü sayfası ekleyin:
// 添加插件设置菜单到后台
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' ); Ardından, bir geri çağırma (callback) fonksiyonu tanımlayın.mfp_options_page_htmlHTML formunu, ayar sayfasını renderlemek için kullanacağız. Aynı zamanda, seçenekleri güvenli bir şekilde kaydetmek, almak ve yönetmek için WordPress ayar API’sini kullanmamız gerekiyor. Basitlik adına, aşağıda basitleştirilmiş bir uygulama örneği bulunmaktadır:
Tavsiye edilen okuma WordPress Eklenti Geliştirme Kılavuzu: Başlangıçtan Profesyonel Seviye Genişletmelere。
// 设置页面的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
// 输出设置字段、非ce等安全字段
settings_fields( 'mfp_options_group' );
do_settings_sections( 'my-first-plugin' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="tr"/></form>
</div>
<?php
}
// 初始化插件设置
function mfp_settings_init() {
// 注册一个设置
register_setting( 'mfp_options_group', 'mfp_footer_text' );
// 添加一个设置区域
add_settings_section(
'mfp_section',
'自定义文本设置',
null,
'my-first-plugin'
);
// 向区域中添加字段
add_settings_field(
'mfp_field_footer',
'文章页脚文本',
'mfp_field_footer_html',
'my-first-plugin',
'mfp_section'
);
}
add_action( 'admin_init', 'mfp_settings_init' );
// 渲染文本输入字段
function mfp_field_footer_html() {
$option = get_option( 'mfp_footer_text', '感谢阅读!本文由“我的第一个插件”为您呈现。' );
?>
<input type='text' name='mfp_footer_text' value='<?php echo esc_attr( $option ); ?>' class='regular-text'>
<p class="description">Buraya girilen içerik, her makalenin sonunda görüntülenecektir.</p>
<?php
} Son olarak, önceki değişiklikleri düzeltin.mfp_append_to_contentFonksiyon, veritabanı seçeneklerinden yararlanacak şekilde ayarlanmalıdır.mfp_footer_textMetni sabit olarak kodlanmış (hard-coded) bir metin yerine, bir dosyadan okur.
Eklenti Güvenliği, Optimizasyonu ve Yayın Hazırlığı
Geliştirmenin son aşamasında güvenlik, kod kalitesi ve dağıtım süreçlerine dikkat edilmesi gerekmektedir; böylece eklentinin sağlam ve kullanılabilir olması sağlanır.
Güvenlik en iyi uygulamalarına uyun.
Tüm kullanıcı girdileri, tarayıcıya gönderilmeden veya veritabanına kaydedilmeden önce dönüştürülmeli veya doğrulanmalıdır. Çıktı sırasında ise…esc_html()、esc_attr()、esc_url()Bu fonksiyonlar, form gönderimleri veya AJAX istekleri sırasında kullanılır.wp_verify_nonce()和check_admin_referer()İsteklerin meşruiyetini doğrulamak ve çapraz sitelik istek sahteciliği (CSRF) saldırılarını önlemek için, asla doğrudan güvenmeyin.$_GET、$_POST或$_REQUESTVeriler içindeki bilgiler.
Uluslararası destek sağlamak
Eklentinin dünya genelindeki kullanıcılar tarafından kullanılabilmesi için, koddaki tüm kullanıcıya yönelik metinlerin uluslararasılaştırılması gerekmektedir. Bunu daha önceki örneklerde zaten gerçekleştirdik._e()Bir fonksiyon kullanarak çeviri metnini çıktı olarak alın. Ayrıca, eklentinin açıklama kısmında (comment section) bunu belirtmeniz gerekiyor.Text Domain和Domain Path。
Eklentinin başlatıldığı sırada (örneğin, bir işlem yoluyla)plugins_loaded(Köprü, kullanımı için)load_plugin_textdomain()Dil dosyalarını yüklemek için bir fonksiyon:
function mfp_load_textdomain() {
load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'mfp_load_textdomain' ); Daha sonra, Poedit gibi bir araç kullanarak eklentinin kaynak kodundan metin parçalarını çıkarabilirsiniz.__(), _e()(Dayanak olarak fonksiyonlar tarafından sarılan stringler kullanılarak) oluşturulur..potŞablon dosyası, çevirmenlerin kullanımı için hazırlanmıştır..po和.moDosya.
Kod Düzeni ve Performans Göz Önünde Bulundurulması
Eklentilerin işlevleri arttıkça, tüm kodun ana dosyada toplanmaması gerekir. Mantıklı bir yaklaşım, kodu işlevsel modüllere göre farklı dosyalara ayırmaktır..phpBu dosyalar içerisinde bulunur ve ana dosya aracılığıyla seçici bir şekilde bunlar içerilir. Örneğin, şu şekilde bir şey oluşturulabilir:includes/admin/Katalog, arka planda çalışan ilgili kodları içerir.includes/public/Ön uç (front-end) ile ilgili kodların saklandığı yer.includes/class-*.phpSınıf tanımlarının saklandığı yer.
Kaynak yoğun işlemler için, zaman alıcı sorguların sonuçlarını depolamak amacıyla WordPress’in Geçici Veriler (Transients API) özelliğini veya arka planda anlık olmayan görevleri işlemek için Zamanlanmış İşlemler (Cron API)’ni kullanmayı düşünebilirsiniz. Eklentilerin devre dışı bırakıldığında, kayıtlı kaldırma mekanizmaları aracılığıyla gerekli işlemlerin yapılmasını sağlayın.register_uninstall_hook()Oluşturulan verileri ve seçenekleri temizleyerek sitenin düzenli ve net görünmesini sağlayın.
Özetle.
Bu eğitim sayesinde, sıfırdan başlayarak işlevsel bir WordPress eklentisi oluşturma sürecini tamamladık. Eklentinin temel yapısını ve geliştirme ortamını oluşturmayla başladık ve standart yorum satırlarını içeren bir ana dosya oluşturduk. Daha sonra, eklentiyi WordPress sisteminize monte ederek devam ettik.admin_notices和the_contentBu iki temel “hook”, arka planda bildirimlerin gönderilmesini ve makale sayfalarının alt kısmında metinlerin yer almasını sağlar. Eklentinin kullanışlılığını artırmak için WordPress ayar API’sini de dahil ettik ve kullanıcıların metinleri özelleştirebileceği bir yönetim sayfası oluşturduk. Son olarak, eklenti geliştirme sürecinde çok önemli olan güvenlik uygulamaları, uluslararasılaştırma desteği ve kod organizasyonunun optimizasyonu gibi konuları ele aldık. Bu süreç, WordPress eklenti geliştirmenin temel prensiplerini açıkça göstermektedir: Zengin eylem hook’ları ve filtreler kullanarak yeni özellikler eklemek, API standartlarına uygun olarak arayüzler oluşturmak ve her zaman güvenliği ve sürdürülebilirliği öncelikli tutmak. Bu temelleri öğrendiğinizde, daha karmaşık eklentiler geliştirme konusunda da yetenekleriniz artmış olacaktır.
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; çünkü eklenti kodunun büyük bir kısmı PHP ile yazılmıştır. Aynı zamanda, ön uç gösterimi ve etkileşimi işleyebilmek için HTML, CSS ve JavaScript konularında temel bilgilere sahip olmanız gerekmektedir. WordPress’in temel kavramlarına aşina olmanız da çok önemlidir; özellikle temalar, makale türleri, kategoriler ve özellikle de Eklentiler sistemindeki “Kancalar” (Hooks – Action ve Filterler) konusunda bilgi sahibi olmanız gerekmektedir.
###
Bir WordPress eklentisinin en temelde hangi dosyaları içermesi gerekiyor?
En temel durumda, bir eklenti yalnızca bir PHP dosyası içerebilir. Ancak bu dosyanın en üst kısmında WordPress standartlarına uygun eklenti bilgilerini içeren yorum satırları (Plugin Headers) bulunmalıdır; örneğimizde de bunu görebilirsiniz.Plugin Name、DescriptionBu alanlar, WordPress’in bir eklentiyi tanımasını ve eklenti yönetim listesinde göstermesini sağlayan tek kriterlerdir.
###
Eklenti fonksiyonlarım ve değişkenlerim için nasıl isim vermem gerekiyor?
WordPress çekirdeği, temalar veya diğer eklentilerin kodlarıyla çakışmaları önlemek için, tüm özel fonksiyonlar, sınıflar, değişkenler ve sabitler benzersiz bir önek kullanmalıdır. Genellikle, eklentinin kısaltması veya adıyla ilgili bir önek kullanılması önerilir; örneğin, örneğimizde de bunu yaptık.mfp_(My First Plugin adına söz konusu olduğunda…) Sınıf adları da bu kurala uymalı ve mümkün olduğunca anlamlı, tam isimler kullanılmalıdır.
###
Eklentide oluşturulan veritabanı tabloları veya seçenekler, eklenti kaldırıldıktan sonra temizlenir mi?
Varsayılan olarak, hayır. Eğer bunu yapmak istiyorsanız…add_option()、update_option()Oluşturulan seçenekler veya özel olarak oluşturulan veritabanı tabloları, kullanıcılar WordPress arayüzü üzerinden eklenti dosyalarını sildiğinde veritabanında kalır. Temiz bir kaldırma deneyimi sunmak için bunları mutlaka temizlemeniz gerekir.register_uninstall_hook()Bir temizleme işlemi için geri çağrı fonksiyonu kaydetmek amacıyla bir fonksiyon kullanılır; bu fonksiyonda tüm eklentilerle ilgili seçenekler, veritabanı tabloları ve geçici önbellekler silinir.
###
Eklentimi daha fazla WordPress sürümüyle uyumlu hale getirmek için ne yapabilirim?
Kodunuzda çok yeni sürümlerdeki PHP veya WordPress’e özgü fonksiyonları kullanmaktan kaçının. Bir fonksiyonu, sınıfı veya eklentiyi kullanmadan önce, resmi dokümantasyonlarına bakarak hangi WordPress sürümünde tanıtıldığını öğrenin. Bunu, eklentinin ana dosyasındaki yorum satırlarında belirtebilirsiniz.Requires at least:Alan tanımlarında, desteklenen en düşük WordPress sürümü belirtilmelidir. Kodda, bu bilgi koşullu ifadelerle birlikte kullanılabilir.function_exists()或class_exists()Bir yedekleme planı veya kullanıcı dostu bir uyarı sağlamak için kontrol 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.
- 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