WP CLI ile wp scaffold Komutu: Eklenti ve Tema İskeleti Oluşturma

WordPress geliştirme sürecinizde her yeni eklenti veya tema oluşturduğunuzda aynı klasör yapısını elle kurmaktan, boilerplate kodları kopyala-yapıştır yapmaktan bıktıysanız, wp scaffold komutu tam size göre. WP-CLI’nin bu güçlü alt komutu, standartlara uygun eklenti ve tema iskeletlerini saniyeler içinde oluşturmanızı sağlar. Hem zaman kazanırsınız hem de WordPress kodlama standartlarına uygun bir başlangıç noktası elde edersiniz.

wp scaffold Nedir ve Neden Kullanmalısınız?

wp scaffold, WP-CLI’nin geliştiricilere yönelik en faydalı araçlarından biridir. Temel amacı, tekrar eden proje yapılarını otomatik olarak oluşturmaktır. Bir eklenti geliştirmeye başladığınızda klasör yapısı, ana PHP dosyası, readme.txt, uninstall.php gibi onlarca dosyayı elle oluşturmak zorunda kalmazsınız.

Peki gerçek dünyada bu ne anlama geliyor? Ajans ortamında çalışan bir geliştirici olarak düşünün: Ayda 3-4 yeni müşteri projesi alıyorsunuz, her biri için özel bir eklenti ve child tema yazmanız gerekiyor. Her seferinde aynı yapıyı kurmak yerine wp scaffold ile dakikalar içinde üretime hazır bir iskelet elde ediyorsunuz.

wp scaffold komutunun desteklediği başlıca alt komutlar şunlardır:

  • wp scaffold plugin: Standart WordPress eklenti iskelet dosyaları oluşturur
  • wp scaffold theme: Underscores (_s) tabanlı başlangıç teması oluşturur
  • wp scaffold child-theme: Mevcut bir temadan child tema üretir
  • wp scaffold post-type: Custom post type kayıt kodu oluşturur
  • wp scaffold taxonomy: Custom taxonomy kayıt kodu üretir
  • wp scaffold block: Gutenberg bloğu iskelet dosyaları oluşturur
  • wp scaffold plugin-tests: Mevcut eklentiye PHPUnit test yapısı ekler

Eklenti İskeleti Oluşturmak: wp scaffold plugin

En çok kullanılan senaryo ile başlayalım. Basit bir eklenti iskeleti oluşturmak için temel komut şöyledir:

wp scaffold plugin my-awesome-plugin

Bu komutu çalıştırdığınızda /wp-content/plugins/my-awesome-plugin/ dizini altında şu yapı oluşur:

  • my-awesome-plugin.php (Ana eklenti dosyası)
  • readme.txt (WordPress.org formatında)
  • uninstall.php (Kaldırma işlemi için)
  • includes/ (Sınıf dosyaları için)
  • admin/ (Admin tarafı dosyaları)
  • public/ (Frontend dosyaları)
  • languages/ (Çeviri dosyaları için)

Daha kapsamlı bir eklenti oluştururken parametreleri kullanmak işinizi kolaylaştırır:

wp scaffold plugin my-crm-plugin 
  --plugin_name="My CRM Plugin" 
  --plugin_description="Müşteri yönetimi için kapsamlı CRM eklentisi" 
  --plugin_author="Ahmet Yilmaz" 
  --plugin_author_uri="https://ahmetyilmaz.dev" 
  --plugin_uri="https://ahmetyilmaz.dev/my-crm-plugin" 
  --skip-tests

Parametrelerin açıklamaları:

  • –plugin_name: Eklentinin görünen adı, WordPress yönetim panelinde görüntülenir
  • –plugin_description: Eklenti açıklaması, readme.txt ve eklenti başlığında kullanılır
  • –plugin_author: Geliştirici adı
  • –plugin_author_uri: Geliştirici web sitesi URL’si
  • –plugin_uri: Eklentinin ana sayfası
  • –skip-tests: PHPUnit test dosyalarını oluşturmayı atlar, küçük projeler için idealdir
  • –activate: Eklentiyi oluşturduktan hemen sonra etkinleştirir
  • –activate-network: Çoklu site ağında tüm sitelerde etkinleştirir

Gerçek Dünya Senaryosu: E-ticaret Entegrasyonu

Diyelim ki bir müşteri için kargo entegrasyon eklentisi yazıyorsunuz. Hızlıca iskelet kuralım:

wp scaffold plugin kargo-entegrasyon 
  --plugin_name="Kargo Entegrasyon" 
  --plugin_description="Yurt ici kargo firmalarini WooCommerce ile entegre eder" 
  --plugin_author="Yazilim A.S." 
  --activate

Oluşan kargo-entegrasyon.php dosyasına baktığınızda WordPress kodlama standartlarına uygun, sınıf tabanlı bir yapı görürsünüz. OOP yapısı zaten hazır olduğu için direkt iş mantığını yazmaya başlayabilirsiniz.

Tema İskeleti Oluşturmak: wp scaffold theme

wp scaffold theme komutu, Automattic’in geliştirdiği Underscores (_s) başlangıç temasını baz alarak özelleştirilmiş bir tema iskelet oluşturur. Bu tema, WordPress tema geliştirme best practice’lerini baştan uyguladığı için oldukça değerlidir.

wp scaffold theme my-custom-theme 
  --theme_name="My Custom Theme" 
  --author="Ahmet Yilmaz" 
  --author_uri="https://ahmetyilmaz.dev"

Oluşan yapıya baktığınızda şunları görürsünüz:

  • style.css (Tema başlığı ve temel stiller)
  • functions.php (Tema fonksiyonları)
  • index.php, header.php, footer.php, sidebar.php
  • page.php, single.php, archive.php
  • 404.php, search.php, searchform.php
  • js/ (JavaScript dosyaları)
  • css/ (Stil dosyaları)
  • languages/ (Çeviri dosyaları)
  • inc/ (Tema özellik dosyaları, customizer, widget desteği vs.)
  • template-parts/ (Yeniden kullanılabilir şablon parçaları)

SASS destekli bir tema oluşturmak istiyorsanız --sassify bayrağını ekleyebilirsiniz:

wp scaffold theme my-custom-theme 
  --theme_name="My Custom Theme" 
  --author="Ahmet Yilmaz" 
  --sassify 
  --activate

Bu komut, CSS dosyaları yerine .scss uzantılı dosyalar oluşturur ve SASS ile çalışmanıza olanak tanır.

Child Tema Oluşturmak: wp scaffold child-theme

Mevcut bir temayı değiştirmek istediğinizde, asla ana tema dosyalarını düzenlememeli ve mutlaka child tema kullanmalısınız. wp scaffold child-theme bu süreci de hızlandırır:

wp scaffold child-theme storefront-child 
  --parent_theme=storefront 
  --theme_name="Storefront Child" 
  --author="Ahmet Yilmaz" 
  --author_uri="https://ahmetyilmaz.dev" 
  --activate

Bu komut çok az dosya oluşturur, zira child temanın amacı sadece override yapacağınız dosyaları barındırmaktır:

  • style.css (Parent theme referansı ve temel stiller)
  • functions.php (Parent theme fonksiyonlarını genişletmek için)
  • screenshot.png (Placeholder ekran görüntüsü)

Gerçek Dünya Senaryosu: WooCommerce Mağaza Özelleştirme

Bir müşterinin mevcut Storefront temasını bozmadan özelleştirmeniz gerekiyor. Child tema yaklaşımı şart:

# Mevcut temaları listele
wp theme list

# Storefront child tema oluştur
wp scaffold child-theme musteri-adi-theme 
  --parent_theme=storefront 
  --theme_name="Musteri Adi Theme" 
  --author="Ajans Adi" 
  --activate

# Tema aktif mi kontrol et
wp theme status musteri-adi-theme

Child tema etkinleştirildikten sonra WooCommerce şablonlarını override etmek için woocommerce/ klasörünü kendiniz oluşturarak içine özelleştirilmiş şablon dosyalarını koyabilirsiniz.

Custom Post Type ve Taxonomy Oluşturmak

Bu özellik gerçekten hayat kurtarıcı. Custom post type kodu yazmak doğru parametre kombinasyonlarını bulmayı gerektiriyor ve belgelere sürekli bakmak zorunda kalıyorsunuz. wp scaffold bu işi sizin yerinize hallediyor:

# Etkinlik custom post type oluştur
wp scaffold post-type etkinlik 
  --label="Etkinlik" 
  --textdomain=my-plugin 
  --dashicon="dashicons-calendar" 
  --theme

Parametreler:

  • –label: Tekil görünen ad
  • –textdomain: Çeviri text domain’i
  • –dashicon: Yönetim menüsü ikonu
  • –theme: Kodu eklenti yerine tema klasörüne yazar
  • –plugin: Hangi eklentiye ekleyeceğini belirtir

Taxonomy için de benzer şekilde:

# Etkinlik kategorisi taxonomy oluştur
wp scaffold taxonomy etkinlik-kategori 
  --label="Etkinlik Kategorisi" 
  --post_types=etkinlik 
  --textdomain=my-plugin 
  --theme

Bu komutlar, ilgili register fonksiyonlarını içeren PHP dosyalarını oluşturur. Dosyaları functions.php veya eklentinize require ile dahil etmeniz yeterlidir.

Gutenberg Bloğu Oluşturmak: wp scaffold block

Modern WordPress geliştirmede Gutenberg blokları artık kaçınılmaz. wp scaffold block komutu, temel bir blok iskelet dosyası oluşturur:

wp scaffold block ozel-kart 
  --title="Özel Kart Bloğu" 
  --dashicon="dashicons-id" 
  --category=common 
  --plugin=my-awesome-plugin

Bu komut eklenti dizininde şu yapıyı oluşturur:

  • blocks/ozel-kart/block.js (Blok JavaScript kodu)
  • blocks/ozel-kart/index.php (Sunucu taraflı render için)
  • blocks/ozel-kart/style.css (Frontend stilleri)
  • blocks/ozel-kart/editor.css (Editör stilleri)

Oluşturulan block.js dosyası içinde registerBlockType çağrısı, edit ve save fonksiyonları hazır olarak gelir. Direkt işlevi yazmaya başlayabilirsiniz.

Test Yapısı Eklemek: wp scaffold plugin-tests

Ciddi bir WordPress geliştirici olarak eklentilerinize unit test yazmanız gerekiyor. wp scaffold plugin-tests bu süreci başlatmanızı kolaylaştırır:

wp scaffold plugin-tests my-awesome-plugin

Bu komut şu dosyaları oluşturur ya da günceller:

  • phpunit.xml.dist (PHPUnit yapılandırması)
  • tests/bootstrap.php (Test ortamı başlatıcısı)
  • tests/test-sample.php (Örnek test dosyası)
  • bin/install-wp-tests.sh (Test ortamı kurulum scripti)
  • .travis.yml (CI/CD entegrasyonu için)

Test ortamını kurmak için:

# Test veritabanı parametrelerini girerek kurulum scriptini çalıştır
cd /var/www/html/wp-content/plugins/my-awesome-plugin
bash bin/install-wp-tests.sh wordpress_test root 'sifre' localhost latest

# Testleri çalıştır
phpunit

Gerçek Dünya Senaryosu: CI/CD Pipeline Entegrasyonu

Bir ajans olarak tüm eklentilerinizde otomatik testler çalıştırmak istiyorsunuz. Her yeni eklenti için standart test yapısını hızla kurabilirsiniz:

#!/bin/bash
# yeni_eklenti_kur.sh

PLUGIN_NAME=$1
DB_NAME="${PLUGIN_NAME}_test"
DB_USER="root"
DB_PASS="sifre"

# Eklenti iskeleti oluştur
wp scaffold plugin $PLUGIN_NAME --skip-tests

# Test yapısını ekle
wp scaffold plugin-tests $PLUGIN_NAME

# Test veritabanını kur
bash /var/www/html/wp-content/plugins/$PLUGIN_NAME/bin/install-wp-tests.sh 
  $DB_NAME $DB_USER $DB_PASS localhost latest

echo "Eklenti $PLUGIN_NAME ve test ortami hazir!"

Gelişmiş Kullanım: Birden Fazla Komutu Birleştirmek

Gerçek projelerde genellikle tek bir komutla iş bitmez. Aşağıdaki senaryo, yeni bir WooCommerce eklentisi geliştirme sürecini otomatikleştirir:

#!/bin/bash
# woo_plugin_bootstrap.sh

PLUGIN_SLUG="musteri-woo-plugin"
PLUGIN_NAME="Musteri WooCommerce Eklentisi"
AUTHOR="Gelistirici Adi"

echo "Eklenti iskeleti olusturuluyor..."
wp scaffold plugin $PLUGIN_SLUG 
  --plugin_name="$PLUGIN_NAME" 
  --plugin_description="Ozel WooCommerce gelistirmeleri" 
  --plugin_author="$AUTHOR" 
  --activate

echo "Urun custom post type ekleniyor..."
wp scaffold post-type ozel-urun 
  --label="Ozel Urun" 
  --textdomain=$PLUGIN_SLUG 
  --plugin=$PLUGIN_SLUG

echo "Urun kategorisi taxonomy ekleniyor..."
wp scaffold taxonomy ozel-urun-kategori 
  --label="Urun Kategorisi" 
  --post_types=ozel-urun 
  --textdomain=$PLUGIN_SLUG 
  --plugin=$PLUGIN_SLUG

echo "Test yapisi ekleniyor..."
wp scaffold plugin-tests $PLUGIN_SLUG

echo "Islem tamamlandi!"
wp plugin list

Bu script, çok adımlı bir kurulum sürecini tek komutla halletmenizi sağlar.

wp scaffold ile İlgili Sık Yapılan Hatalar

Yanlış dizinde çalıştırmak: wp scaffold komutlarını WordPress kök dizininde çalıştırmanız gerekir. Başka bir dizindeyseniz:

# wp-config.php'nin bulunduğu dizinde çalıştırmak
wp --path=/var/www/html scaffold plugin test-plugin

# veya wp-cli.yml dosyası ile yolu belirtebilirsiniz

–skip-tests bayrağını unutmak: PHPUnit ve test ortamı kurmayı planlamıyorsanız bu bayrağı ekleyin, yoksa gereksiz dosyalar oluşur. Küçük ve hızlı geliştirme projelerinde --skip-tests kullanımı pratikliği artırır.

Slug ile name karışıklığı: plugin slug (dizin adı ve dosya adı) ile plugin_name (görünen ad) farklı şeylerdir. Slug’ı hep küçük harf, tire ile yazın:

# YANLIS
wp scaffold plugin "My Awesome Plugin"

# DOGRU
wp scaffold plugin my-awesome-plugin --plugin_name="My Awesome Plugin"

Mevcut eklentiyi ezmek: Aynı slug ile ikinci kez scaffold çalıştırırsanız mevcut dosyaların üzerine yazılır. --force bayrağını kasıtlı kullanmadığınız sürece dikkatli olun. Genellikle bir kez scaffold yapılır, sonrasında el ile geliştirilir.

Scaffold Edilen Kod Yapısını Anlamak

wp scaffold plugin ile oluşturulan ana PHP dosyasında dikkat etmeniz gereken birkaç önemli nokta var. OOP tabanlı yapı, includes/class-{plugin-slug}.php gibi dosyalar üzerinden yürür. Admin ve public taraf kodu birbirinden ayrılır, bu da bakımı kolaylaştırır.

Oluşan class-{plugin-slug}-activator.php dosyası aktivasyon kancası için, class-{plugin-slug}-deactivator.php ise deaktivasyon için hazır gelir. Veritabanı tablosu oluşturma, seçenekleri kaydetme gibi aktivasyon işlemlerini direkt bu dosyalara yazabilirsiniz.

# Olusan dosya yapisini goruntule
find /var/www/html/wp-content/plugins/my-awesome-plugin -type f | sort

# veya tree komutu varsa
tree /var/www/html/wp-content/plugins/my-awesome-plugin

Sunucu Ortamında wp scaffold Kullanımı

Paylaşımlı hosting veya kısıtlı sunucularda WP-CLI kullanımı bazen sorun çıkarabilir. VPS veya dedicated sunucularda tipik kurulum şöyledir:

# WP-CLI kurulu mu kontrol et
wp --info

# Eğer permission hatası alıyorsanız www-data olarak çalıştırın
sudo -u www-data wp scaffold plugin my-plugin 
  --path=/var/www/html 
  --allow-root

# Dosya izinlerini düzenle
chown -R www-data:www-data /var/www/html/wp-content/plugins/my-plugin
chmod -R 755 /var/www/html/wp-content/plugins/my-plugin

Özellikle cPanel gibi panellerde SSH erişimi kısıtlı olabilir. Bu durumda WP-CLI’yi local geliştirme ortamınızda kullanıp sonra dosyaları sunucuya transfer etmeniz daha mantıklıdır.

wp scaffold ile Local Geliştirme Entegrasyonu

Local by Flywheel, DevKinsta veya benzeri yerel geliştirme ortamları kullanıyorsanız, bu araçların çoğu WP-CLI’yi yerleşik olarak destekler. Örneğin Local by Flywheel’de site klasörüne sağ tıklayıp “Open Site Shell” diyerek doğrudan WP-CLI komutlarını çalıştırabilirsiniz.

Docker tabanlı geliştirme ortamında kullanmak için:

# Docker container içinde WP-CLI çalıştır
docker exec -it wordpress_container bash -c 
  "wp scaffold plugin my-plugin --allow-root"

# veya WP-CLI Docker imajı kullanarak
docker run --rm 
  --volumes-from wordpress_container 
  --network container:wordpress_container 
  wordpress:cli scaffold plugin my-docker-plugin

Sonuç

wp scaffold komutu, WordPress geliştirme sürecinizde tekrarlayan ve zaman alan kurulum adımlarını ortadan kaldıran güçlü bir araçtır. İster yeni bir eklenti başlatıyor olun, ister child tema oluşturuyor olun, isterse Gutenberg bloğu geliştiriyor olun, bu komut sizi her seferinde saatler kazandırır.

Ajans ortamında çalışıyorsanız, scaffold komutlarını bash scriptlerine dönüştürerek ekip içinde standart bir proje başlangıç süreci oluşturabilirsiniz. Her geliştirici aynı yapıyı kullandığında kod review ve bakım süreçleri de kolaylaşır.

Önemli hatırlatmalar:

  • Scaffold bir kerelik başlangıç aracıdır, sonraki geliştirmeler elle yapılır
  • --skip-tests bayrağını küçük projeler için, test yapısını ise production eklentileri için kullanın
  • Child tema oluştururken parent temanın güncellemelerden etkilenmeyeceğinizi unutmayın
  • Oluşturulan kodu olduğu gibi bırakmayın, mutlaka projeye özel ihtiyaçlarınıza göre düzenleyin

WP-CLI komutlarını master etmek, bir WordPress geliştiricisi veya sysadmin olarak işlerinizi çok daha verimli yapmanızı sağlar. wp scaffold bu yolculukta en sık başvuracağınız komutlardan biri olmaya devam edecek.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir