WordPress İçeriklerin Markdown Olarak Dönüştürülmesi

Şu sıralar Headless CMS bağlamında çeşitli uygulamaları ve servisleri inceleyip en az eforla, en az kaynağı kullanıp en sağlıklı çözüme nasıl ulaşılabileceği yönünde incelemeler yapıyorum.

AA

Kullanılan programlama dilleri ve geliştirme ortamları ile ilişkili olarak pek çok alternatif yol takip edilebilmekte. Ben kişisel gereksinimlerim doğrultusunda tarayıcı işlemlerini ve veritabanı bağımlılığını ortadan kaldırmayı hedefledim. Bu nedenin temelinde içeriğin bir servis veya arayüzden bağımsız olması ve gerektiğinde manipüle edilebilir halde tutulması fikri yatmakta. Elbette bu fikrin de bazı sınırlandırmaları mevcut oldu. Detaylara aşağıda, başlıklar dahilinde bir bakalım.

WordPress İçerikleri ve Biçimlendirmeler

Şu an bu yazıyı okuduğunuz web sayfası WordPress üzerinde çalışmakta ve bildiğiniz üzere WordPress PHP dilini ve MySQL veritabanı motorunu kullanmakta. İçerikler Gutenberg1 veya tercihe bağlı olarak Klasik Düzenleyici2 adındaki bir metin düzenleyici aracılığıyla eklenmekte. Bu metin düzenleyicilerin ikisi de HTML etiketleri ile metni biçimlendirmekte ve biçimlendirilmiş hali ile veritabanında wp_posts tablosu içerisinde tutmakta. Bunları neden anlatıyorum?

Öncelikle, kullanılan CSS ve/veya JS framework’e bağlı olarak class ve id tanılarımız olabiliyor. Diğer yandan, WordPress custom fields ve eklentiler ile de çeşitli müdahalelerimiz olabiliyor. Bu bilgiler de wp_postmeta altında yer alıyor. Tüm bu müdahaleler bir noktadan sonra içeriğin biçime bağımlı olması anlamına geliyor. Örneğin, bu sitenin kullanıcı arayüzünde kullanılan CSS framework olarak Semantic UI kullandım. Bu framework bağlamında videoları duyarlı olarak şu şekilde içeriğe ekleyebilmekteyiz.

<div class="ui fluid embed" data-url="..." data-source="..."></div>

Ek olarak, yukarıdaki kod WP-Syntax3 tarafından GeSHi kuralları temelinde biçimlendirilmekte.

<pre lang="html4strict"><div class="ui fluid embed" data-url="..." data-source="..."></div>

Bu örnekler ve elbette daha pek çok müdahale çözümleri ortak paydadan uzaklaştırmakta.

WordPress ve Markdown İşlemleri

WordPress içerikleri elbette WP Githuber MD4 ve WP Editor.md5 gibi markdown editörleriyle üretilebilir. Ancak, yine içerik veritabanındaki bir tabloda diğer tablo ilişkileriyle anlam zenginliği kazanacak şekilde tutulacaktır.

Gridsome ve Gatsby gibi ortamlar sayesinde çözümler üretilebilmekte. Benim durumumda bu alternatifler sağlıklı bir şekilde bir sonuca ulaşamadılar. İçerik sayısı, içerik içerisindeki müdahaleler, ilişkiler çözüm içerisinde yer alamadılar. Örneğin, içeriklerin md formatıyla aktarılması aşamasında title ve id tanımları kullanılırken kimi çözümler etiketleri kullanıp kategorileri gözardı etmekteydi. Yayınladığım içerikler arasında tarihsel bir ilişki de olduğu için oluşturma ve güncelleme tarihleri, 404 hataları almamak için slug tanımları, ilgili eğitimlerin bağlantıları, ilişkili yazılar sebebiyle hazır çözümlerin dışına çıkmak gerekti.

İlk aşamada WP Gatsby Markdown Exporter6, wordpress-to-hugo-exporter7 ve wordpress-to-jekyll-exporter8 gibi çeşitli eklentileri denedim. Temel seviyede hepsi oldukça iş görmekteler. Ancak, içerik içerisindeki framework temelindeki özelleştirmeler ve içeriğin meta dataları belirtilen uygulama temelinde ele alınmakta. Bu aşamada Node.js ve WordPress REST API ile ilerlemeye karar verdim.

Node.js + WordPress REST

wordpress-export-to-markdown9 oldukça işlevsel bir eklenti. Görselleri bir CDN üzerinde üzerinde tuttuğum için daha önce denediğim eklentiler içerik içerisindeki görsel tanımlarını es geçmişlerdi. Ancak, wordpress-export-to-markdown bu görselleri de ayrıca toplamamı mümkün kıldı.

Ancak, tarihler ve diğer ek bilgileri sunmadığı için Node.js modüllerine yöneldim. npm altında konuyla doğrudan ya da dolaylı ilgisi olan 8000+ üzerinde modül mevcut. Ancak, seçenekler arasında markdown parser olarak 3 modül öne çıkmakta; html-to-markdown10, turndown11 ve html2md12.

html-to-markdown ve html2md pratik olmalarına karşın HTML içerikleri framework ve biçim özelleştirmeleri de hesaba katıldığında istediğim seviyede dönüştüremediler. turndown en makul sonucu aldığım modül oldu. Escaping, pre kullanımları, framework eklemeleri yine tam olarak elbette dönüştürülemedi. Dolayısıyla, içeriklere tekrar müdahale etmek gerekiyor.

Bu yazının devamı olarak WP REST API İle Post Listeleme ve Kategori İsimleri başlıklı yazımı okuyabilir, yazı içerisindeki adımları ve örnek uygulamaları takip ederek içeriklerinizi md formatında kayıt altına alabilirsiniz.

Markdown Editor

Bu süreçte elbette bir markdown editöre de ihtiyaç duyabilirsiniz. GitHub veya GitLab üzerinden de elbette düzenlemeler yapmak mümkün ancak pek pratik olmayacağı aşikar. Pratik bir uygulama olan Typora13 seçeneklerden biri. Ancak, VSC ile ilerlemek daha pratik. Ayrıca, markdownlint14 eklentisini de kurmanızı öneririm.

İçeriklerin Dönüştürülmesi

İlk tercihim pipedream üzerinden API ile dönen içeriklerin Dropbox hesabıma aktarılması yönünde oldu. Ancak, entegrasyon sağlansa dahi file_requests-create15 aşamasında time out problemleri yaşadığım için yerel ortam üzerinden devam ettim.

Sonuç itibariyle, içeriklerim istediğim metadatalara16 sahip bir şekilde markdown olarak derlenmiş oldular.