WP-CLI Nasıl Kullanılır?

WP-CLI: WordPress için Komut Satırı Arayüzü başlıklı yazımda WordPress için komut satırı arayüzünün (WP-CLI) nasıl kurulabileceğinden ve temel olarak gerçekleştirilebilecek işlemlerden bahsetmiştim.

AA

Bu yazıda içeriği biraz daha genişletip WP-CLI örneklerine yer vereceğim.

Örnek WP-CLI İşlemleri

İlk örnekte WordPress Kurulum Yöntemleri yazısına ek olacak şekilde WP-CLI üzerinden nasıl WordPress kurabileceğimize bakalım.

WordPress Kurulumu

wp core config --dbname=[veritabani-adi] --dbuser=[veritabani-kullanici-adi] --dbpass=[veritabani-sifresi] --dbhost=localhost --dbprefix=wp_

Yukarıdaki satırda yer alan [veritabani-adi], [veritabani-kullanici-adi], [veritabani-sifresi] alanlarını sahip olduğunuz veri tabanına uygun şekilde doldurabilirsiniz. Ek olarak, yine bu satırda yer alan wp_ ön ekini de özelleştirmeniz mümkün. Bu komutu uygulamanızın ardından (DigitalOcean üzerinde WP-CLI kullanımında root kullanıcıya dair uyarı alabilirsiniz. Bu aşamada uygulayacağınız komutun sonuna -allow-root parametresini ekleyebilirsiniz) Generated ‘wp-config.php’ file. şeklinde bir geri bildirim alırsınız.

Sonraki aşamada dilerseniz internet tarayıcısı üzerinden de ilerlemeniz mümkün. Biz yine komut satırı aracılığıyla ilerleyelim ve site bilgilerini tanımlayalım.

wp core install --url=[site-adresi] --title=[site-adi] --admin_user=[kullanici-adi] --admin_password=[kullanici-sifresi] --admin_email=[kullanici-e-posta-adresi]

Yukarıdaki satırda yer alan bilgiler ([kullanici-adi], [kullanici-sifresi], [kullanici-e-posta-adresi]) yönetici hesabına ait olacak, bu nedenle giriş ve sonraki düzenlemeler için geçerli bilgiler girmeye dikkat etmelisiniz. [site-adresi] alanı sitenin yayın yaptığı domain ve/veya IP adresi, [site-adi] ise sitenin title içeriği olacaktır.

Bu komutun da başarıyla uygulanmasının ardından WordPress installed successfully. bildirimi alırsınız. Artık WordPress kurulu web sayfasını görüntüleyebilirsiniz.

WordPress Kurulumunu Yenilemek

Bu işlem için ZipArchive gerekmekte. Öncelikle bu işlemi gerçekleştirelim1.

apt-get install php7.2-zip
apt-get update
service apache2 restart

Artık WordPress kurulumumuzu (core) içerik, eklenti ve pluginleri hariç tutarak yenileyebiliriz.

wp core download --skip-content --force

WordPress Site URL Değişikliği

Home ve SiteURL tanımlamalarını değiştirmek için aşağıdaki komutları kullanabiliriz.

wp option update home 'http://yeni-ip-veya-ornekwebsitesi.com'
wp option update siteurl 'http://yeni-ip-veya-ornekwebsitesi.com'

Eklenti İşlemleri

Aktif ve aktif olmayan eklentileri plugin list parametrelerini kullanarak görüntüleyebilirsiniz.

wp plugin list

Plugin install ile bir veya daha fazla eklentisinin kurulumunu gerçekleştirebilirsiniz. Ancak öncesinde plugin araması yapabiliriz.

wp plugin search seo

Örnek olarak, SEO eklentilerini araştıralım ve çıkan listeden bazı eklentileri slug tanımlamaları üzerinden yükleyelim. plugin install ile aynı anda bir veya daha fazla eklenti yüklemek mümkün.

wp plugin install all-in-one-seo-pack jetpack

-activate ile eklentilerin yüklendikten sonra aktifleştirilmesini de sağlayabilirsiniz.

wp plugin install litespeed-cache --activate

Yüklü ve pasif durumdaki eklentileri de plugin activate ile yönetebilirsiniz.

wp plugin activate redirection

Eklentilerin tamamını ise -all parametresi ile tek seferde aktifleştirebilirsiniz. Eklentileri pasif hale getirmek için de deactivate şeklinde kodu güncelleyebilirsiniz.

wp plugin activate --all

Bu işlemler ilgili eklentilerin yayınlanmış son sürümleri üzerinden gerçekleştirilmekte. Ancak, böyle bir zorunluluk yok. -version ile dilerseniz eski bir sürümü ve yükleyip aktifleştirebilirsiniz.

wp plugin install wordpress-seo --version=4.1 --activate

Bu yükleme işlemleri wordpress plugin directory üzerinden gerçekleştirilmekte2. Ancak, harici bir URL üzerinden de yükleme ve aktifleştirme işlemleri gerçekleştirilebilir.

wp plugin install [plugin-kaynak-url] --activate

Güncelleme işlemi de yine tek veya çoklu eklentiler için kolaylıkla gerçekleştirilebilir.

wp plugin update litespeed-cache

Veritabanı İşlemleri

WP-CLI tarafından sunulan ve benim için en kıymetli özelliğin sunulan veritabanı yetenekleri olduğunu söyleyebilirim. Özellikle bul-değiştir işlemleri pek çok süreci oldukça güvenli ve pratik hale getirmekte. wp search-replace uygulandığında önce dizinler sıralanmakta ve ardından arama işlemi gerçekleştirilmektedir. Bulunan ilgili alanlar arama sonrasında değiştirilip tekrar dizinlerin listelenmesiyle süreç sonlandırılır.

wp search-replace 'adi'-alan-eski 'yeni-alan-adi'

Bu işlemi sadece belirtilen tablolarda da yürütebilir -dry-run ile işlemler uygulanmadan etkilenen alanları görüntüleyebilirsiniz.

wp search-replace 'eski-ifade' 'yeni-ifade' wp_posts wp_postmeta wp_terms --dry-run

Yapılan bir bul-değiştir işleminin sonucunu ayrıca sql çıktısı olarak da alabilirsiniz.

wp search-replace 'eski-ifade' 'yeni-ifade' --export=[dosya-adi].sql

Çıktı almak derken export/import işlemlerinden de bahsetmemek olmaz. Import/export işlemlerinde -format ile CSV, XML ve SQL çıktısı almak ve yine bu formatlarda import işlemi gerçekleştirmek mümkün. Aşağıdaki komut veritabanını SQL formatında /var/www/html/ dizinine kayıt edecektir. Aktarma işlemini belirttiğiniz -tables ile tablolarla sınırlayarak ya da -exclude_tables ile bazı tabloları hariç tutarak da gerçekleştirebilirsiniz. Sınırlandırma işlemini Post ID, User ve benzeri şekillerde de sınırlandırmak mümkün.

wp db export database.sql --path='/var/www/html/'

Export işlemini ayrıca wp core üzerinden arşiv olarak da gerçekleştirmek mümkün. Ancak bu durumda filtreleme ve benzeri yetenekler yerine tam bir export işlemi gerçekleştirilmiş olacaktır.

wp core download --path='/var/www/html/backup/'

Import işlemi de yine export komutuna benzer format yeteneklerine sahip. Buna ek olarak import işlemini -user ile belirtilen bir kullanıcı üzerine aktararak da sonuçlandırabilirsiniz.

wp db import database.sql

Veritabanı içerisinde aramalar yapmak için ise search komutundan faydalanmaktayız.

wp db search 'Welcome'

Bu işlemin sonucunda ilgili aramayla eşleşen tablo, sütun ve satır değerleri dönecektir.

Kullanıcı İşlemleri

WP-CLI ile kullanıcı işlemlerini de pratik bir şekilde gerçekleştirilebilir. Normalde tanımlı olan Subscriber, Contributor, Author, Editor, Administrator rollerine ek olarak yeni tanımlamalar yapabilir, roller arasında değişiklikler gerçekleştirebilirsiniz. Öncelikle tanımlı role listesini görüntüleyelim.

wp role list --fields=role

Editor role tanımlı yeni bir kullanıcı yaratalım.

wp user create bob bob@example.com --role=editor

Kullanıcının şifresi otomatik olarak üretilecektir. Şifre değiştirme işlemi yapalım.

wp user update bob --user_pass=[yeni-sifre]

Organizer adında yeni bir role tanımlayalım ve Editor yetkilerinin Organizer’a aktaralım. Son olarak Organizer ve Editor yetkilerine ek olarak etkinlikleri yönetme ayrıcalığı tanımlayalım.

wp role create organizer Organizer
wp cap list 'editor' | xargs wp cap add 'organizer'
wp cap add 'organizer' 'manage-events'

Organizer role yetkilerine göz atalım.

wp cap list 'organizer'

Yukarıda bob adında bir kullanıcı oluşturmuştuk, oluşturduğumuz bu kullanıcının güncel bilgileri alalım.

wp user get bob

Görüldüğü üzere kullanıcımıza editor role tanımlı. Herhangi bir role değişikliği yapmadan kullanıcımıza ayrıca manage-events ayrıcalığı tanımlayalım.

wp user add-cap bob 'manage-events'

Bob isimli kullanıcıya tanımlanan erişimleri listeleyelim.

wp user list-caps bob

Kullanıcının role tanımını Organizer olarak güncelleyelim.

wp user update bob --role=organizer

Editor olarak role tanımı yapılmış 10 adet test kullanıcısı yaratalım.

wp user generate --count=10 --role=editor

Editor olarak tanımlı tüm kullanıcıların role tanımını Organizer olarak güncelleyelim.

wp user list --role='field=ID | xargs wp user update--editor'  --role='organizer'

Test İçeriği Oluşturmak

Kullanıcı işlemleri içerisinde 10 adet test kullanıcısı oluşturmuştuk, bu başlık altında ek olarak test amacıyla kullanabileceğimiz post ve benzeri içeriklere bakalım. İlk aşamada 50 adet içerik (post) oluşturalım.

wp post generate --count=50

Şimdi de 10 adet kategori oluşturalım.

wp term generate category --count=10

Çöp ve Revizyon İçerikleri Temizlemek

Az önce oluşturduğumuz test kullanıcılarını listeleyelim.

wp user list --field=user_login | grep user_

Şimdi de bu kullanıcıları silelim.

wp user delete $(wp user list --field=user_login | grep user_)

Aynı işlemi oluşturulan post ve kategoriler için de gerçekleştirebilirsiniz. Önce test olarak eklediğimiz post’ları title’larına göre listeleyelim. Bu post’ların başlıkları Post 1, Post 2… şeklinde oluşturulmuştu. Bu bilgiyi kullanarak şu şekilde bir filtreleme sağlayabiliriz. Tabi bu durum -post_title parametresiyle başlık tanımı yapılmadığı için bu şekilde gerçekleştirildi. Sonraki süreci kolaylaştırmak adına sayfa başlıklarına ek olarak -post_date, -post_author, -post_content gibi daha pek çok parametre üzerinden özelleştirmeler gerçekleştirebilirsiniz.

wp post list --fields=ID,title | grep "^Post .[0-9]"

wp post delete komutu ID değeri üzerinden işlediği için silme aşamasında ID değerlerine ihtiyacımız var. Az önce gerçekleştirdiğimiz postları görüntüleme işlemini şimdi de ID ve title değerleri üzerinden gerçekleştirelim.

wp post list --fields=ID,post_title | grep "Post .[0-9]$"

Hala title değerine ihtiyacımız mevcut, çünkü içerikleri bu bilgi üzerinden diğer içeriklerden ayırmaktayız. Elbette, az önce edindiğimiz ID değerlerini de doğrudan silme işleminde de artık kullanabilirsiniz.

wp post delete $(wp post list --fields=ID,post_title | grep "Post .[0-9]$")

Şimdi de çöp kutusunu boşaltalım. Bu arada wp post delete komutuyla birlikte -force parametresini kullanırsanız içerikleriniz çöp kutusuna aktarılmadan silineceklerdir.

wp transient delete --all

Hazır gereksiz içeriklerimizi silmeye başlamışken revizyonları da kaldıralım.

wp post delete $(wp post list --post_type='revision' --format=ids)

Bu arada unutmadan, test içerikleri -post_status parametresiyle Draft ve diğer seçeneklerle de oluşturabilirdik. Bu aşamada sadece Draft olan postları listeleyebilir ve silme işlemi gerçekleştirebilirdik.

wp post list --post_type=post --post_status=draft

WP-Cron Görevlerini Yönetmek

Son olarak da WP-Cron görevlerine bakalım ve tanımlı görevleri (hook) detaylarıyla birlikte listeleyelim.

wp cron event list

Burada listelenen tüm etkinliklerin komutla birlikte işleme alalım.

wp cron event run --all --due-now

Evet, ihtiyaç duyabileceğiniz bazı işlemleri listelemeye çalıştım. Elbette bu örnekleri daha da artırabilir, farklı senaryolara uygun şekilde özelleştirerek uygulayabiliriz. Örneğin tail ile son eklenen 50 yazıyı listelemek gibi.

wp post list --allow-root | tail -n 50

Tail yerine WP_CLI_Command üzerinden kendimize komut oluşturarak da bu işlemi bash yerine WP yapısı üzerinden de gerçekleştirebiliriz. Çok basit bir şekilde WordPress üzerinde eklenmiş belirttiğimiz sayı kadar son postu ID ve Title değerleriyle listeleyelim ve bu listeleme işlemini WP_CLI::colorize() ile özelleştirelim. Kullanmak istediğimiz komutumuz da şu şekilde olsun;

wp showPosts lastPosts --count=50

Bu komutumuzu işleme alacak olan WPH_CLI_Command extends kodumuz şu şekilde:

if (!defined('ABSPATH')) {
 exit; // Exit if accessed directly.
}
if (defined('WP_CLI') && WP_CLI) {
 class WPH_CLI_Command extends WP_CLI_Command {
  function __construct() {
  }
  function lastPosts($args, $assoc_args) {
   if (!($count = $assoc_args['count'])) {
    $count = 10;
   }
   $args = array(
    'numberposts'      => $count,
    'orderby'          => 'post_date',
    'order'            => 'ASC',
    'post_type'        => 'post',
    'post_status'      => 'publish',
   );
   $lastPosts = wp_get_recent_posts($args, OBJECT);
   foreach ($lastPosts as $post) {
    echo WP_CLI::colorize("%mID: %G$post->ID %mTitle: %G$post->post_title %n")."\n";
   }
  }
 }
 WP_CLI::add_command( 'showPosts', 'WPH_CLI_Command' );
}

Ben bu tür dosyalar için plugins klasörü içinde WPH adında bir klasör oluşturuyorum. İlgili dosyamın adı da lastPosts-cli.php. Aktif temamın functions.php dosyasına da bu yolu tanımlıyorum.

if (defined('WP_CLI') && WP_CLI) {
require_once WP_PLUGIN_DIR . '/WPH/lastPosts-cli.php';
}

Hepsi bu kadar. Bu tür işlemler ve dahası için Internal API sayfasını inceleyebilirsiniz3. İlerleyen süreçte karşılaştığım problemlere dair ürettiğim çözümler dahilinde daha fazla örnek eklemem mümkün. Ek olarak, kendiniz örnekler üretmek ve WP-CLI ile ilgili daha pek çok detaya ulaşmak için WP-CLI Commands sayfasına göz atmanızda fayda var4.