WordPress, içerik yönetim sistemleri (CMS) arasında en yaygın kullanılan platformlardan biridir. Geliştiriciler için sunduğu API’ler ve esnek yapısı sayesinde, eklenti geliştirme oldukça güçlü ve genişletilebilir bir deneyim sunar. Ancak günümüzde WordPress eklentilerinde fonksiyon bazlı (procedural) yaklaşımların yerini nesne yönelimli programlama (OOP – Object Oriented Programming) metodolojileri almaya başlamıştır. Bu makalede, OOP yaklaşımıyla modern WordPress eklenti geliştirme süreci detaylı şekilde ele alınacaktır.
Neden OOP?
WordPress’in geleneksel eklenti yapısı genellikle fonksiyonlara dayanır. Bu yapı küçük ölçekli projeler için yeterli olsa da, karmaşık eklentilerde kod tekrarına, bakım zorluğuna ve güvenlik açıklarına neden olabilir. OOP ise şu avantajları sunar:
- Kodun yeniden kullanılabilirliği (reusability)
- Daha kolay test edilebilirlik
- Bakımı kolay, modüler yapı
- Kod organizasyonunda netlik ve esneklik
- Modern yazılım mimarilerine (MVC, SOLID vb.) uyumluluk
WordPress’te OOP Temelleri
OOP’nin temellerini anlamak, WordPress içinde nasıl kullanılacağını kavramak açısından önemlidir. Aşağıdaki kavramlar bir eklenti geliştirirken sıkça kullanılır:
- Sınıflar (Classes): Fonksiyonlar ve değişkenler bir sınıf altında toplanır.
- Nesneler (Objects): Sınıflardan oluşturulan canlı örneklerdir.
- Miras (Inheritance): Bir sınıf başka bir sınıfın özelliklerini devralabilir.
- Kapsülleme (Encapsulation): Verinin dış dünyadan korunmasıdır.
- Polimorfizm: Aynı fonksiyonun farklı sınıflarda farklı işlev göstermesi.
OOP ile Eklenti Yapısı Nasıl Kurulur?
Modern bir WordPress eklentisi geliştirirken, projenizi aşağıdaki gibi yapılandırmanız önerilir:
my-plugin/
│
├── includes/
│ ├── Admin/
│ │ └── Settings.php
│ ├── Frontend/
│ │ └── Shortcode.php
│ ├── Core/
│ │ ├── Plugin.php
│ │ └── Loader.php
│ └── Helpers/
│ └── Utils.php
│
├── my-plugin.php
└── uninstall.php
Bu yapı sayesinde kodlarınız, sorumluluklarına göre ayrılmış olur ve her bir sınıf sadece kendi görevini üstlenir. Bu prensip, Single Responsibility Principle (SRP) adıyla SOLID prensiplerinin ilkidir.
Ana Eklenti Dosyası (my-plugin.php)
/**
* Plugin Name: My Plugin
* Description: OOP tabanlı modern WordPress eklenti örneği.
*/
require_once plugin_dir_path(__FILE__) . 'includes/Core/Plugin.php';
function run_my_plugin() {
$plugin = new \MyPlugin\Core\Plugin();
$plugin->run();
}
run_my_plugin();
Bu dosya, eklentinin başlangıç noktasıdır ve gerekli sınıf dosyalarını yükleyerek çalıştırır.
Loader Sınıfı
namespace MyPlugin\Core;
class Loader {
protected $actions = [];
public function add_action($hook, $component, $callback, $priority = 10, $accepted_args = 1) {
$this->actions[] = compact('hook', 'component', 'callback', 'priority', 'accepted_args');
}
public function run() {
foreach ($this->actions as $hook) {
add_action($hook['hook'], [$hook['component'], $hook['callback']], $hook['priority'], $hook['accepted_args']);
}
}
}
Bu sınıf, tüm add_action() ve add_filter() işlemlerini merkezi bir yerden yönetmenizi sağlar.
Plugin Sınıfı
namespace MyPlugin\Core;
use MyPlugin\Admin\Settings;
use MyPlugin\Frontend\Shortcode;
class Plugin {
protected $loader;
public function __construct() {
$this->loader = new Loader();
$this->define_admin_hooks();
$this->define_frontend_hooks();
}
private function define_admin_hooks() {
$admin = new Settings();
$this->loader->add_action('admin_menu', $admin, 'add_settings_page');
}
private function define_frontend_hooks() {
$shortcode = new Shortcode();
$this->loader->add_action('init', $shortcode, 'register_shortcode');
}
public function run() {
$this->loader->run();
}
}
Admin Panel Sınıfı
namespace MyPlugin\Admin;
class Settings {
public function add_settings_page() {
add_menu_page(
'My Plugin Ayarları',
'My Plugin',
'manage_options',
'my-plugin',
[$this, 'render_settings_page']
);
}
public function render_settings_page() {
echo '<div class="wrap"><h1>My Plugin Ayarları</h1></div>';
}
}
Frontend Shortcode Sınıfı
namespace MyPlugin\Frontend;
class Shortcode {
public function register_shortcode() {
add_shortcode('my_shortcode', [$this, 'render_shortcode']);
}
public function render_shortcode($atts) {
return '<p>Bu bir kısa kod çıktı örneğidir.</p>';
}
}
Otomatik Yükleme (Autoloading)
PSR-4 standardına uygun bir composer.json dosyası oluşturarak modern PHP geliştirici araçlarından faydalanabilirsiniz:
{
"autoload": {
"psr-4": {
"MyPlugin\\": "includes/"
}
}
}
Sonrasında terminalden:
composer dump-autoload
Bu şekilde require yerine otomatik sınıf yüklemesi (autoload) yapılır.
Güvenlik ve Performans
- Tüm kullanıcı girişlerini sanitize ve escape edin (
sanitize_text_field,esc_htmlvb.) - SQL sorgularında
$wpdb->prepare()kullanın noncevecurrent_user_can()ile yetkilendirme kontrolleri yapın- Lazy-loading ve caching teknikleri kullanarak performansı artırın
Değerlendirme
OOP ile WordPress eklentisi geliştirmek, yalnızca kod kalitenizi artırmakla kalmaz, aynı zamanda uzun vadede bakım ve ölçeklendirme kolaylığı sağlar. MVC benzeri yapılar, SOLID prensipleri ve Composer gibi modern araçlarla, WordPress’in geleneksel eklenti dünyasında yeni bir sayfa açabilirsiniz. Geliştirici deneyimini ileriye taşımak isteyen herkes için nesne yönelimli yaklaşım artık bir tercih değil, bir gereklilik haline gelmiştir.








