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.
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.