Sıklıkla Karşılaşılan WP-CLI Sorunları

WP-CLI kurulum ve komut işlemlerinin ardından kurulum ve komut uygulama süreçlerinde sıklıkla karşılaşılan bazı hatalara ve bu hataların nasıl çözülebileceğinden bahsetmek istiyorum.

AA

WP-CLI İşlem ve Kurulum Hataları

Hataları kurulum itibariyle ele alabiliriz. Bu aşamada en sık karşılaşılan hatalardan biri wp-cli kurulumunun doğru bir şekilde takma ad ile ilişkilendirilmemesi olabilir.

wp: command not found

WP-CLI işlemleri wp-cli.phar adında bir PHP Arşiv dosyası aracılığıyla gerçekleştirilmektedir. wp: command not found hatasını almamızın muhtemel nedenlerinden biri ilgili dosyanın sunucunuzda bulunmaması olabilir. Bu aşamada önerim ilgili dosyanın varlığını kontrol etmeniz ve/veya kurulumu yinelemeniz olacaktır.

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

curl ile wp-cli.phar dosyasını edindiğimizde php komutu ile dosyayı belirli sınırlandırmalar dahilinde kullanabiliriz. Örneğim;

php wp-cli.phar --info

Ancak bu yeterli olmayacaktır ve bazı temel dosya izinlerini düzenlemeli ve alias oluşturmalıyız. Örneğin, wp-cli.phar kurulu dizin dışında ilgili komutu çalıştırmak istediğimizde aşağıdaki hatayı alabiliriz.

Could not open input file: wp-cli.phar

Bu nedenle alias tanımlaması yapmamız uygun olacaktır. Bu işlem için öncelikle wp-cli.phar dosyasını güvenli ve belirli bir alana taşımamız uygun olacaktır. Bu bir zorunluluk değildir ancak tavsiye edilir.

mv wp-cli.phar /usr/local/bin/wp

Son olarak ilgili alias tanımını .bashrc dosyasına wp-cli.phar yolunu gösterecek şekilde eklemeliyiz. Bu işlem için aşağıdaki komutu uygulayabilirsiniz. Komut .bashrc dosyasının en alt satırına ilgili tanımlamayı yapacak ve .bashrc dosyasındaki değişikliği işleyecektir.

echo "alias wp='/usr/local/bin/wp'" >> ~/.bashrc && source ~/.bashrc && wp cli info

Kendiniz ilgili tanımı eklemek isterseniz nano ~/.bashrc komutuyla .bashrc dosyasını metin editörü ile açıp alias wp='/usr/local/bin/wp' satırını ekleyebilir ve ardından değişikliği source ~/.bashrc ile işleme alabilirsiniz. Dosya yüklenmiş ise, alias işlemi yapılmış ve hala aynı hatayı alıyorsanız bu defa alias (takma) tanımlamasının yapılmamış ya da hatalı yapılmış olma ihtimali üzerinde durabiliriz. Bu nedenle yukarıdaki adımları sırasıyla kontrol etmenizi öneririm.

-bash: /usr/local/bin/wp: Permission denied

Bu hata wp-cli.phar veya /usr/local/bin/wp dosyasının dosya izinleri komutu kullanmaya (execution) uygun olmadığı anlamına gelmektedir. Alias işlemi gerçekleştirmediyseniz wp-cli.phar dosyasının bulunduğu dizine geçerek şu komutu uygulamalısınız.

chmod +x wp-cli.phar

Alias işleminden sonra bu uyarıyı almışsanız dosyayı taşımış olduğumuz için yeni yolu üzerinden tanımlama yapmamız gerekir. Uygulayacağımız komut şu şekildedir:

chmod +x /usr/local/bin/wp

It looks like you’re running this as root

DigitalOcean gibi servisler üzerinden işlem yaptığımız durumlarda SSH bağlantısını ilk aşamada ve çoğu durumda root kullanıcı üzerinden gerçekleştirmemiz muhtemeldir. Bu durumda güvenlik uyarısı olarak başlıkta belirtilen hata dönecektir. Bu hatayı almamak için her komutumuzun sonuna --allow-root ifadesini ekleyebiliriz. Tanımlı bir başka kullanıcı üzerinden işlem yürütmek istersek ise şu komutu kullanabiliriz:

sudo -u [kullanici-adi] -i -- wp [komut]

Elbette tüm bunları bir yana bırakıp barındıra alanında işlemler yürütmek amacıyla yeni bir kullanıcı oluşturabiliriz.

adduser [yeni-kullanici-adi]
usermod -aG sudo [yeni-kullanici-adi]
su - [yeni-kullanici-adi]

Artık [yeni-kullanici-adi] aracılığıyla root bildirimi almadan işlemler gerçekleştirebiliriz.

No such file or directory

wp komutunun uygulandığı dizinde bir WordPress kurulumu mevcut değilse ve/veya config.yml dosyası oluşturulup içeriğinde ön tanımlı bir WordPress yolu belirtilmemişse bu hata alınabilir.

-bash: /home/[kullanici-adi]/bin/wp: No such file or directory

Bu durumda ya ilgili dizin içerisinde komutlar uygulanmalı, ya config.yml dosyası oluşturularak ön tanımlı bir WordPress yolu belirtilmeli ya da --path=[wordpress-yolu] ile WordPress kurulumu işaret edilmelidir.

Örneğin;

wp post list --path='/var/www/html/'

--path ile sunucuda birden fazla WordPress kurlumu mevcutsa komutları bu farklı kurulumları belirterek kontrol edebilirsiniz.

qtranxf_postsFilter()

Warning: Parameter 2 to qtranxf_postsFilter() expected to be a reference, value given in /home/[kullanici-adi]/public_html/.../.../wp-includes/class-wp-hook.php on line 286

qTranslate X eklentisi qTranslate XT adıyla geliştirilmeye devam ediliyor. Bu süreçte qTranslate X eklentisi ile ilgili problemler de düzenlenmekte. qtranxf_postsFilter() hatası da qTranslate X yerine qTranslate XT eklentisini kullanmanız durumunda ortadan kalkacaktır. Ayrıca --skip-plugins ile eklentileri komut işleminin dışında tutarak da bu hataların dönmesini önlemek mümkün.

wp post list --skip-plugins

URL Redirect

Eğer eklentileriniz arasında bir yönlendirme (redirect) eklentisi mevcutsa (WP Force SSL, Redirection gibi) wp komutlarını uyguladığınızda aşağıdakine benzer dönüşler alabilirsiniz.

Some code is trying to do a URL redirect. Backtrace:
#0  WP_CLI\Utils\wp_redirect_handler(https://) called at [/home/[kullanici-adi]/public_html/.../.../wp-includes/class-wp-hook.php:288]
#1  WP_Hook->apply_filters(https://, Array ([0] => https://,[1] => 301)) called at [/home/[kullanici-adi]/public_html/.../.../wp-includes/plugin.php:203]
#2  apply_filters(wp_redirect, https://, 301) called at [/home/[kullanici-adi]/public_html/.../.../wp-includes/pluggable.php:1203]

Bu gibi durumlarda --skip-plugins, --skip-themes, --skip-packages gibi parametrelerle eklenti, paket ve temaları wp işlemlerinin dışında tutabilmekteyiz.

wp post list
wp post list --skip-plugins
wp post list --skip-plugins --skip-themes --skip-packages

Alias not found

Takma adlar (alias) ile WordPress kurulumlarınızı işaretlemişseniz (bkz. config.yml) ve wp komutlarında belirttiğiniz isimleri çağırdığınızda Error: Alias '@x' not found. hatası alıyorsanız şu durumlardan biri söz konusu olabilir;

  • Alias tanımında yazım hatası söz konusu olabilir (ifadenin başında @ da yer almalı)
  • .bashrc içeriğinde WP_CLI_CONFIG_PATH belirtilmemiş olabilir (bkz. WP-CLI Config Komutu ve İşlemleri) ya da .bashrc değişikliği işlenmemiş olabilir; source ~/.bashrc. Unutmadan Oh My Zsh kullanımında ilgili konfigürasyon işlemlerinin ~/.zshrc üzerinden yürütülmesi gerekir. Config.yml yerine ilgili alias tanımı bulunulan dizinde oluşturulacak bir wp-cli.yml ve/veya wp-cli.local.yml (Örn. wp-cli.blog.yml veya wp-cli.kisisel.yml gibi) ile de gerçekleştirilebilir. Bu durumda ilgili dosyanın oluşturulduğundan ve doğru dosya üzerinden işlem gerçekleştirdiğinizden emin olmalısınız.

Alias yeni eklenmişse rewrite flush ile işlenmemiş olabilir; wp @takma-ad rewrite flush

Sonuç Olarak

WP-CLI işlemlerinde sıklıkla karşılaşılan hata ve uyarı mesajlarına karşılık alternatif çözüm yöntemlerini de listeler halinde yukarıda paylaştım. Zaman içerisinde karşılaştığım ya da mesaj/yorum yoluyla iletilen konular olursa yukarıdaki listeyi güncelleyerek içeriği genişleteceğim.