WordPress, uzun süredir PHP tabanlı sistemlerin en yaygınlarından biri olarak kullanılmakta. Ancak klasik WordPress eklenti geliştirme pratikleri, çoğu zaman modern PHP yaklaşımlarından uzaktır. Günümüzde geliştiriciler, sürdürülebilirlik, yeniden kullanılabilirlik ve daha temiz kod yapıları için modern araçlara yönelmektedir. İşte bu noktada Composer ve PSR-4 autoloading sistemleri devreye girerek, WordPress eklenti geliştiricilerine güçlü bir yapı sunar.
Bu makalede, WordPress için Composer kullanarak bağımlılık yönetimi yapılması, PSR-4 standardı ile sınıfların otomatik olarak yüklenmesi ve modüler, ölçeklenebilir bir eklenti mimarisinin kurulması ele alınacaktır.
1. Neden Composer ve Autoloading?
WordPress’in klasik yapısında tüm fonksiyonlar tek bir dosyada ya da dağınık şekilde çağrılır. Bu da projelerin büyüdükçe yönetilemez hale gelmesine neden olur. Modern PHP dünyasında ise şu ihtiyaçlar ön plandadır:
- Bağımlılık yönetimi: Harici kütüphaneleri manuel olarak dahil etmek yerine, Composer ile versiyon kontrollü bir şekilde yönetmek.
- Kod organizasyonu: Kodları sınıflara ayırmak ve mantıksal bir dizin yapısı oluşturmak.
- Autoloading: Gereken sınıfları manuel
require
etmeye gerek kalmadan otomatik olarak yüklemek. - Test Edilebilirlik ve Sürdürülebilirlik: Kodun daha modüler olması test süreçlerini kolaylaştırır.
2. Composer ile Proje Başlatma
Composer Kurulumu
Eğer Composer sisteminizde kurulu değilse, terminalden aşağıdaki komutlarla kurulabilir:
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
WordPress Eklentisi İçin Composer Başlatma
Eklenti klasörünüzde terminali açın ve:
composer init
Adımları takip ederek composer.json
dosyasını oluşturun.
3. PSR-4 Autoloading Tanımı
Oluşturulan composer.json
dosyasına aşağıdaki autoload bölümünü ekleyin:
"autoload": {
"psr-4": {
"MyPlugin\\": "src/"
}
}
Bu yapı sayesinde src/
klasörü altındaki her PHP sınıfı, MyPlugin\
isim alanı altında otomatik yüklenecek.
Ardından aşağıdaki komutla autoload klasörlerini oluşturun:
composer dump-autoload
4. Dosya ve Sınıf Yapısı Örneği
my-plugin/
├── src/
│ ├── Admin/
│ │ └── SettingsPage.php
│ ├── Front/
│ │ └── ShortcodeHandler.php
│ └── Core/
│ └── Plugin.php
├── my-plugin.php
├── composer.json
└── vendor/
src/Core/Plugin.php
:
namespace MyPlugin\Core;
class Plugin {
public function init() {
add_action('init', [$this, 'register_shortcodes']);
}
public function register_shortcodes() {
// shortcode register işlemleri
}
}
my-plugin.php
(Ana eklenti dosyası):
/**
* Plugin Name: My Modern Plugin
*/
require_once __DIR__ . '/vendor/autoload.php';
use MyPlugin\Core\Plugin;
$plugin = new Plugin();
$plugin->init();
5. Harici Paketlerle Geliştirme
Composer’ın en büyük avantajlarından biri binlerce PHP kütüphanesine erişim sunmasıdır. Örneğin bir HTTP istemcisi olarak Guzzle eklemek isterseniz:
composer require guzzlehttp/guzzle
Kullanımı:
use GuzzleHttp\Client;
$client = new Client();
$response = $client->get('https://api.example.com/data');
$data = json_decode($response->getBody(), true);
6. WordPress ile Uyumlu Yapıyı Korumak
WordPress, belirli dosya yapısı ve fonksiyonlara bağımlıdır. Modern yapılarla çalışırken aşağıdaki kurallara dikkat edilmelidir:
- Global fonksiyonlar yerine sınıf bazlı yapılar kullanılmalı.
- Eklenti etkinleştirme/deaktive etme gibi işlemler için sınıf metodları kullanılmalı.
- WordPress hook ve filter sistemleri içinde
add_action
,add_filter
gibi fonksiyonlar sınıf içinden çağrılmalı.
7. Geliştirici Denetimi ve Test
Modern yapı sayesinde, PHPUnit gibi test araçlarını Composer üzerinden kolayca entegre edebilirsiniz:
composer require --dev phpunit/phpunit
Bu sayede eklenti fonksiyonlarınızı test edebilir, CI/CD süreçlerine entegre edebilirsiniz.
8. Sürüm Kontrol ve .gitignore
Composer kullandığınızda vendor/
klasörü genellikle .gitignore
dosyasına eklenir:
/vendor
/composer.lock
Ancak deploy sırasında composer install --no-dev
komutu kullanılarak bağımlılıklar tekrar kurulabilir.
9. Değerlendirme: WordPress’te Modern Geliştirme
Composer ve autoloading kullanımı, WordPress eklenti geliştirmede oyunun kurallarını değiştirmektedir. Sadece daha temiz bir kod yapısı değil, aynı zamanda daha hızlı geliştirme süreçleri, daha kolay bakım ve modern PHP kütüphanelerinden faydalanma imkânı sunar.
Artık WordPress eklentileri sadece fonksiyon dosyalarının bir araya gelmesinden ibaret değil; kurumsal düzeyde, test edilebilir, sürdürülebilir ve genişleyebilir bir yapıya sahip olabilir.