WP-CLI Post İşlemleri
Wp-CLI örneklerinde sıklıkla yer verdiğim post işlemleri ile ilgili biraz daha detay vermek istiyorum.
WP-CLI Post Komutu
wp post
komutu, komut satırı arayüzünü kullanarak WordPress post, content ve meta alanlarını yönetebilmemizi sağlar ve şu alt komutlara sahiptir1.
Alt Komut | Açıklama |
---|---|
wp post create |
Yeni bir post oluşturmamızı sağlar. |
wp post delete |
Var olan / belirtilen bir postu (status2 ne olursa olsun; publish, future, draft, pending, private, trash, auto-draft, inherit (attachments ve revisions) veya custom) silmemizi sağlar. |
wp post edit |
System editor (nano, vim vb.) aracılığıyla bir post’u düzenlememizi sağlar. |
wp post exists |
Belirtilen postun var olup olmadığını kontrol eder. |
wp post generate |
Ön tanımlı verileri kullanarak belirtilen sayıda örnek post oluşturur. |
wp post get |
Belirtilen post ile ilgili detayları getirir. |
wp post list |
Postları listeler. |
wp post meta |
Post özel alan (custom field) ekleme, güncelleme, listeleme ve silme işlemlerini gerçekleştirir. |
wp post term |
Post taksonomi öğeleri (term) ekleme, güncelleme, listeleme ve silme işlemlerini gerçekleştirir. |
wp post update |
Var olan bir ya da birden fazla post güncelleme işlemini gerçekleştirir. |
Temel açıklamaların ardından ilgili komut kullanımlarını örneklendirmeye başlayabiliriz. İlk örneğimiz yukarıdaki tablo satır sırasıyla gidecek olursak post oluşturma (create) üzerine olacaktır.
wp post create
Diğer komutlardan çok daha fazla opsiyon barındıran wp post create
ile belirlediğimi değerlere sahip post oluşturabilmekteyiz. Unutmadan, komut her uygulandığında tek bir post işleme alınır ve post ekleme işlemi tamamlandığında bir ID değeri döner; Örn. Success: Created post 11587
. wp post create
komutunun başarılı bir şekilde işleme alınabilmesi için içerik, başlık ve özet seçeneklerinden birinin tanımlı olması gerekmektedir. Aksi durumda Error: İçerik, başlık ve özet boş.
hatası dönecektir. İlk örnekte, sadece başlığı bulunan bir post oluşturalım.
wp post create --post_title='Demo Content'
wp post create
komutu yazar adı, post tipi (post) ve kategori gibi ön tanımlı değerleri alır ve aksi belirtilmediği sürece yazıları taslak (draft) olarak kayıt eder. Elbette komut içerisinde tüm bu alanları özelleştirerek kullanabiliriz. Hemen bir örnek oluşturalım.
wp post create --post_category=201,345 --post_content='Post içeriği' --meta_input='{"key1":"value1","key2":"value2"}' --post_type=page --post_title='Geleceğe Post' --post_status=future --post_date=$(date --date="5 days later" +"%Y:%m:%d")
Yukarıdaki komutumuz 201 ve 345 kategorileri --post_category=201,345
altında 5 gün sonra --post_date=$(date --date="5 days later" +"%Y:%m:%d")
yayınlanmak üzere --post_status=future
Post içeriği içeriğine --post_content='Post içeriği'
ve Geleceğe Post başlığına post_title=’Geleceğe Post’
sahip bir sayfa --post_type=page
oluşturmakta. Ek olarak, post içeriğinin yanı sıra meta alanları da {"key1":"value1","key2":"value2"}
belirtilmekte.
Unutmadan, örnek komut içeriğinde yer alan --post_date
değeri date komutunu üzerinden çağırdığım 5 gün sonrasının tarihini date --date="5 days later" +"%Y:%m:%d"
WordPress’in temel aldığı tarih formatını Yıl:Ay:Gün
olarak döndürmektedir3. wp post create
ön tanımlı olarak işleme alındığı zamanı alır.
Başka bir örneğe geçelim ve içeriğimizi bir metin dosyasından çekelim. Bu kullanıma dair hemen bir not ekleyeyim; dosya içeriği üzerinden post oluşturduğumuzda --post_content
içeriği işleme alınmaz. Yani aynı komut içerisinde 2 ayrı şekilde content belirtemeyiz.
wp media import https://s.w.org/style/images/wp-header-logo.png --post_id=$(wp post create ./test.txt --from-post=123 --comment_status=closed --post_type=post --post_excerpt="Post içerik özeti" --post_author=1 --porcelain) --title="gorsel-basligi" --featured_image
Yukarıdaki kodumuz admin kullanıcısı --post_author=1
üzerinden daha önce oluşturulmuş olan 123 id’li postu temel alarak --from-post=123
ve ardından içeriğini ./test.txt
dosyasından çekerek Post içerik özeti özetine --post_excerpt="Post içerik özeti"
sahip, yoruma kapalı --comment_status=closed
bir post --post_type=post
oluşturmakta ve bu oluşturulan posta https://s.w.org/style/images/wp-header-logo.png
görseli wp media import
komutu üzerinden öne çıkan görsel --featured_image
olarak atanmaktadır. Bu komut kullanımına dair elbette daha pek çok işlem yürütülebilir. Komuta dair daha detaylı bilgi için WP-CLI Commands > wp post create sayfasını inceleyebilirsiniz4. Özellikle --field
kullanımı bağlamında wp_insert_post()
argumanlarına göz atmak faydalı olacaktır5.
wp post delete
Belirtilen ID değerine sahip post(ları) siler ve silinen post(lar) çöp kutusuna (–post_status=trash) taşınır.
wp post delete 123
Komut --force
opsiyonuyla kullanıldığında silme işlemi ilgili post(lar) çöp kutusuna taşımadan gerçekleştirilir.
wp post delete $(wp post list --post_type='page' --format=ids) --force
Ayrıca WP-CLI ile ilgili yazımdaki örnek kullanımlara da göz atabilirsiniz.
wp post edit
Belirtilen ID değerine sahip post content’i sistem editörü aracılığıyla görüntülenebilir ve kayıt edildiğinde ilgili post güncellenir.
wp post edit 123
Sistem editörünü kendiniz belirlemek isterseniz komut başında kullanmak istediğiniz editörü belirtmeniz gerekir.
EDITOR=nano wp @cea post edit 123
wp post exists
Belirtilen id değerine sahip post olup olmadığını öğrenmek için wp post exists
komutu kullanılabilir.
wp post exists 123
wp post generate
Belirtilen sayıda --count
, post tipinde --post_type
ve durumunda --post_status
postlar oluşturmamızı sağlar. Bu post oluşturma işleminde ayrıca başlık --post_title
, içerik --post_content
, yazar --post_author
, yayınlanma tarihi --post_date
gibi bilgiler de tanımlayabiliriz. İlgili post üretme işlemi WP-CLI içeriğinde tanımlı örnek içeriklerle oluşturulmaktadır.
curl http://loripsum.net/api/10 | wp post generate --post_content --count=10
Yukarıdaki kod loripsum.net
adresinden 10 adet içerik alır ve wp post generate
komutuna belirtilen sayıda --count=10
page --post_type=page
oluşturması için --post_content
olarak aktarır.
wp post get
Belirtilen id değerine sahip post ile ilgili bilgileri belirtilen alanlar --field
, --fields
üzerinden belirtilen şekilde --format=table|csv|json|yaml
görüntülememizi sağlar.
wp post get 123 --field=content > post.txt
Yukarıdaki komut örneği 123 ID’li postun içeriğini --field=content
post.txt dosyasına aktarmaktadır. Örneğimizi biraz daha değiştirelim ve @proje
olarak tanımlı WordPress kurulumunda yer alan 123 ID’li post içeriğini --field=content
alıp @kisisel
olarak belirtilen WordPress kurulumuna yeni bir post içeriği olarak aktaralım.
wp @kisisel post create --post_content="$(wp @proje post get 123 --field=content)"
wp post list
wp post list
Komutu uyguladığımızda tüm postlar ID
, post_title
, post_name
, post_date
ve post_status
bilgileri ile birlikte listeleneceklerdir. Bu listeleme işlemi WP_Query()
tarafından desteklenen tüm argümanları kapsamaktadır6. O halde örneğimizi biraz daha genişletelim ve @proje
takma adına sahip WordPress kurulumunda yer alan course tipindeki ve publish durumdaki (-post_status=publish
) custom post'ları listeleyelim.
wp @proje post list --post_type=course --post_status=publish
--post_type
ön tanımlı olarak post
değerini almaktadır, course
sonradan eklenmiş bir custom post tanımıdır. Birden fazla post tipi ve bu tiplerden sadece birkaç tanesini işaret etmek istersek virgül ,
ile ilgili tipleri ayırarak --post_type
tanımı yapabiliriz.
wp @proje post list --post_type=course,project --post_status=draft
post ve diğer custom post type ifadeleri dışında WordPress page
post type değerine de sahiptir ve sayfaları bu post tipi altında tutar.
wp @all post list --post_type=page --post_status=trash --author_name=admin
Yukarıdaki örnek config.yml altında tanımladığımız tüm WordPress sitelerinde yer alan admin kullancısı tarafından oluşturulmuş -author_name=admin
ve silinmiş -post_status=trash
page -post_type=page
post tipine sahip içerikleri listeleyecektir. --author_name
WP_Query()
tarafından desteklenen argümanlardan biridir. Diğer alanlar ise ön tanımlı alanlardır. Örneğimizi biraz daha genişletelim ve az önceki örneğimizi farklı bir amaç için kullanalım.
wp @kisisel post create --post_content=$(wp @proje post list --field=post_content --post__in=10 --post_type=page --post_status=trash --author_name=admin) --post_title='New Post' --post_status=draft --post_type=post
Yukarıdaki örnek wp @proje
altında, admin kullanıcısına ait --author_name=admin
10 ID’li --post__in=10
silinmiş --post_type=trash
sayfanın --post_type=page
içeriğini --field=post_content
alıp @kisisel
olarak adlandırılan WordPress kurulumuna yeni bir post --post_type=post
taslağı --post_status=draft
olarak New Post başlığı ile --post_title='New Post'
ekleyecektir.
wp post meta
Post'ların (tipine bağlı olmaksızın) meta içeriklerini yönetmemizi sağlar. Bu işlemler için wp post meta
kendi alt komutlarına sahiptir.
Alt Komut | Açıklama |
---|---|
wp post meta add |
ID , meta key ve meta value dışında --format tanımı da alarak meta oluşturma işlemi gerçekleştirir. |
wp post meta set |
wp post meta add ve post meta update ile kısmen benzerliğe sahiptir. Belirtilen meta ifadesi var ise günceller, yok ise belirli şartlar dahilinde ekler. Farklılığı şu şekilde açıklayabiliriz. meta key olarak _thumbnail_id tanımlanmamış bir post için set komutu add ile benzer işlev görecektir. Bir değere sahip _thumbnail_id için set kullanıldığında meta value değeri değişmez. Ancak, _thumbnail_id eğer boş bir meta value alanına sahipse set ile belirtilen değeri alır. add kullanımında ise var olan _thumbnail_id işleme alınmaz ve yeni bir _thumbnail_id key ve meta value eklenir. |
wp post meta delete |
ID , meta key ve meta value ile belirtilen metaları, --all ile ise tüm metaların silinmesini sağlar. |
wp post meta get |
ID , meta key ile belirtilen metalara dair detayları --format ile belirtilen şekilde getirir. |
wp post meta list |
ID , --keys , --fields ile ilgili post ile ilişik olan metaları detaylarıyla birlikte belitilen --format , sırayla --order ve --orderby listeler. |
wp post meta patch |
Meta alan için iç içe bir değeri belirtilen ID, meta key , meta key-path , meta value üzerinden action olarak tanımlanan şekilde --insert , --update , --delete ve formatta işleme alır. |
wp post meta pluck |
Meta alan için iç içe bir değeri ID , meta key , meta key-path üzerinden belirtilen formatta getirir. |
wp post meta update |
Belirtilen ID , meta key ve meta value değerlerini belirtilen formatta günceller. |
Tablo özetinin ardından örneklere geçebiliriz.
wp @kisisel post meta list 123
Yukarıdaki komutu uyguladığımızda ilgili ID
değerine sahip post için tanımlanmış olan tüm meta_key
ve meta_value
içerikleri ön tanımlı olarak table
formatında listelenecektir.
+---------+------------------------------------------------------+-------------------------------------------------------+
| post_id | meta_key | meta_value |
+--------+------------------------------------------------------+-------------------------------------------------------+
| 123 | _vc_post_settings | {"vc_grid_id":[]} |
| 123 | _edit_lock | 1547974090:1 |
| 123 | _edit_last | 1 |
| 123 | _wp_page_template | default |
| 123 | _aioseop_opengraph_settings | {"aioseop_opengraph_settings_title":"","aioseop_openg |
| | | raph_settings_desc":"","aioseop_opengraph_settings_cu |
| | | stomimg":"","aioseop_opengraph_settings_imagewidth":" |
| | | ","aioseop_opengraph_settings_imageheight":"","aioseo |
| | | p_opengraph_settings_video":"","aioseop_opengraph_set |
| | | tings_videowidth":"","aioseop_opengraph_settings_vide |
| | | oheight":"","aioseop_opengraph_settings_category":"ar |
| | | ticle","aioseop_opengraph_settings_section":"","aiose |
| | | op_opengraph_settings_tag":"","aioseop_opengraph_sett |
| | | ings_setcard":"summary_large_image","aioseop_opengrap |
| | | h_settings_customimg_twitter":"","aioseop_opengraph_s |
| | | ettings_customimg_checker":"0"} |
| 123 | _schema_disable_body | |
| 123 | _schema_disable_post | |
| 123 | _wpb_vc_js_status | true |
| 123 | dpsp_networks_shares | {"facebook":0,"pinterest":0} |
| 123 | _oembed_14048b3584e24b80895223b00a89b2aa | {{unknown}} |
| 123 | _aioseop_keywords | dijital pazarlama, veri analizi, veri görselleştirme, |
| | | online pazarlama, segmentasyon, segmentation, google |
| | | analytics, facebook analytics, hotjar, google tag ma |
| | | nager, google ads |
| 123 | _aioseop_description | Temel düzeyde verileri etkin bir şekilde kullanarak k |
| | | ullanıcıları anlamak, dijital pazarlama çalışmaları y |
| | | ürütmek ve süreci daha efektif hale getirmek. |
| 123 | _aioseop_title | Temel Düzel Dijital Pazarlama ve Veri Analizi |
+--------+------------------------------------------------------+-------------------------------------------------------+
wp @kisisel post meta list 123 --keys=_aioseop_keywords --order=asc --fields=meta_value --format=yaml
Yukarıdaki örnekte @kisisel
olarak işaretlenmiş WordPress kurulumunda yer alan 123 ID’li postun _aioseop_keywords
meta key değeri (birden fazla olabilir) sadece meta_value
sütunu görüntülenecek şekilde YAML formatında ascending listelenmektedir. Yeni bir örnek ile ilgili ID’ye meta key ve value ekleyelim.
wp post meta add 123 _thumbnail_id 987
wp post meta set 123 _thumbnail_id 987
wp post meta update 123 _thumbnail_id 987
Yukarıda add
, set
ve update
örneklerini beraber vermemin nedeni açıklama tablosunda da belirttiğim kısa açıklamayı örnek üzerinden göstermek. add
ile belirttiğimiz her meta key
belirtilen meta value
ile birlikte daha önce tanımlanmış olsa dahi yeniden eklenecektir. add
uygulamasında önceki meta key
ve meta value
içerikleri kontrol edilmez. set
kullanımında belirtilen meta key
önceden tanımlanmış ise -birden fazla eklenmiş ise son eklenen- kontrol edilir ve meta value
farklılığı var ise yeni belirtilen meta value
ile güncellenir. Güncelleme işleminden sonra şu bildirim döner; Updated custom field '[meta key]'.
. Meta value
içeriğinde bir farklılık yok ise işlem es geçilir ve şu bildirim döner; Success: Value passed for custom field '[meta key]' is unchanged.
update
kullanımında ise belirtilen meta key
‘in kaç defa tanımlandığı önemli olmaksızın tüm meta value
değerleri belirtilen şekilde güncellenir. Yeni bir örneğe geçelim.
wp post meta delete 123 _thumbnail_id
delete
komutunu uyguladığımızda ilgili meta key
silinir. Birden fazla eklenmiş ise meta value
değerlerine bakılmaksızın ilgili tüm alanlar silinecektir. Ancak, ayrıca meta key
ve meta value
değerleri belirtilerek ilgili eklemenin silinmesi sağlanabilir.
wp post meta delete 123 _thumbnail_id 987
get
kullanımında belirtilen meta key
‘e ait meta value
değeri getirilir. İlgili meta key
birden fazla eklenmiş ise ilk eklenenin meta value
değeri döndürülür. Hemen bir örnek oluşturalım;
wp post meta get 123 _thumbnail_id 987
patch
ve pluck
ile ilgili de örneklere bakıp meta anlatımını sonlandıralım. Örnekte _aioseop_opengraph_settings
meta_key’i kullanacağım. İçeriği şu şekilde;
+---------+-----------------------------+--------------------------------------------------------------------------------------------------------------+
| post_id | meta_key | meta_value |
+---------+-----------------------------+--------------------------------------------------------------------------------------------------------------+
| 3001 | _edit_lock | 1546028677:1 |
| 3001 | _edit_last | 1 |
| 3001 | _aioseop_opengraph_settings | {"aioseop_opengraph_settings_title":"","aioseop_opengraph_settings_desc":"","aioseop_opengraph_settings_cust |
| | | omimg":"","aioseop_opengraph_settings_imagewidth":"","aioseop_opengraph_settings_imageheight":"","aioseop_op |
| | | engraph_settings_video":"","aioseop_opengraph_settings_videowidth":"","aioseop_opengraph_settings_videoheigh |
| | | t":"","aioseop_opengraph_settings_category":"article","aioseop_opengraph_settings_section":"","aioseop_openg |
| | | raph_settings_tag":"","aioseop_opengraph_settings_setcard":"summary","aioseop_opengraph_settings_customimg_t |
| | | witter":"","aioseop_opengraph_settings_customimg_checker":"0"} |
| 3001 | dpsp_networks_shares | {"facebook":0,"pinterest":0} |
+---------+-----------------------------+--------------------------------------------------------------------------------------------------------------+
Bu içerikte yer alan aioseop_opengraph_settings_category
article
sahip ve ben article
değerini blog olarak değiştirmek istiyorum. İşte bu noktada pluck
komutunu kullanabilirim7. Öncelikle aioseop_opengraph_settings_category
değerini alalım.
wp post meta pluck 123 _aioseop_opengraph_settings aioseop_opengraph_settings_category
Yukarıdaki komutu uyguladığımda article
dönüşünü alırım. Şimdi bu alanı patch
komutunu kullanarak blog
değeri ile güncelleyebilirim. Elbette patch
ile güncelleme dışında var olan bir key-path
‘i silebilir ya da yeni bir key-path
ekleyebilirim8.
wp post meta patch update 123 _aioseop_opengraph_settings aioseop_opengraph_settings_category blog
wp post term
WordPress’te terimler (terms) taksonomideki tekil öğeleri ifade eder. Örneğin, bir web sitesinde kitaplar, ürünler, kurslar ve bloglar gibi kategoriler olduğunu varsayalım. Tüm bu kategorin her biri taksonomi iken, kategorilerin kapsamındaki öğeler terim olarak ifade edilirler. WordPress başlangıç dönemlerinde etiket ve kategoriler için template etiketleri (custom taxonomies) kullanmaktaydı. Özel taksonomiler ile birlikte ayrıca yapılar oluşturulması mümkün hale geldi. Bu sayede özel sayfalar ve sayfa tipleri için ayrı taksonomiler ve terimler de oluşturulması mümkün kılındı. wp post term
komutu da bu gelişmelere uygun olarak yeni term ekleme, listeleme, silme ve tanımlama gibi özellikler sunmakta. Özet bir tablo üzerinden bu alt komutlara bir bakalım9:
Alt Komut | Açıklama |
---|---|
wp post term add |
İlgili post’a yeni bir term eklememizi sağlar. |
wp post term list |
Post ile ilişkili term’leri listeler. |
wp post term remove |
Post ile ilişkili bir term’i siler. |
wp post term set |
İlgili post’a bir term iliştirmemizi sağlar. |
wp post term create |
Yeni bir term oluşturur. |
İlk örneğimiz ID’sini belirttiğimiz post’un kategorilerini slug
olarak listelemek olsun;
wp post term list 123 category --field=slug
Slug
dışında term_id
, name
, taxonomy
, term_taxonomy_id
, description
, term_group
, parent
ve count
kullanabileceğim diğer seçenekler. Bir de category
yerine post_tag
üzerinden term_id
ve name
değerlerine göz atalım ve bu değerlerin csv
olarak listelenmesini isteyelim.
wp post term list 123 post_tag --fields=term_id,name --format=csv
Şimdi yeni bir post_tag
term
oluşturalım ve ID’si belirtilen post’a iliştirelim. Aşağıdaki komutu uyguladığımızda 'New Tag'
adında name
bir post_tag
term
oluşturulacak ve oluşturulan term
‘in ID
değeri dönecektir.
wp term create post_tag 'New Tag' --porcelain
Dönen ID değerinin 987
olduğunu varsayalım. Bir sonraki adımda 123
ID’li postumuza 987
ID’li post_tag
‘i iliştirebiliriz.
wp post term add 123 post_tag 987
İlgili komutu tek bir satır haline de getirebiliriz.
wp post term add 123 post_tag $(wp term create post_tag 'New Tag' --porcelain)
set
kullanımında ilgili etiketin var olup olmadığı kontrol edilmez ve her durumda (yok ise oluşturularak) belirtilen etiket ilgili yazıya iliştirilir. Örneğimizde var olmayan Oldest Posts
name
değerine sahip bir kategoriyi 123 ID’li yazımıza iliştirelim.
wp post term set 123 category 'Oldest Posts'
remove
ise belirtilen ID
taxonomy
ve term
üzerinden ilgili term
‘i siler.
wp post term remove 123 post_tag 'Oldest Posts'
wp post update
ID ile belirtilen opsiyonlar dahilinde (yayınlama tarihi, yazar, içerik, başlık, özet, durum, tip vb.) bir veya daha fazla postun belirtilen alanlarını günceller10.
wp post update 123 ./new-content.txt --post_name='post_status=draft--New Post Name' --meta_input='{"key1":"value1","key2":"value2"}' --post_category=3,5,7 --comment_status=closed --post_type=page --post_author=1
Yukarıdaki komut 123 ID
‘li postun içeriğini ./new-content.txt
, adını --post_name='post_status=draft'
, meta içeriğini --New Post Name
, durumunu --meta_input='{"key1":"value1","key2":"value2"}'
, kategorilerini --post_category=3,5,7
, yorum durumunu --comment_status=closed
, post tipini --post_type=page
ve yazarını --post_author=1
belirtilen değerlerle güncelleyecektir.
WP-CLI post işlemlerine dair mümkün olduğu kadar anlaşılır bilgiler aktarmaya çalıştım. Bu sayede komut satırı arayüzünü kullanarak pek çok WordPress kurulu web sitesine erişim sağlayabilir ve bu sitelerin içeriklerine kolaylıkla ve güvenli bir şekilde müdahale edebilirsiniz. Ek soru ve/veya karşılaştığınız sorunlar olursa yorum olarak paylaşabilirsiniz.