WP-Cli İle Post İçeriklerinde Arama İşlemi

WP-CLI post ve meta ile tüm postlara aynı görseli thumbnail olarak atadıktan sonra bir sonraki aşamaya geçelim ve yazı içeriğindeki bazı aramalar yapalım.

AA

Örneğin, WordPress > Upload klasöründe tuttuğumuz () ve yazı içeriğine dahil ettiğimiz görselleri bulalım. Shortcode temizliğinde bu işlemi Visual Composer eklentisi için gerçekleştirmiş ve örnekleri farklı HTML etiketleri ile genişletmiştik.

WP-Cli Post Listeleme

WP-Cli Post Sıralama ve İşaretleme (Grep) İşlemleri

Bir önceki yazım wp-cli ile thumbnail atama içeriğinde --format ve --post_type kullanımlarına değinmiştim. Şimdi bu bilgileri bir örnek satırda uygulayalım.

wp post list --fields='post_type='post,course,project'--ID,post_content' --format='table'  --post_status='publish'

Örneğimiz --post_type='post,course,project' ve --post_status='publish' ile post, course, project yazı tiplerinde yayınlanmış yazıları ID ve post_content alanları ile sınırlı olacak şekilde sıralayacak ve bize table formatında sunacaktır. Şimdi komutumuza küçük bir ekleme yapalım ve grep yazısında bahsettiğim gibi bir işaretleme (mesela işaretleyeceğimiz ifade şu olsun: /wp-content/uploads/) gerçekleştirelim.

wp post list --fields='post_status='publish' | grep--ID,post_content' --format='table' --post_type='post,course,project'  '/wp-content/uploads/'

İşlemimiz ilk komut satırına kıyasla çok daha kısa sürdü ve belirttiğimiz ifade renklendirilmiş olarak listemizde yer aldı, değil mi? Ancak, ifade oldukça geniş bir tanım niteliğine sahip. Esasında /wp-content/uploads/ ile görselleri işaretlemek isterken bazı yazılar içerisinde geçen örnekleri de listelemiş oldum. Mesela jpegoptim yazımdaki şu satır:

jpegoptim /var/www/html/wp-content/uploads/*.jpg -m 90

Peki, tanımı nasıl daha net bir şekilde ifade edebiliriz? Aklıma gelen ilk çözüm yolu grep komutuna küçük bir ekleme yapmak (-oP) ve regex ile bir şablon oluşturmak oldu.

wp post list --fields='oP-post_status='publish' | grep -ID,post_content' --format='table' --post_type='post,course,project' - ''

Bu komut ile birlikte içerikler içerisinde img etiketine odaklanmış olmaktayız. Komut uygulandığında satır satır img etiketi tüm özellikleriyle birlikte (title, src, class, id, alt vb.) sıralanacaktır. Ancak, sonuçlara baktığımızda az önceki uygulamamızda yer alan /wp-content/uploads/ satırlarının dışında da src tanımları yer aldığını görebiliriz. O halde şablonumuzu biraz daha netleştirelim.

wp post list --fields='oP-post_status='publish' | grep -ID,post_content' --format='table' --post_type='post,course,project' - ''

Daha iyi oldu, değil mi? Değil! Çünkü img etiketini tam olarak sınırlandıramadığımız için bazı istenmeyen etiketler de (örneğin div) sıralama alabilir, en azından ilerleyişim içerisinde birkaç div etiketine denk geldim. Şablona biraz daha odaklanalım.

Regex IMG Serc

Bu defa img src tanımlamalarımız özelinde bir şablon oluşturalım. Yıl ve ay bilgisini işimize yarar. Bir önceki örneklerde de klasör yolunu kullanmıştık. \/\d{4}\/\d{2}\/.*?(jpg|png|webp) bize /yil/ay/medya şeklinde bir tanım sağlar.

wp post list --fields='ID,post_content' --format='table' --post_type='post,course,project' --post_status='publish' | grep -oP '\/\d{4}\/\d{2}\/.*?(jpg|png|webp)'

Komutu uyguladığımızda /2013/11/arduino_uno_r3_1.png gibi görselimizin tarihsel konumu ve dosyanın adını alırız. Şablonumuz neredeyse ihtiyacımız olan tanımı sağladı diyebiliriz. Peki, ilerleyişimizi şu şekilde yeniden ele alalım. Görsel yolunda şunlar net bir şekilde yer almakta; alan adı, upload yolu ve görsel adı. Bu bilgileri kullanıp >> images.txt ile bir metin dosyasına (images.txt) aktarmaya ne dersiniz?

wp post list --fields='ID,post_content' --format='table' --post_type='post,course,project' --post_status='publish' | grep -oP 'https:\/\/ceaksan.*?\/\d{4}\/\d{2}\/.*?(jpg|png|webp)' >> images.txt

Evet, sonucumuz gayet net ve anlaşılır. Herhangi bir istenmeyen değer de satırlar arasında yer almamakta!

Grep Image Src

İlgili metin dosyası içerisinde yer alan görselleri wget ile indirmeye ne dersiniz?

wget -i [alanadi.com]/images.txt

İşlemlerimiz bu kadar. Gördüğünüz üzere adım adım metin içerisinden bizim için öne çıkan alanları tam da ihtiyaç duyduğumuz şablon içerisinde edindik ve farklı amaçlar doğrultusunda kullanılabilir olarak kayıt altına aldık ve hatta son adımda ilgili görselleri de doğrudan edindik. Örneğin bu görsel satırlarını görselleri ayrı bir WordPress kurulumu içerisine de kolaylıkla dahil edebiliriz1.

while read newimage; do
wp media import $newimage
done < images.txt

Son olarak, ihtiyaç duyabileceğinizi düşünerek görsellerin optimize edilmesine yönelik bazı içerikleri paylaşmak istiyorum. Yukarıdaki değindiğim süreç her ne kadar içerik içerisinde bir veri/değer aramak üzerine olsa da neticede amacım CDN servisine aktar(a)madığım görselleri bulmaktı. Dolayısıyla bir anlamda WordPress medya içeriklerinin optimize edilmesi amacı söz konusuydu.