wp package ile WP-CLI Paket Yönetimi

WP-CLI kullanıyorsanız muhtemelen wp post, wp user ya da wp plugin komutlarına aşinasınızdır. Ama WP-CLI’nin gerçek gücü, kendi paket ekosisteminde gizli. wp package komutu sayesinde topluluk tarafından geliştirilmiş onlarca ek aracı WP-CLI’ye entegre edebilir, iş akışlarınızı dramatik biçimde hızlandırabilirsiniz. Bu yazıda wp package komutunu her yönüyle ele alacağız; kurulumdan kaldırmaya, paket geliştirmeden production ortamında güvenli kullanıma kadar.

wp package Nedir ve Neden Önemlidir?

WP-CLI, çekirdek komutlarının ötesine geçmek isteyenler için bir paket yönetim sistemi sunar. Bu sistem aslında Composer altyapısını kullanır; dolayısıyla PHP geliştiricileri için oldukça tanıdık gelecektir. Paketler genellikle GitHub veya Packagist üzerinden dağıtılır ve WP-CLI’nin ~/.wp-cli/packages/ dizinine kurulur.

Peki neden core’a dahil edilmemiş bu araçlara ihtiyaç duyulur? Çünkü her sitenin ihtiyacı farklıdır. Bir e-ticaret sitesi için toplu ürün güncelleme aracına ihtiyaç duyarken, bir ajans belki de çoklu site yönetim araçlarına ihtiyaç duyar. Paket sistemi, WP-CLI’yi herkes için şişirmeden, herkese ihtiyacı olanı sunar.

Temel wp package Komutları

wp package komutunun alt komutları şunlardır:

  • wp package browse: Mevcut paketleri listeler
  • wp package install: Yeni paket kurar
  • wp package list: Kurulu paketleri gösterir
  • wp package uninstall: Paketi kaldırır
  • wp package update: Kurulu paketleri günceller
  • wp package path: Paket dizininin yolunu gösterir

Mevcut Paketlere Göz Atmak

Hangi paketlerin mevcut olduğunu görmek için:

wp package browse --fields=name,description,url

Bu komut çıktısı oldukça uzun olabilir. Belirli bir anahtar kelimeyle filtrelemek isterseniz grep kullanabilirsiniz:

wp package browse --fields=name,description | grep -i "media"

ya da sadece paket isimlerini görmek için:

wp package browse --fields=name --format=ids

Paket Kurmak

En temel kullanım şekli şöyle:

wp package install wp-cli/doctor-command

Bu komut, wp-cli/doctor-command paketini resmi WP-CLI organizasyonundan çeker ve global olarak kurar. Kurulum tamamlandığında wp doctor komutu kullanılabilir hale gelir.

GitHub’daki herhangi bir paketi de kurabilirsiniz:

wp package install [email protected]:vendor/package-name.git

Ya da Packagist’ten belirli bir sürümle:

wp package install wp-cli/doctor-command:@stable

Geliştirme sürümünü denemek isterseniz:

wp package install wp-cli/doctor-command:dev-main

Kurulu Paketleri Yönetmek

Kurulu Paketleri Listeleme

wp package list

Çıktıda paket adı, sürümü ve açıklamasını görürsünüz. Sadece paket adlarını almak isterseniz:

wp package list --fields=name --format=csv

Bu çıktıyı bir script içinde kullanmak çok pratiktir. Örneğin tüm kurulu paketleri bir dosyaya aktarmak için:

wp package list --fields=name --format=csv > installed-packages.txt

Paketleri Güncellemek

Tüm kurulu paketleri tek seferde güncellemek için:

wp package update

Bu komut oldukça basit görünse de arka planda Composer’ı çalıştırır ve tüm bağımlılıkları günceller. Production sunucusunda çalıştırmadan önce mutlaka test ortamında deneyin; sürüm uyumsuzlukları nadir de olsa yaşanabilir.

Paket Kaldırmak

wp package uninstall wp-cli/doctor-command

Bağımlılıkların da kaldırılmasını isterseniz ek bir işlem gerekmez; WP-CLI bunu otomatik olarak halleder. Ancak bazen artık kullanılmayan bağımlılıkların temizlenmediğini görürsünüz. Bu durumda Composer ile manuel temizlik yapabilirsiniz:

cd ~/.wp-cli/packages && composer install --no-dev

Gerçek Dünya Senaryoları

Senaryo 1: Doctor Command ile Site Sağlığını Otomatik Kontrol Etmek

Bir ajans için birden fazla WordPress sitesini yönettiğinizi düşünün. Her sabah tüm sitelerin sağlıklı olup olmadığını manuel kontrol etmek saatler alabilir. doctor-command paketi tam bu sorunu çözer.

# Önce paketi kur
wp package install wp-cli/doctor-command

# Tek bir site için kontrol
wp doctor check --all --path=/var/www/html/musteri1.com

# Kritik sorunları filtrele
wp doctor check --all --path=/var/www/html/musteri1.com | grep -i "error|warning"

Bunu bir bash script’e dönüştürerek tüm siteleri tarayabilirsiniz:

#!/bin/bash
SITES=(
    "/var/www/html/site1"
    "/var/www/html/site2"
    "/var/www/html/site3"
)

for site in "${SITES[@]}"; do
    echo "=== Kontrol ediliyor: $site ==="
    wp doctor check --all --path="$site" --format=json | 
    python3 -c "
import sys, json
data = json.load(sys.stdin)
for check in data:
    if check['status'] in ['error', 'warning']:
        print(f"[{check['status'].upper()}] {check['name']}: {check['message']}")
"
done

Senaryo 2: Scaffold Package ile Özel Komut Geliştirme

Kendi WP-CLI paketinizi yazmak istiyorsanız scaffold package komutu işinizi kolaylaştırır:

# scaffold paketini kur
wp package install wp-cli/scaffold-package-command

# Yeni paket iskeleti oluştur
wp scaffold package vendor/my-custom-command --dir=/home/user/projects/my-command

Bu komut çalıştıktan sonra tam bir PHP paketi yapısı oluşturulur: src/ dizini, composer.json, README.md, testler için iskelet ve hepsi hazır. Geliştirmeye direkt başlayabilirsiniz.

Geliştirdiğiniz paketi test aşamasında global kurmadan önce lokal olarak bağlamak için:

wp package install /home/user/projects/my-command

Senaryo 3: Find Replace Extended ile Veritabanı Operasyonları

Standart wp search-replace çoğu zaman yeterlidir, ama bazı edge case’lerde yetersiz kalır. Topluluk paketleri burada devreye girebilir. Örneğin bir site taşıma senaryosunda:

# Önce mevcut durumu yedekle
wp db export backup-before-replace.sql --path=/var/www/html/site

# URL değişikliği yap
wp search-replace 'http://eski-domain.com' 'https://yeni-domain.com' 
    --all-tables 
    --report-changed-only 
    --dry-run

# Dry-run sonuçları tatmin ediciyse gerçek değişikliği yap
wp search-replace 'http://eski-domain.com' 'https://yeni-domain.com' 
    --all-tables 
    --report-changed-only

Senaryo 4: Paket Listesini Versiyon Kontrolüne Almak

Ekip çalışmasında herkesin aynı WP-CLI paketlerini kullanması kritiktir. Bunun için kurulu paketleri export edip versiyon kontrolüne alabilirsiniz:

# Paket listesini JSON formatında kaydet
wp package list --format=json > .wp-cli-packages.json

# Sadece isim ve sürüm bilgisiyle kaydet
wp package list --fields=name,version --format=json > wp-cli-packages.json

Yeni bir ekip üyesi ya da yeni bir sunucu kurulumunda bu listeyi kullanmak için küçük bir script yazabilirsiniz:

#!/bin/bash
# restore-wp-cli-packages.sh
echo "WP-CLI paketleri kuruluyor..."

PACKAGES=(
    "wp-cli/doctor-command"
    "wp-cli/scaffold-package-command"
    "aaemnnosttv/wp-cli-login-command"
)

for package in "${PACKAGES[@]}"; do
    echo "Kuruluyor: $package"
    wp package install "$package" 2>/dev/null || echo "HATA: $package kurulamadı"
done

echo "Tüm paketler kuruldu."
wp package list

Paket Dizin Yapısını Anlamak

WP-CLI paketleri varsayılan olarak ~/.wp-cli/packages/ altına kurulur. Bu dizini incelemek bazen sorunları anlamak için gerekli olabilir:

# Paket dizinini öğren
wp package path

# Dizin içeriğini gör
ls -la $(wp package path)

# composer.json'u incele
cat $(wp package path)/composer.json

Eğer özel bir dizin kullanmak isterseniz, ~/.wp-cli/config.yml dosyasına ekleme yapabilirsiniz:

packages:
  path: /opt/wp-cli-packages

Bu özellikle sistem genelinde tüm kullanıcıların aynı paketlere erişmesini sağlamak istediğinizde işe yarar. Root ya da sudo yetkisiyle kurulmuş bir WP-CLI’de bu ayar, tüm kullanıcılar için paketleri merkezi yönetmenizi sağlar.

Güvenlik ve Production Ortamında Dikkat Edilmesi Gerekenler

Production sunucularında paket yönetimi yaparken birkaç önemli noktaya dikkat etmek gerekir.

Paket kaynaklarını doğrulayın. WP-CLI resmi organizasyonunun (wp-cli/) paketleri genellikle güvenilirdir. Üçüncü taraf paketler için GitHub sayfasını inceleyin; son commit tarihi, issue sayısı ve katkıda bulunan geliştirici profili iyi birer göstergedir.

Bağımlılık çakışmalarına dikkat edin. Paketler kendi bağımlılıklarını getirir. Birden fazla paket aynı kütüphanenin farklı sürümlerine bağımlıysa Composer çakışma rapor edebilir:

# Bağımlılık durumunu kontrol et
cd ~/.wp-cli/packages && composer diagnose

# Bağımlılıkları detaylı göster
composer show --installed

PHP sürümü uyumluluğunu kontrol edin. Sunucunuzdaki PHP sürümüyle paketin gerektirdiği sürüm uyuşmuyorsa kurulum başarısız olur ya da sessizce çalışmaz. Kurulumdan önce:

php --version
wp --info

çıktılarını kontrol etmek iyi alışkanlıktır.

Yetki sorunlarına dikkat edin. WP-CLI’yi hem root hem de normal kullanıcı olarak çalıştırıyorsanız, root olarak kurulan paketler normal kullanıcıya görünmeyebilir. Her kullanıcı kendi home dizininde ayrı bir paket deposu tutar.

Popüler ve İşe Yarar Paketler

Topluluğun geliştirdiği ve sık kullanılan bazı paketler şunlardır:

  • aaemnnosttv/wp-cli-login-command: Parola girmeden admin olarak giriş yapmanızı sağlar; geliştirme ortamlarında çok işe yarar
  • wp-cli/doctor-command: Site sağlığı kontrolleri; dosya izinleri, veritabanı durumu, cron gibi konuları denetler
  • wp-cli/scaffold-package-command: Yeni WP-CLI paketi geliştirmek için iskelet oluşturur
  • runcommand/hook: WP-CLI komutlarına hook’lar eklemenizi sağlar
  • wp-cli/profile-command: WP yükleme sürecini profillemenizi sağlar; performans sorunlarını bulmak için harika

wp-cli/login-command paketini bir geliştirme senaryosunda nasıl kullanacağınıza bakalım:

# Paketi kur
wp package install aaemnnosttv/wp-cli-login-command

# Magic login linki oluştur
wp login create admin --path=/var/www/html/dev-site

# URL direkt tarayıcıda açılabilir, parola gerekmez
# Çıktı: http://dev-site.local/?action=magic-login&user=admin&token=xxxxx

Bu özellik özellikle staging ortamlarında client’lara geçici erişim sağlamak için de kullanılabilir.

Paket Geliştirme: Kendi Komutunuzu Yazmak

WP-CLI paket ekosistemi yalnızca başkalarının yazdığı araçları kullanmakla sınırlı değil. Kendinize özel komutlar yazıp bunları yerel ya da ekip genelinde kullanabilirsiniz.

Örnek olarak, tüm WooCommerce siparişlerini tek komutla CSV’ye aktaran basit bir komut düşünelim. Önce iskelet oluşturun:

wp scaffold package ajansiniz/wc-order-export --dir=~/projects/wc-order-export

Oluşturulan src/Command.php dosyasını düzenleyerek komutunuzu yazarsınız. Ardından:

# Geliştirme sırasında lokal kurulum
wp package install ~/projects/wc-order-export

# Komutu test et
wp wc-order-export run --status=completed --format=csv > orders.csv

Paketinizi GitHub’a push ettiğinizde başka sistem yöneticileri de şu şekilde kurabilir:

wp package install [email protected]:ajansiniz/wc-order-export.git

Sorun Giderme

Paket kurulum veya kullanım sorunlarında işe yarayan birkaç yaklaşım:

# WP-CLI debug modunda çalıştır
wp package install wp-cli/doctor-command --debug

# Composer log'larına bak
wp package install wp-cli/doctor-command --debug 2>&1 | grep -i "composer|error|warning"

# Paket dizinini sıfırla (dikkatli olun, tüm paketler silinir)
rm -rf ~/.wp-cli/packages
mkdir -p ~/.wp-cli/packages

Bazen Composer cache’i sorun çıkarır:

# Composer cache temizle
composer clear-cache

# WP-CLI önbelleğini temizle
wp cli cache clear

PHP memory_limit çok düşük ayarlıysa büyük paketlerin kurulumu başarısız olabilir. php.ini dosyasında ya da komut satırında bunu aşabilirsiniz:

php -d memory_limit=512M $(which wp) package install wp-cli/doctor-command

CI/CD Pipeline’larında wp package Kullanımı

Otomatik deployment süreçlerinde WP-CLI paketlerini de dahil etmek isteyebilirsiniz. Bir GitHub Actions örneği:

# .github/workflows/wordpress-health-check.yml
name: WordPress Health Check
on:
  schedule:
    - cron: '0 8 * * *'

jobs:
  health-check:
    runs-on: ubuntu-latest
    steps:
      - name: WP-CLI Kur
        run: |
          curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
          chmod +x wp-cli.phar
          mv wp-cli.phar /usr/local/bin/wp

      - name: Doctor Command Kur
        run: wp package install wp-cli/doctor-command

      - name: Site Sağlığını Kontrol Et
        run: |
          wp doctor check --all 
            --path=/var/www/html 
            --ssh=deploy@production-server 
            --format=json | tee health-report.json

Bu yaklaşımla her sabah otomatik sağlık raporu alabilir, kritik sorunlar için Slack ya da e-posta bildirimi entegre edebilirsiniz.

Sonuç

wp package sistemi, WP-CLI’yi sıradan bir komut satırı aracından tam kapsamlı bir WordPress yönetim platformuna dönüştüren mekanizmadır. Topluluk tarafından geliştirilen paketler sayesinde sitenizin sağlığını otomatik kontrol edebilir, geliştirme süreçlerinizi hızlandırabilir ve tekrar eden görevleri script’lere bağlayabilirsiniz.

Başlangıç için wp-cli/doctor-command ve aaemnnosttv/wp-cli-login-command paketlerini kurmanızı tavsiye ederim; her iki paket de günlük iş akışınıza hemen katkı sağlar. Ekibinizle çalışıyorsanız kurulu paket listesini versiyon kontrolüne alarak tutarlı geliştirme ortamları oluşturabilirsiniz.

Production ortamında paket kaynaklarını doğrulamayı, PHP sürümü uyumluluğunu kontrol etmeyi ve büyük güncellemeleri test ortamında denemeyi alışkanlık haline getirin. WP-CLI paket ekosistemi aktif biçimde gelişmeye devam ediyor; wp package browse çıktısını ara sıra gözden geçirmek, işinize yarayacak yeni araçları erken keşfetmenizi sağlar.

Bir yanıt yazın

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