Hazırlık İşlemleri ve Ortam Ayarları
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 bazı temel bilgilere sahip olmayı içerir.
Öncelikle, yerel bir sunucu ortamınızın olduğundan emin olun. XAMPP, MAMP, Local by Flywheel veya Docker gibi araçları kullanarak hızlı bir şekilde bir sunucu ortamı oluşturabilirsiniz. WordPress’i yükleyip yapılandırdıktan sonra, çevrimiçi web sitenizi etkileme endişesi olmadan testler yapabileceğiniz güvenli bir ortama sahip olursunuz.
İkincisi, elinizin altında kullanışlı bir kod editörü olması gerekiyor. Visual Studio Code, PhpStorm veya Sublime Text gibi araçlar mükemmel seçeneklerdir; PHP, HTML, JavaScript ve CSS dillerini iyi bir şekilde desteklerler ve kod vurgulama, otomatik tamamlama ve hata ayıklama gibi özelliklere sahiptirler.
Tavsiye edilen okuma Sıfırdan Bir: WordPress Eklenti Geliştirme Başlangıç Kılavuzu ve En İyi Uygulamalar。
Son olarak, WordPress eklentilerinin temel yapısını anlamak çok önemlidir. Bir eklenti, esasen WordPress’in kurulum dizini içinde bulunan bir veya daha fazla PHP dosyasından oluşur. /wp-content/plugins/ Klasörde bulunmaktadır. Her eklentinin, WordPress sisteminine kendisini tanıtmak için kullanılan belirli eklenti başlık bilgilerini içeren bir ana dosyası olmalıdır.
Eklenti ana dosyasının oluşturulması ve tanımlanması
Eklenti oluşturmanın ilk adımı, ana dosyayı oluşturmak ve doğru başlık bilgilerini eklemektir. Bu dosya genellikle eklentinin işlevine göre adlandırılır; örneğin: my-first-plugin.phpLütfen bunu yerel ortamınızda yapın. /wp-content/plugins/ Bir dizin altında yeni bir klasör oluşturun ve buna bir ad verin. my-first-pluginDaha sonra bu klasör içinde ana dosyayı oluşturun.
Eklenti başlığı, eklentinin meta bilgilerinin toplamıdır ve WordPress’e eklentinin adını, açıklamasını, sürümünü, yazarını vb. bilgileri verir. İşte en temel bir eklenti başlığı örneği:
<?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
* Domain Path: /languages
*/ Bu dosyayı kaydettikten sonra, WordPress arayüzüne giriş yapın ve “Eklentiler” sayfasına gidin. “İlk Fonksiyonel Eklentim” adında yeni bir eklentinin eklenti listesinde yer aldığını görmelisiniz. Bu eklentiyi aktive edebilirsiniz; ancak henüz herhangi bir gerçek işlevi yoktur.
Core Architecture: Action and Filter Hooks
WordPress’in güçlü genişletilebilirliğinin temeli, geliştiricilerin belirli zaman noktalarında veya veriler kullanılmadan önce/sonra kendi kodlarını eklemelerine olanak tanıyan Hook (Kancalar) sistemidir. Hook’lar iki türe ayrılır: Eylemler (Actions) ve Filtreler (Filters).
Tavsiye edilen okuma WordPress Tema Geliştirme Başlangıç Kılavuzu: Sıfırdan Kendi Özel Web Sitesi Şablonunuzu Oluşturun。
Eylem kancaları, belirli WordPress olayları gerçekleştiğinde özel fonksiyonlarınızı çalıştırmanıza olanak tanır. Örneğin, bir makale yayınlandığında…publish_postMenüyü yönetim arayüzünden yüklerken…admin_menuVeya bir betiği web sayfasının baş kısmında yüklerken…wp_enqueue_scriptsKullanın. add_action() Bu fonksiyon, kendi fonksiyonunuzu bir eylem kancasına (action hook) bağlamak için kullanılır.
Aksiyon kancalarını kullanarak arka plan menüsü ekleyin.
Diyelim ki, bir eklenti için WordPress arayüzüne bir ayar sayfası eklemek istiyoruz. Bunu yapmak için şu adımları izleyeceğiz: admin_menu Bu eylem için bir “hook” (düğüm). Kodu ana dosyanıza, eklenti başlık bilgilerinin hemen ardına ekleyin:
İdari arayüzde menü eklemek
function mfp_add_admin_menu() {
add_menu_page(
'My Plugin Settings', // Sayfa başlığı
'My Plugin', // Menü başlığı
'manage_options', // Gerekli izinler
'my-first-plugin', // Menü slug'ı
'mfp_settings_page', // Sayfa içeriğini göstermek için kullanılan çağrı fonksiyonu
'dashicons-admin-generic', // İkon (isteğe bağlı)
80 // Menü konumu (isteğe bağlı)
);
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );
// Sayfa çağrı fonksiyonu ayarlama
function mfp_settings_page() {
?>
<div class="wrap">
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
<p>İlk eklentimin ayar sayfasına hoş geldiniz!</p>
</div>
<?php
} Filtre kancaları, verileri değiştirmenize olanak tanır. Bir değer alırlar ve bu değer, fonksiyonunuz tarafından işlendikten sonra değiştirilmiş bir değer olarak döndürülmelidir. Örneğin, bir makalenin başlığını değiştirmek için…the_titleMakale içeriğini değiştirmek (Modify the article content)the_contentVeya alıntı uzunluğunu değiştirin.excerpt_lengthKullanın. add_filter() Bu fonksiyon, kendi fonksiyonunuzu filtre kancalarına (filter hooks) bağlamak için kullanılır.
Makale içeriğini filtreler kullanarak değiştirin.
Hadi basit bir özellik oluşturalım: Her makalenin içeriğinin sonuna otomatik olarak bir telif hakkı bildirimi ekleyelim.
// 在文章内容后添加自定义文本
function mfp_add_copyright_to_content( $content ) {
// 仅对网站前端的主循环中的文章生效
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_text = '<p><em>Telif Hakkı Bildirimi: Bu metnin içeriği sadece bu siteye aittir. Kaynağı belirterek yeniden yayımlanabilir.</em></p>'İçeriğe telif hakkı eklemek istiyorsanız, bu kodu kullanabilirsiniz:
function mfp_add_copyright_to_content( $content ) {
if ( !is_single() ) {
$custom_text = get_the_custom_text();
if ( !empty( $custom_text ) ) {
$content = $custom_text . PHP_EOL . $content;
}
}
return $content;
}
add_filter( 'the_content', 'mfp_add_copyright_to_content' ); Belirli bir işlevi gerçekleştirme: Kısa kodlar ve özet kodlar
Kısa kodlar (Shortcodes), WordPress tarafından sunulan güçlü bir özelliktir ve kullanıcıların makalelerine veya sayfalara basit bir etiket ekleyerek belirli işlemleri gerçekleştirmesine olanak tanır. [my_shortcode]Bu, karmaşık dinamik içeriklerin oluşturulmasına veya belirli işlevlerin yerine getirilmesine olanak tanır. İçerik üreticilerine büyük bir esneklik sağlar.
Basit bir kısayol oluşturun ve kaydedin.
Bir kısayol oluşturmak iki adımdan oluşur: Öncelikle kısayol işleme fonksiyonunu tanımlayın, ardından bunu kullanın. add_shortcode() Fonksiyon, WordPress’e kaydedilir. Şimdi de mevcut tarihi ve bir selamı gösteren basit bir kısayol (shortcode) oluşturalım.
Tavsiye edilen okuma Rahatça Başlayıp Uzmanlaşmaya: WordPress Eklenti Geliştirme Kapsamlı Rehberi ve Pratik Eğitim Kursu。
// 定义简码的处理函数
function mfp_show_greeting_shortcode( $atts ) {
// 使用 shortcode_atts 定义默认参数,并合并用户传入的参数
$atts = shortcode_atts(
array(
'name' => '访客',
),
$atts,
'greeting'
);
// 获取当前时间
$current_time = current_time( 'mysql' );
$hour = date( 'H', strtotime( $current_time ) );
// 根据时间生成问候语
if ( $hour < 12 ) {
$greeting = '上午好';
} elseif ( $hour < 18 ) {
$selam = 'Öğleden sonra merhaba';
} else {
$selam = 'İyi akşamlar';
}
// Çıktıyı oluştur
$output = '<div class="mfp-greeting">'$output .= sprintf( '<p>%s, %s!</p>'`, esc_html($atts['name'])`, esc_html($greeting));
$output .= sprintf('<p>Mevcut zaman: %s</p>'`, esc_html($current_time) );
$output .= '</div>'İlk parametre kullanıcının kullandığı etiket adıdır.
add_shortcode( 'greeting', 'mfp_show_greeting_shortcode' ); Şimdi, kullanıcılar makale düzenleyicisinde bunu kullanabilirler. [greeting name="张三"]Sayfada şu mesaj görüntülenecektir: “Zhang San, iyi günler! Şu anki saat: 2026-...”. Eğer herhangi bir parametre belirtilmezse, varsayılan olarak “Ziyaretçi” kullanılır.
İleri Seviye Uygulama: Veritabanı Tabloları ve Seçenek Sayfaları Oluşturma
Daha karmaşık eklentilerin kendi verilerini saklaması gerekebilir. WordPress, iki ana yöntem sunar: Basit anahtar-değer verilerini saklamak için WordPress Options API’sini kullanmak veya yapılandırılmış verileri saklamak için özel veritabanı tabloları oluşturmak.
Ayarları kaydetmek için seçenek API’sini kullanın.
Option API, eklentilerin yapılandırma bilgilerini saklamak için çok uygundur. Daha önce oluşturduğumuz arka plan ayarları sayfasını geliştireceğiz; böylece basit ayarları kaydedebilecek ve okuyabilecek.
Öncelikle, bir form oluşturmamız gerekiyor. mfp_settings_page() Fonksiyonda, ayarları işlemek için basit bir form ekleyin:
function mfp_settings_page() {
// 检查用户是否提交了表单
if ( isset( $_POST['mfp_submit_settings'] ) ) {
// 安全检查:验证 nonce
if ( ! isset( $_POST['mfp_settings_nonce'] ) || ! wp_verify_nonce( $_POST['mfp_settings_nonce'], 'mfp_save_settings' ) ) {
wp_die( '安全验证失败!' );
}
// 权限检查
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( '权限不足!' );
}
// 清理并保存选项
$custom_message = sanitize_textarea_field( $_POST['custom_message'] );
update_option( 'mfp_custom_message', $custom_message );
echo '<div class="notice notice-success is-dismissible"><p>Ayarlar kaydedildi!</p></div>';
}
// 从数据库读取现有值
$saved_message = get_option( 'mfp_custom_message', '这是默认的欢迎信息。' );
?>
<div class="wrap">
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
<form method="post" action="" data-trp-original-action="">
<?php wp_nonce_field( 'mfp_save_settings', 'mfp_settings_nonce' ); ?>
<table class="form-table">
<tr>
<th scope="row"><label for="custom_message">Özelleştirilmiş Mesaj:</label></th>
<td>
<textarea name="custom_message" id="custom_message" rows="5" cols="50" class="large-text"><?php echo esc_textarea( $saved_message ); ?></textarea>
<p class="description">Bu metin, [show_message] kısayolunu kullanıldığında görüntülenecektir.</p>
</td>
</tr>
</table>
<?php submit_button( '保存更改', 'primary', 'mfp_submit_settings' ); ?>
<input type="hidden" name="trp-form-language" value="tr"/></form>
</div>
<?php
} Daha sonra, kaydedilen bu mesajı göstermek için yeni bir kısayol oluşturuyoruz:
function mfp_show_message_shortcode() {
$message = get_option( 'mfp_custom_message', '这是默认的欢迎信息。' );
return '<div class="mfp-custom-message">'`. wp_kses_post( wpautop( '$message' ) ). `'</div>'add_shortcode( 'show_message', 'mfp_show_message_shortcode' ); Artık, yöneticiler eklenti ayarları sayfasında mesajları özelleştirebiliyor; yazarların ise sadece makalelerinde bu mesajları kullanmaları yeterli. [show_message] Bu mesajı basit bir kısayol ile de gönderebilirsiniz.
Eklenti etkinleştirildiğinde özel bir tablo oluşturulur.
Siparişler, günlük kayıtlar gibi karmaşık ilişkisel verilerin saklanması gereken eklentiler için kendi veritabanı tablolarının oluşturulması gerekebilir. Bu işlem genellikle eklentinin etkinleştirildiği sırada gerçekleştirilir. WordPress bunun için gerekli altyapıyı sağlar. register_activation_hook Aktifleştirildiğinde çalışacak fonksiyonu tanımlayın.
Not: Aşağıdaki kod sadece bir örnektir; gerçek geliştirme süreçlerinde daha sağlam hata işleme mekanizmalarına ve veritabanı soyutlama katmanlarına ihtiyaç vardır. $wpdb) kullanımı.
// 插件激活时运行的函数
function mfp_create_custom_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'mfp_plugin_logs'; // 确保表名唯一
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
log_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
user_id bigint(20) DEFAULT 0,
action varchar(255) NOT NULL,
details text,
PRIMARY KEY (id)
) $charset_collate;";
// 引入 WordPress 升级 API,用于执行 dbDelta 函数
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}
// 注册激活钩子
register_activation_hook( __FILE__, 'mfp_create_custom_table' ); Özetle.
Bu rehber sayesinde WordPress eklenti geliştirmenin temel süreçlerini öğrendiniz. Ortam kurmaktan ve eklenti başlığını yazmaya başlayarak, eklentilerin işlevlerini genişletmek için eylem (action) ve filtre (filter) mekanizmalarını kullanmayı öğrendiniz. Kısayollar (shortcodes) aracılığıyla kullanıcılara esnek içerik ekleme imkanları sundunuz ve ayarları saklamak için seçenek API’sini (option API) kullanmayı, ayrıca özel veritabanı tabloları oluşturmanın temel yöntemlerini uyguladınız. Bunlar, işlevsel bir eklenti geliştirmenin temel taşlarıdır. Unutmayın ki, iyi bir kod yapısı, güvenlik (örneğin nonce doğrulama ve yetki kontrolü) ve uluslararasılaştırma (internationalization) hazırlığı, profesyonel eklenti geliştirmede vazgeçilmez unsurlardır. Bir sonraki adımda, WordPress REST API’sini, özel makale türlerini (custom article types), meta verileri (Meta Boxes) ve ön uç betiklerini (frontend scripts) ile stilleri (styles) kullanarak daha karmaşık ve güçlü eklentiler geliştirebilirsiniz.
Sıkça Sorulan Sorular.
Bir eklentinin yalnızca bir ana dosyası olabilir mi?
Öyle değil. Bir eklenti birden fazla PHP dosyası içerebilir. Ancak, eklentinin başlık bilgilerini içeren ve WordPress’in eklentiyi tanımasını sağlayan bir ana dosya olmalıdır. Karmaşık eklentiler genellikle farklı işlevleri yerine getiren kodları birden fazla dosyada organize eder ve bu kodları ana dosya aracılığıyla çağırır; bu sayede daha iyi bir kod yönetimi ve modülerlik sağlanır.
Kullanıcıların ön uç formları aracılığıyla gönderdiği verileri nasıl güvenli bir şekilde işleyebiliriz?
Kullanıcıların gönderdiği verileri işlerken, sıkı bir doğrulama, temizleme ve escape işlemi yapılmalıdır. Girdiler için… sanitize_text_field()、sanitize_email()、sanitize_textarea_field() Temizlik için `filter()` ve benzeri fonksiyonlar kullanılır. HTML sayfasına çıkarılan veriler için ise… esc_html()、esc_attr() 或 wp_kses_post() Eşzamansız (asynchronous) işlemler gerçekleştirin. Aynı zamanda, siteler arası istek sahteciliğini (cross-site request forgery – CSRF) önlemek için WordPress’in nonce (rastgele sayı) mekanizmasını mutlaka kullanın. current_user_can() Kullanıcı yetkilerini kontrol edin.
Eklentim, diğer eklentilerle fonksiyon adı çatışmalarından nasıl kaçınır?
En iyi uygulama, ad alanları (PHP 5.3 ve üzeri) kullanmaktır veya tüm fonksiyonları, sınıfları ve sabitleri belirli bir önek altında toplamaktır. Örneğin, bu kılavuzdaki tüm fonksiyonlar “mfp_” (My First Plugin’in kısaltması) ile başlamaktadır. Eğer nesne yönelimli programlama kullanıyorsanız, kodu sınıflar içinde paketlemek de ad çakışmalarını çözmenin etkili bir yoludur.
Geliştirme işlemi tamamlandıktan sonra, eklentiyi nasıl dağıtabilir veya resmi kataloga ekleyebilirsiniz?
Eklentiyi WordPress.org’un resmi eklenti kataloğuna göndermek için, kataloğun standartlarına uygun bir eklenti paketi oluşturmanız gerekmektedir. Bu genellikle standartlaştırılmış bir dosya yapısını içerir. README.txtAyrıca, ayrıntılı çeviri desteği, uyumluluk beyanları ve kodun WordPress kodlama standartlarına uygun olması gerekmektedir. WordPress.org üzerinden bir geliştirici hesabı oluşturmanız gerekmektedir; ardından kodu belirtilen kod deposuna SVN aracılığıyla göndermelisiniz.
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?
- WordPress alt teması nedir?
- WooCommerce Kapsamlı Kılavuzu: Sıfırdan Online Mağazanızı ve Satış Stratejinizi Oluşturun
- Web sitesinin performansını ve güvenliğini her yönüyle artıracak 10 önerilen WordPress eklentisi: