WP-CLI

WP-CLI Post İşlemleri

Güncelleme:
Wp-CLI örneklerinde sıklıkla yer verdiğim wp post komutu yayınladığımız içerikleri post tipleri ve durumları başta olmak üzere sınıflandırıp pek çok işlem yapmamızı mümkün kılmaktadır.
GÖRSEL
Wp-CLI örneklerinde sıklıkla yer verdiğim wp post komutu yayınladığımız içerikleri post tipleri ve durumları başta olmak üzere sınıflandırıp pek çok işlem yapmamızı mümkün kılmaktadır. ID temelinde uygulayabileceğimi bu komutlara dair daha öncesinde post ve meta ile tüm postlara aynı görseli thumb olarak atamış, içeriklerde belirlediğimiz şablonlara uygun aramalar gerçekleştirmiş ve hatta go os/exec ile postları listelemiştik. Bu yazı altında ise wp post 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 metalarını yönetebilmemizi sağlar ve şu alt komutlara sahiptir.
Alt KomutAçıklama
wp post createYeni bir post oluşturmamızı sağlar.
wp post deleteVar olan / belirtilen bir postu (status ne olursa olsun; publish, future, draft, pending, private, trash, auto-draft,inherit (attahcments ve revisions) ve custom status. Post tiplerini wp post-type list komutu ile listeleyebilirsiniz.) silmemizi sağlar.
wp post editSystem editor (nano, vim vb.) aracılığıyla bir post’u düzenlememizi sağlar.
wp post existsBelirtilen postun var olup olmadığını kontrol eder.
wp post generateÖn tanımlı verileri kullanarak belirtilen sayıda örnek post oluşturur.
wp post getBelirtilen post ile ilgili detayları getirir.
wp post listPostları listeler.
wp post metaPost özel alan (custom field) ekleme, güncelleme, listeleme ve silme işlemlerini gerçekleştirir.
wp post termPost taksonomi öğeleri (term) ekleme, güncelleme, listeleme ve silme işlemlerini gerçekleştirir.
wp post updateVar 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 postlar 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ürmektedir. wp post create ön tanımlı olarak işleme alındığı zamanı alır. date komutu ile ilgili detaylı bilgi almak için şu yazıya göz atabilirsiniz. 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ı inceleyebilirsiniz. Özellikle --field kullanımı bağlamında wp_insert_post() argümanlarına göz atmak faydalı olacaktır.

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 Nasıl Kullanılır? başlıklı yazıdaki örnek kullanımlara da göz atabilirsiniz.

wp post edit

Belirtilen id değerine sahip postun 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ır. 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 postları 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

Postları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 KomutAçıklama
wp post meta addID, meta key ve meta value dışında --format tanımı da alarak meta oluşturma işlemi gerçekleştirir.
wp post meta setwp 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 deleteID, meta key ve meta value ile belirtilen metaları, --all ile ise tüm metaların silinmesini sağlar.
wp post meta getID, meta key ile belirtilen metalara dair detayları --format ile belirtilen şekilde getirir.
wp post meta listID, --keys, --fields ile ilgili post ile ilişik olan metaları detaylarıyla birlikte belitilen --format ve sırayla (--order ve --orderby) listeler.
wp post meta patchMeta 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 pluckMeta alan için iç içe bir değeri ID, meta key, meta key-path üzerinden belirtilen formatta getirir.
wp post meta updateBelirtilen 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_settingsmeta_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 kullanabilirim. Ö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 ekleyebilirim.
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ım:
Alt KomutAçıklama
wp post term addİlgili post’a yeni bir term eklememizi sağlar.
wp post term listPost ile ilişkili term’leri listeler.
wp post term removePost ile ilişkili bir term’i siler.
wp post term setİlgili post’a bir term iliştirmemizi sağlar.
wp post term createYeni 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ünceller.
wp post update 123 ./new-content.txt --post_name='New Post Name' --post_status=draft --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='New Post Name'), durumunu (--post_status=draft), meta içeriğini (--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.Evet, 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/ya karşılaştığınız sorunlar olursa yorum olarak paylaşabilirsiniz.

HABERDAR OL

Yeni eklenen projeler, eğitimler, içerikler ve yayınlanan videolar e-posta adresine gelsin.