Neden özel eklentiler geliştirmeye ihtiyaç var?
WordPress, güçlü genişletilebilirliğiyle tanınır ve bu özelliğinin temel sırlarından biri de eklenti (plugin) sistemidir. Bir web sitesinin ihtiyaç duyduğu özellikler, temanın veya mevcut eklentilerin yeteneklerinin ötesine geçtiğinde, kendi eklentilerinizi geliştirmek en iyi seçenek haline gelir. Temayı doğrudan değiştirmek yerine… functions.php Bir dosyadan ziyade, bağımsız bir eklenti oluşturmanın önemli avantajları vardır. Eklentiler temalardan ayrıdır; bu da temayı değiştirdiğinizde bile eklentinin işlevlerinin tamamen korunacağı anlamına gelir ve böylece işlevlerin bağımsızlığı ile sürdürülebilirliği sağlanır. Ayrıca, iyi yapılandırılmış bir eklenti farklı web siteleri arasında kolayca taşınabilir ve yeniden kullanılabilir; hatta resmi veya üçüncü taraf kanallar aracılığıyla da dağıtılabilir.
Özel eklentiler geliştirmek, işlevsel mantığı tam olarak kontrol etmenizi sağlar ve çok sayıda genel eklenti yüklemesinden kaynaklanan performans sorunlarını ve olası kod çatışmalarını önler. Basit kısa kod üretiminden karmaşık veri işleme ve iş akışı yönetimine kadar, eklenti geliştirme, WordPress’i derinlemesine özelleştirmenin kapılarını açar.
İlk eklentinizin temel yapısını oluşturun.
Bir WordPress eklentisi esasen, klasöründe bulunan bir veya daha fazla dosyadan oluşur. wp-content/plugins/ Katalogdaki PHP dosyaları. Eklentinin ilk adımı, temel yapısını oluşturmaktır.
Tavsiye edilen okuma WordPress Eklenti Geliştirme Başlangıç Kılavuzu: Sıfırdan İlk İşlevsel Eklentinizi Oluşturun。
Ana eklenti dosyasını oluşturma ve başlık bilgilerini ekleyin.
Öncelikle, wp-content/plugins/ Katalogda yeni bir klasör oluşturun, örneğin… my-first-pluginDaha sonra, bu klasör içinde ana PHP dosyasını oluşturun; bu dosya genellikle klasörün adıyla aynı adı taşır:my-first-plugin.php。
Dosyanın başında, WordPress standartlarına uygun bir eklenti başlık yorumu bulunmalıdır; bu, WordPress’in eklentiyi tanımasının anahtarıdır. Bu yorumlar, eklentinin temel bilgilerini içerir ve arka plandaki eklenti yönetim sayfasında görüntülenir.
<?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 paneline giriş yapın ve “Eklentiler” sayfasına gidin. Orada “İlk Özelleştirilmiş Eklentim” adlı eklentiyi listede görmelisiniz; bu eklentiyi etkinleştirebilir veya devre dışı bırakabilirsiniz. Şu an için herhangi bir gerçek işlevi yoktur.
Eklenti işlevleri için güvenli bir paketleme oluşturun.
Fonksiyon adlarının temalar veya diğer eklentilerle çakışmasını önlemek için en iyi uygulama, tüm işlevleri bir sınıf içinde paketlemek veya tüm fonksiyonlara benzersiz bir önek eklemektir. Burada sınıf yöntemini kullanıyoruz; bu da daha iyi bir kapsülleme ve organizasyon yapısı sağlar.
Ana dosyada, başlık yorumlarının ardından, eklentinin ana sınıfını tanımlamaya başlayabiliriz.
Tavsiye edilen okuma WordPress Eklenti Geliştirme Kılavuzu: İlk İşlevsel Eklentinizi Sıfırdan Oluşturun。
if ( ! defined( 'ABSPATH' ) ) {
exit; // 防止直接访问文件
}
class My_First_Plugin {
/**
* 构造方法,用于初始化插件
*/
public function __construct() {
// 初始化钩子
$this->init_hooks();
}
/**
* 初始化 WordPress 钩子(动作和过滤器)
*/
private function init_hooks() {
// 后续的钩子将在这里添加
}
}
// 初始化插件
new My_First_Plugin(); geçmek (bir fatura veya teftiş vb.) if ( ! defined( 'ABSPATH' ) ) Bu kod sayesinde dosyanın yalnızca WordPress ortamı aracılığıyla erişilebilmesini sağladık ve böylece güvenliği artırdık. Artık, eklentinin temel yapısı hazır durumda.
WordPress’in çekirdek işlevlerini hook’lar kullanarak genişletmek
WordPress’in eklenti API’sinin temeli “kancalar” (Hooks)’dır; bu sayede belirli zaman noktalarında veya belirli verilere karşı özelleştirilmiş kodlar çalıştırabilirsiniz. Kancalar iki türe ayrılır: Eylemler (Actions) ve Filtreler (Filters).
Bir basit eylem kancasını anlayın ve ekleyin.
Eylem kancaları, belirli bir olay meydana geldiğinde kodunuzu çalıştırır; örneğin bir makale yayınlamak, yönetim sayfasını yüklemek gibi. Herhangi bir değer döndürmezler; sadece belirli bir işlemi gerçekleştirirler.
Hadi bir özellik ekleyelim: Her makalenin içeriğinin sonuna otomatik olarak özelleştirilmiş bir metin parçası eklesin. Bunu kullanacağız. the_content Bu filtre (evet, adı “filtre” olsa da aslında içerik eklemek için sıkça kullanılır; teknik olarak bir filtre çünkü içerik alır ve geri gönderir), ancak önce saf bir işlemi göstermek için arka planda bir mesajın yönetim panelinde görüntülenmesini sağlayan bir işlemi de aynı anda ekleyeceğiz.
Öncelikle, init_hooks Metoda bir kancalı (hook) kaydı ekleyin:
private function init_hooks() {
// 在文章内容末尾添加信息的过滤器
add_filter( 'the_content', array( $this, 'append_custom_text' ) );
// 在管理栏添加节点的动作
add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_node' ), 999 );
} Ardından, sınıf içinde ilgili geri çağırma (callback) metodunu tanımlayın:
Tavsiye edilen okuma WordPress Eklenti Geliştirme Kılavuzu: Başlangıçtan Uzmanlığa Kadar Özel İşlevler Oluşturma。
/**
* 在文章内容末尾添加自定义文本(过滤器回调)
*
* @param string $content 原始文章内容。
* @return string 修改后的文章内容。
*/
public function append_custom_text( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_text = '<p><em>Bu metin, “Benim İlk Eklentim” tarafından teknik destek sağlanmaktadır.</em></p>';
$content .= $custom_text;
}
return $content;
}
/**
* 在管理工具栏添加一个自定义节点(动作回调)
*
* @param WP_Admin_Bar $wp_admin_bar WordPress 管理栏对象。
*/
public function add_admin_bar_node( $wp_admin_bar ) {
$args = array(
'id' => 'my_plugin_node',
'title' => '我的插件',
'href' => admin_url( 'plugins.php' ),
'meta' => array( 'class' => 'my-plugin-node' )
);
$wp_admin_bar->add_node( $args );
} Şimdi, eklenti etkinleştirildikten sonra, ön taraftaki tek bir makalenin alt kısmında eklenen metin görünecek ve arka taraftaki üst yönetim çubuğunda “Benim Eklentilerim” adında bir menü öğesi de yer alacaktır.
Veri çıktısını değiştirmek için filtreler kullanın.
Filtreler, belirli bir noktada iletilen verileri değiştirmek için kullanılır. Bir değer alır ve değiştirilmiş değeri geri döndürmelidir. Yukarıda kullandığımız da bu prensibe dayanıyordu. append_custom_text Aslında bir metot, bir filtre işlevinin geri çağrısıdır (filter callback). Şimdi daha tipik bir filtre örneği daha oluşturalım: Makale özetlerinin uzunluğunu değiştirelim.
在 init_hooks Ekleme:
add_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), 999 ); Ardından geri çağırma (callback) metodunu tanımlayın:
/**
* 修改文章摘要的默认字数长度
*
* @param int $length 默认的摘要长度。
* @return int 修改后的摘要长度。
*/
public function custom_excerpt_length( $length ) {
// 将摘要长度设置为 30 个字
return 30;
} Yapılandırılabilir bir eklenti seçenekleri sayfası oluşturun.
Eklentiyi daha esnek hale getirmek için genellikle kullanıcılara bir ayar sayfası sunulması gerekmektedir. WordPress, seçenek sayfalarını güvenli ve standart bir şekilde oluşturmak için “Ayar API’si” (Settings API) sağlar.
Yönetim menüsü ve alt sayfalar oluşturun.
Öncelikle, WordPress arayüzünün arka planında (panosunda) bir menü öğesi eklememiz gerekiyor. Bunun için şu adımları izleyeceğiz: add_options_page Fonksiyon, “Ayarlar” ana menüsü altına bir alt sayfa ekler.
在 init_hooks Eylemi ekleyin:
add_action( 'admin_menu', array( $this, 'add_plugin_admin_menu' ) ); Menü eklemenin yöntemini tanımlayın:
/**
* 向 WordPress 后台添加插件设置页面
*/
public function add_plugin_admin_menu() {
add_options_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限
'my-first-plugin', // 菜单 Slug
array( $this, 'display_plugin_admin_page' ) // 回调函数
);
} Ayar API’sini kullanarak alanları kaydedin ve görüntüleyin.
Sonraki adımda, bir tanım yapmamız gerekir. display_plugin_admin_page Sayfa içeriğini renderlemek için yöntemler ve ayarları, alanları ve bölümleri kaydetmek için gerekli işlemler.
Öncelikle, ayarları kaydetmek için başka bir “kancaya” (hook) ekleyin:
add_action( 'admin_init', array( $this, 'register_plugin_settings' ) ); Ardından ilgili metodları uygulayın:
/**
* 使用 WordPress 设置 API 注册设置、字段和章节
*/
public function register_plugin_settings() {
// 注册一个设置,存储到一个选项 `my_first_plugin_options`
register_setting(
'my_first_plugin_options_group', // 选项组名
'my_first_plugin_options' // 选项名
);
// 添加一个设置章节
add_settings_section(
'my_first_plugin_main_section', // 章节 ID
'主要设置', // 章节标题
array( $this, 'render_section_description' ), // 章节描述回调
'my-first-plugin' // 页面 Slug
);
// 向章节中添加一个文本字段
add_settings_field(
'custom_text_field', // 字段 ID
'自定义文本', // 字段标题
array( $this, 'render_text_field' ), // 字段渲染回调
'my-first-plugin', // 页面 Slug
'my_first_plugin_main_section' // 所属章节 ID
);
}
/**
* 渲染设置章节的描述文字
*/
public function render_section_description() {
echo '<p>Burada ilk eklentinizin ayarlarını yapılandırın.</p>';
}
/**
* 渲染自定义文本输入字段
*/
public function render_text_field() {
$options = get_option( 'my_first_plugin_options' );
$value = isset( $options['custom_text_field'] ) ? $options['custom_text_field'] : '';
echo '<input type="text" name="my_first_plugin_options[custom_text_field]" value="' . esc_attr( $value ) . '" class="regular-text" />'echo '<p class="description">Buraya girilen metin, makalenin sonunda gösterilecektir.</p>';
}
/**
* 渲染插件管理页面的主要内容
*/
public function display_plugin_admin_page() {
// 检查用户权限
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( 'my_first_plugin_options_group' );
do_settings_sections( 'my-first-plugin' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="tr"/></form>
</div>
<?php
} Son olarak, önceki çalışmayı değiştirmemiz gerekiyor. append_custom_text Metot: Kullanıcının kaydettiği metni seçenekler arasından okur.
public function append_custom_text( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$options = get_option( 'my_first_plugin_options' );
$custom_text = isset( $options['custom_text_field'] ) && ! empty( $options['custom_text_field'] ) ?
'<p><em>'`. esc_html($options['custom_text_field'])`.'</em></p>' :
'<p><em>Bu metin, “Benim İlk Eklentim” tarafından teknik destek sağlanmaktadır.</em></p>';
$content .= $custom_text;
}
return $content;
} Artık kullanıcılar, “Ayarlar” -> “Benim Eklentilerim” sayfasında makalelerin sonunda görüntülenecek metni özelleştirebilirler.
Özetle.
Bu kılavuz aracılığıyla, bir WordPress özelleştirilmiş eklentisi geliştirmenin temel sürecini tamamen izledik: Temel dosya yapısını ve güvenli kod paketlemeyi oluşturmaktan başlayarak, WordPress’in çekirdek genişletme mekanizmaları olan eylemler (actions) ve filtreler (filters) hakkında derinlemesine bilgi edinmeye ve bunları kullanmaya kadar ilerledik; son olarak, arka plan ayar sayfalarını içeren, yapılandırılabilir bir eklenti geliştirdik. WordPress ayar API’sini nasıl standart bir şekilde kullanarak seçenek sayfaları oluşturacağımızı gösterdik; bu da verilerin güvenli bir şekilde saklanmasını ve arayüzün tutarlılığını sağladı.
Bu temel bilgileri öğrenmek, daha karmaşık eklentiler geliştirmeye doğru atılan sağlam bir adımdır. Daha sonra, özel veritabanı tabloları oluşturma, kısa kodlar yazma, widget’lar ekleme, REST API uç noktaları geliştirme ve AJAX etkileşimleri sağlama gibi daha ileri konuları inceleyebilirsiniz. Unutmayın ki, iyi bir kod organizasyonu, yeterli güvenlik kontrolleri (yetki kontrolü, veri temizleme ve escape işlemleri) ve WordPress kodlama standartlarına uyum, yüksek kaliteli ve sürdürülebilir eklentiler geliştirmenin anahtarıdır.
Sıkça Sorulan Sorular.
Eklenti geliştirmek için hangi ön koşul bilgilerine ihtiyaç vardır?
PHP programlama dilinin temel bilgilerine sahip olmanız gerekmektedir; bu bilgiler arasında sözdizimi, değişkenler, fonksiyonlar, sınıflar ve nesneler gibi kavramlar yer almaktadır. Aynı zamanda HTML, CSS ve JavaScript konularında da temel bir bilgiye sahip olmanız oldukça faydalı olacaktır, özellikle ön uç etkileşimleri veya karmaşık arka uç arayüzlerini içeren eklentiler oluştururken. WordPress’in temel işlemlerini ve mimarisini bilmek de şarttır.
Geliştirilmekte olan bir eklentiyi nasıl hata ayıklarsınız?
Öncelikle, emin olun ki sizin… wp-config.php Dosyada, WP_DEBUG Ayarları yapın. trueBu, WordPress’in hata raporlama özelliğini aktive edecektir. JavaScript hatalarını ve ağ isteklerini incelemek için tarayıcınızın geliştirici araçlarını (Console ve Network sekme sayfaları) kullanın. PHP kodu için ise… error_log() Fonksiyon, değişkenleri veya bilgileri sunucunun hata ayıklama (debugging) günlüğüne kaydeder; ayrıca, kodun çalışma akışını ve değişkenlerin durumunu izlemek için özel hata ayıklama eklentileri kullanılabilir.
Konunun functions.php kodunu doğrudan eklentilere taşıyabilir miyiz?
Birçok durumda bu mümkündür, ancak yol ve URL referanslarına dikkat etmek gerekmektedir. Konu içinde kullanılabilir. get_template_directory_uri() Konu dizini URI’sini almak için, eklentide bunun yerine şu kullanılmalıdır: plugin_dir_url(FILE)Aynı şekilde, konu dizini yol fonksiyonu get_template_directory() Ayrıca, bunlar da eklentilerle değiştirilmelidir. plugin_dir_path(FILE)Ayrıca, koddaki tüm işlevlerin çakışmaları önlemek için uygun şekilde sınıflar veya önekli fonksiyonlar içinde paketlendiğinden emin olun.
Ticari eklentiler geliştirirken nelere dikkat edilmesi gerekiyor?
Ticari eklentilerin geliştirilmesi sırasında, kod kalitesine, güvenliğe ve genişletilebilirliğe daha fazla önem verilmelidir. Ayrıca, eklentilerin kapsamlı bir şekilde uluslararasılaştırılması ve yerelleştirilmesi için gerekli hazırlıkların yapılması şarttır (uygun araçlar kullanılarak). __()、_e() Fonksiyonlar ve metin alanları (text fields) dikkate alınarak, kodun WordPress kodlama standartlarına uygun olması gerekmektedir. Lisansın (genellikle GPL) ve sonraki güncelleme mekanizmalarının da göz önünde bulundurulması önemlidir. Eklentinin açık ve ayrıntılı kullanım kılavuzları ile teknik destek kanallarının sağlanması da çok önemlidir. 2026 yılındaki WordPress ekosisteminde, eklentinin yeni sürümlerle, PHP sürümleriyle, popüler temalarla ve diğer eklentilerle uyumlu olması, sürekli bakımın önemli bir parçasıdır.
Bir eklene (plugin) nasıl çok dil desteği eklenir?
WordPress, uluslararasılaştırma (i18n) işlemlerini GNU gettext teknolojisi kullanarak gerçekleştirir. Öncelikle, eklentilerde çevrilmeye ihtiyaç duyan tüm metinler belirli fonksiyonlar kullanılarak sarılmalıdır. __('文本', 'my-first-plugin') Çeviriyi geri döndürmek için kullanılır._e('文本', 'my-first-plugin') Çeviriyi çıkarmak için kullanılır. Daha sonra, Poedit gibi bir araçla eklentinin kaynak kodunu tarayarak çeviri sonuçlarını oluşturur. .pot Şablon dosyası. Çevirmen, bu şablonu temel alarak ilgili dil için gerekli dosyaları oluşturmuştur. .po Dosyaları alın ve bunları makine tarafından okunabilir hale getirin (yani derleyin). .mo Dosya. Son olarak, şunu yapmak gerekiyor: load_plugin_textdomain() Fonksiyon, çeviri dosyalarının doğru yoldan yüklenmesini sağlamak için eklenti başlatma koduna entegre edilmiştir.
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