Claude Code WordPress Kurulumu: Elementor Şantiye Günlüğü

Claude Code WordPress kurulumu yazısının kapağı: uygulama şifresinden yayına Elementor sitesini REST ile kurma sırası

Claude Code WordPress’e uygulama şifresiyle, çekirdeğin REST API’si üzerinden bağlanır; Elementor V4 sayfalarını da Elementor’un kendi yetenekleriyle (örneğin build-composition) taslak olarak kurar. MCP işi kolaylaştırır ama şart değildir; siteye ek eklenti kurmak da gerekmez. Bu şantiye günlüğü, Hello Elementor, Elementor Pro, Rank Math ve LiteSpeed Cache kullanan sitelerde HTML widget’ına kod yapıştırmadan, gerçek Elementor öğeleriyle site kurarken izlediğim sıranın ve yolda çıkan hataların derli toplu özeti.

Kurulumları Elementor 4.3 ve Elementor Pro 4.2 ile yaptım; yazıdaki güncel sürümler (WordPress 7.1.2, Elementor 4.3.2) 26 Eylül 2026 itibarıyla geçerli. Yazıyı kendi notlarımdan, taslak aşamasında yapay zekâ yardımıyla hazırladım; hata mesajları ve uç noktalar WordPress ile Elementor’un kaynak koduyla karşılaştırılarak doğrulandı.

Claude Code WordPress’e hangi yollarla bağlanır?

Aşağıdaki iki resmi yol da (Elementor MCP ve WordPress MCP Adapter) WordPress 6.9 ile gelen Abilities API’ye dayanıyor: eklentiler “yetenek” (ability) kaydediyor, yapay zekâ aracı da bu yetenekleri MCP üzerinden ya da doğrudan REST ile çağırıyor. MCP’nin ne olduğunu MCP nedir yazımda anlattım; burada WordPress tarafına bakıyorum.

YolNe istiyorDikkat edilecek nokta
Elementor MCP (resmi)Yardım sayfasına göre WordPress 6.8+, Elementor Core ve Pro 4.3.0+, yönetici hesabı22 Eylül 2026’da 4.3.0 ile çıktı, MCP Adapter’ı içinde taşıyor. Kod Abilities API’yi şart koştuğu için pratikte WordPress 6.9+ gerekiyor. Şimdilik yalnızca V4 (Atomic); ürettiği her şey taslak olarak kaydediliyor
WordPress MCP AdapterAdapter paketi + uygulama şifresi ya da OAuthÇekirdekte değil, ayrı paket olarak dağıtılıyor (son sürüm v0.6.1, Ağustos 2026). MCP erişimi için ayrı ve sınırlı yetkili bir kullanıcı öneriliyor
Üçüncü taraf MCP eklentileriSiteye ek eklentiYetki kapsamı eklentiye göre değişiyor; örneğin Novamira, kendi açıklamasına göre PHP ve WP-CLI düzeyinde erişim veriyor ve yalnızca geliştirme ve test (staging) ortamı için öneriliyor
REST + Abilities RESTYalnızca uygulama şifresiEk katman yok; bu günlükte kullandığım yol

Elementor, yeteneklerini kaydederken her birini hem MCP’ye hem REST’e açık işaretliyor. Yani MCP bağlanamasa bile aynı araçlar /wp-json/wp-abilities/v1/ altından çağrılabiliyor. Kimlik tarafında da yollar birleşiyor: Elementor MCP bağlanırken sitede bir uygulama şifresi oluşturuyor, WordPress MCP Adapter duyurusu da uzaktan erişim için uygulama şifresi ya da özel bir OAuth kurulumu istiyor.

Başlamadan önce üç şantiye kuralı

Şifre sohbete yazılmaz

Uygulama şifresini Kullanıcılar > Profil > Uygulama Şifreleri ekranından oluşturuyorum. Kullanıcı adını ve şifreyi terminalde kendim giriyorum; şifre read -s sayesinde ekrana yansımıyor. Komut ikisini ev dizinindeki bir dosyaya yazıyor ve chmod 600 ile dosyayı yalnızca benim hesabımın okuyabileceği hale getiriyor. Claude Code bundan sonra yalnızca dosyanın yolunu biliyor. Uygulama şifreleri entegrasyon rehberine göre bu özellik WordPress 5.6 ile geldi, varsayılan olarak yalnızca HTTPS sitelerde açık ve wp-login.php’de, yani panel girişinde kullanılamıyor.

Bu düzenin amacı şifreyi Claude’dan saklamak değil. Claude Code’un izin dokümanına göre dosya okuma yasakları Claude’un kendi araçlarını ve cat, head gibi komutları kapsıyor ama dosyayı kendisi açan bir Python betiğini kapsamıyor; çağrıları yapan betik de şifreyi zaten bu dosyadan okuyor. Asıl kazanç, şifrenin sohbet geçmişine ve günlüklere düşmemesi. İş bitince şifre aynı profil ekranından tek tıkla iptal edilebiliyor; kurulum sonrası ilk temizlik bu olmalı.

Her şey taslakta kurulur, canlı ayar onayla değişir

Sayfaları ve şablonları taslak olarak kuruyorum. Ana sayfa ataması gibi canlı siteyi etkileyen ayarlar yalnızca site sahibinin onayıyla değişiyor; kalıcı bağlantı yapısı ise REST’te zaten yok, panelden ayarlanıyor. Elementor da aynı refleksle çalışıyor: Elementor MCP sayfasındaki SSS, üretilen her şeyin taslak olarak kaydedildiğini ve gözden geçirip yayınlamadan hiçbir şeyin canlıya çıkmadığını söylüyor. Elementor blogundaki bir ajans vakasında da ekip, yapay zekâ ajanına canlı sitede şimdilik sınırsız erişim vermeyeceğini yazıyor.

Az istek, düşük tempo

Güvenlik eklentileri ve sunucudaki koruma katmanları art arda gelen istekleri saldırı sanıp kesebiliyor. Bu yüzden istekleri toplu ve seyrek tutuyorum: şemaları bir kez çekip dosyaya kaydediyorum, her bölümü tek çağrıda kuruyorum.

Sıfırdan yayına 10 adım

On adım, beş grup; sıra her projede aynı.

WordPress ve Elementor kurulumunun beş gruba toplanmış 10 adımı: bağlantı testinden taslak sayfalara ve yayına
Sayfalar hep taslakta kurulur; yayın, kontrol listesi bittikten sonraki son adımdır.

1–3: Bağlantı testi ve ilk kontroller

İlk çağrı /wp-json/wp/v2/users/me?context=edit&_fields=id,username,roles. Kullanıcı adı ve roller dönüyorsa kimlik doğrulama çalışıyor. Ardından eklenti listesine (/wp/v2/plugins), site ayarlarına ve etkin Elementor kitine (/elementor/v1/settings/elementor_active_kit) bakıyorum. Sonuncusu en çok vakit kaybettiren tuzağı yakalıyor: etkin kit ayarı silinmiş bir kaydı gösterdiğinde global sınıf çağrıları “ok” dönüyor ama hiçbir şey kaydedilmiyor, değişken çağrıları ise 500 verebiliyor. Nedeni Elementor’un kaynak kodunda: kit geçerli değilse boş bir kit örneği dönüyor ve yazma işlemi bu boş örneğe gidiyor. Çözüm, aynı adrese var olan kitin kimliğini POST etmek.

Hazır şablon kitiyle gelen sayfalar, yüklü olmayan eklentilerin widget’larını taşıyabiliyor; bu widget’lar görünmediği için sayfayı yeniden kurmak daha temiz.

4–5: Şemalar ve tasarım sistemi

Elementor’a ne yazılabileceğini tahmin etmiyorum, soruyorum. Önce elementor/list-widget-schemas ile summary=true özet listesini, sonra yalnızca kullanacağım öğe tipleri için elementor/get-widget-schema çıktısını alıyorum. Şemaları dosyaya kaydedip Claude’a yalnızca gerekeni okutmak hem istek sayısını hem bağlamı küçültüyor. MCP yolunda bu ayrıca önemli: Claude Code, MCP araç çıktısını Eylül 2026 itibarıyla varsayılan olarak 25.000 token ile sınırlıyor. Tasarım sistemi sayfalardan önce geliyor: global değişkenleri elementor/manage-global-variable, global sınıfları elementor/manage-classes ile oluşturuyorum. İkincisi tek çağrıda 1 ile 50 arası işlem kabul ediyor.

6: Sayfalar taslakta, önce dry_run

Sayfayı elementor/create-page ile taslak olarak açıp içeriği elementor/build-composition ile kuruyorum. Bu yeteneğin zorunlu alanları post_id ve xml_structure. XML’deki her öğe benzersiz bir configuration-id taşıyor; ayarlar, stil ve global sınıf etiketleri bu kimliğe bağlanıyor. Elementor’un dokümanı XML’in CDATA içine sarılmamasını açıkça istiyor; sarılırsa empty_composition hatası dönüyor. Her bölümü önce dry_run: true ile gönderiyorum; bu mod yalnızca doğruluyor, kaydetmiyor. Sayfayı baştan kurmak için mode: replace_children ve parent_id: document kullanıyorum; yanıt silinen öğeleri removed_element_ids alanında döndürüyor.

Kontrol için elementor/create-preview-link giriş gerektirmeyen bir önizleme bağlantısı üretiyor. Kaynak koda göre bağlantı 5 dakika geçerli; bu yüzden onu yalnızca kendi kontrolüm için kullanıyor, site sahibine düzenleme bağlantısını veriyorum.

7–8: Header, footer, 404, menü ve logo

Tema şablonlarını /wp/v2/elementor_library uç noktasında _elementor_template_type meta’sıyla (header, footer, single-post, error-404) oluşturuyorum. Şablonun nerede görüneceğini belirleyen koşul, /elementor/v1/site-editor/templates-conditions/ID adresine PUT isteğiyle atanıyor. İçeriği yine build-composition kuruyor, post_id olarak şablonun kimliği veriliyor. Panelden açılıp Elementor’da hiç kaydedilmemiş bir şablonda _elementor_edit_mode boş kalıyor; kurulum “başarılı” dönüyor ama şablon boş görünüyor. Önce bu meta’yı builder yapmak gerekiyor. Menüleri /wp/v2/menus ile kuruyorum; logo ve favicon /wp/v2/media ile yükleniyor, /wp/v2/settings ile atanıyor.

9–10: SEO, KVKK, tam kontrol ve yayın

Rank Math meta’sını /rankmath/v1/updateMeta ile yazıyorum; bu uç nokta, kurulum sihirbazı bitmeden görünmeyebiliyor. Form ad ya da telefon topluyorsa KVKK aydınlatma metni sayfası, footer bağlantısı ve form altı notu kurulum listesine giriyor; şablon metnin bir hukukçuya kontrol ettirilmesi şart. Sayfaların görevlerini kurumsal web sitesinin sayfa sayfa kurgusu yazısında anlattım. Yayından önce her sayfaya masaüstünde 1440, mobilde 360, 375 ve 390 piksel genişlikte bakıyorum. Listemden beş madde:

  • Yatay taşma yok, sayfa telefonda sağa kaymıyor.
  • Tek H1 var, başlık sırası atlamıyor.
  • Görsellerin anlamlı alt metni var.
  • Form gerçekten e-posta gönderiyor (SMTP ayarı yapılmış).
  • Yedekleme eklentisi açık, önbellek temizlenmiş ve canlıda bir kez daha bakılmış.

MCP 429 verdi: aynı araçları REST’ten çağırdım

Elementor’un resmi MCP’si 15 Eylül 2026’da beta olarak açıldı, bir hafta sonra 4.3.0 ile herkese sunuldu. Bağlantı, Elementor’un bağlantı rehberindeki adımlarla Elementor > Elementor MCP menüsünden kuruluyor: erişimi açıyorsun, istemci olarak Claude Code’u seçiyorsun, onay kutusunu işaretleyip Generate Prompt’a basıyor ve oluşan bağlantı istemini (prompt) kopyalıyorsun. Burada ilk şantiye kuralı deliniyor: uygulama şifresi bu istemin içinde geliyor, yani istemi yapıştırınca şifre sohbete giriyor. Oluşan ayar, Claude Code’u doğrudan sitenin kendi REST adresine bağlıyor; istekler de bu yüzden sitenin önündeki güvenlik katmanlarından geçiyor.

Benim denemelerimde MCP sunucusu “429 Rate limit” döndürdü, bağlantı kurulmadı. Notlarımda olası katman olarak Imunify, Wordfence ve LiteSpeed geçiyor; 429’u hangisinin verdiğini ayırmadım. Bildiğim şu: Elementor 4.3.2’nin MCP modülünde de, içinde taşıdığı WordPress MCP Adapter 0.6.1’de de istek sınırlayan bir kod yok. Yani yanıt büyük olasılıkla sitenin önündeki katmanlardan birinden geliyor.

Çıkış yolu Elementor’un kayıt kodunda: her yetenek show_in_rest: true ile kaydediliyor. Çalıştırma adresi /wp-json/wp-abilities/v1/abilities/elementor/build-composition/run biçiminde. WordPress el kitabındaki örnek yolda /abilities/ parçası yok, çekirdeğin çalıştırma denetleyicisi ise rotayı bu parçayla kaydediyor. En sağlamı, adresi /wp-json/wp-abilities/v1/abilities?per_page=100 listesindeki _links alanından almak.

GET, POST, DELETE: yöntemi yetenek belirliyor

Abilities REST’te HTTP yöntemini sen seçmiyorsun, yeteneğin işaretleri seçiyor. Salt okunur (readonly) yetenek GET, hem yıkıcı (destructive) hem tekrarlanabilir (idempotent) işaretli yetenek DELETE, geri kalan her şey POST istiyor. Hiç işareti olmayan bir yetenek, yalnızca okuma yapsa bile POST bekliyor. Yanlış yöntem 405 ve rest_ability_invalid_method hatası döndürüyor. Girdinin taşındığı yer de yönteme göre değişiyor: GET ve DELETE’te input[post_id]=123 gibi sorgu parametresi, POST’ta JSON gövdedeki input anahtarı.

Elementor 4.3.2 Core’da 27 yetenek sınıfı var; işaretleri tanımlı 20’sinin dağılımı 9 GET, 10 POST ve tek bir DELETE. O tek DELETE, sayfayı yayına alan elementor/publish-document. Yetenek yıkıcı ve tekrarlanabilir işaretli olduğu için POST ile çağrılınca çekirdek şu mesajla reddediyor:

Abilities that perform destructive actions require DELETE method.

Bütün çağrıları küçük bir Python betiğinden geçiriyorum. Betik –get ya da –delete bayrağıyla girdiyi input[…] sorgu parametrelerine çeviriyor, bayrak yoksa JSON gövdeyle POST atıyor; hata yanıtını gövdesiyle yazdırdığı için 405 gibi hatalarda mesajın tamamı görünüyor.

MCP’yi yine de ne zaman seçerim?

Güvenlik katmanı izin veriyorsa resmi MCP daha rahat, çünkü bağlantı tek ekrandan kuruluyor. Çakışma koruması ise MCP’ye özgü değil. Aynı sayfa editörde ve yapay zekâ aracında birlikte değişince Elementor “Force Save” ya da “Reload” seçeneğini sunuyor; 4.3.2 koduna göre bu denetim MCP katmanında değil, yeteneğin kendi çalıştırma adımında yapılıyor. Editörde kaydedilmemiş değişiklik varken sayfayı değiştiren bir REST çağrısı da 409 ve elementor_editor_unsaved_changes hatasıyla reddediliyor.

Yayındaki sayfada sıra kuralı

Yayındaki bir sayfada neyin ne zaman canlıya çıktığını publish-document yeteneğinin kendi açıklaması anlatıyor: manage-elements ya da build-composition ile yapılan düzenlemeler bir autosave’de bekletiliyor, publish-document da bu autosave’i canlı belgeye taşıyor. Kodda bu, autosave’in bir revizyon gibi ana belgeye geri yüklenip ardından silinmesi demek. Buradan beş adımlık bir sıra çıkıyor:

  1. Araç düzenlemeleri (build-composition, manage-elements): yayındaki sayfada autosave’e gidiyor.
  2. publish-document (DELETE): autosave canlıya alınıyor. Bekleyen düzenleme yoksa çağrı hiçbir şey yapmadan başarı dönüyor, yani fazladan çağırmak zararsız.
  3. Ham _elementor_data yazımları (/wp/v2/pages/ID üzerinden meta): V3 widget’lar ve toplu düzeltmeler için. Bu adım ikinciden önce yapılırsa yayın işlemi ham değişikliği eziyor.
  4. DELETE /wp-json/elementor/v1/cache: Elementor’un CSS dosyaları siliniyor, sayfa ilk açıldığında yeniden üretiliyor.
  5. Önizleme ve canlı kontrol: önbelleği ?v= ya da ?t= ile kır. ?m= WordPress’in tarih arşivi değişkeni olduğu için 404 veriyor.
Yayındaki Elementor sayfasında beş adımlık sıra: araç düzenlemesi, publish-document, ham yazım, önbellek ve kontrol
Ham _elementor_data yazımı publish-document’tan sonra gelir; önce yapılırsa yayın işlemi onu ezer.

Ham yazım revizyon oluşturmuyor, önizleme bağlantısı ise son revizyonu gösteriyor; bu yüzden ham yazımdan sonra küçük bir update-page-settings çağrısı yapıyorum. Şablonu replace_children ile yeniden kurmak öğe kimliklerini değiştiriyor; LiteSpeed’in CSS birleştirmesi açıksa site, eski kimliklere ait bayat CSS yüzünden bozuk görünüyor. Bu durumda Elementor önbelleğinin yanında LiteSpeed’de “Tümünü Temizle” de gerekiyor; geliştirme bitene kadar birleştirmeyi kapalı tutmak daha rahat. Elementor 4.3.2’nin (24 Eylül 2026) sürüm notları da yeniden üretilen sayfa stillerinin yüklenmemesi hatasını düzeltilenler arasında sayıyor.

Claude Code ile WordPress kurulumunda çıkan hatalar

Son sütun bilginin dayanağını gösteriyor: gözlem mi, kaynak kod mu.

BelirtiSebepÇözümDayanak
Global sınıf “ok” döndü ama listede yokEtkin kit ayarı silinmiş bir kaydı gösteriyor, yazma boş kit örneğine gidiyorVar olan kitin kimliğini elementor_active_kit ayarına POST etGözlem + Elementor kit kodu
Stiller görünmüyorElementor’un CSS önbelleği bayatDELETE /wp-json/elementor/v1/cache (yönetici yetkisi gerekir)Gözlem + Elementor kodu
publish-document 405 döndüYetenek yıkıcı ve tekrarlanabilir işaretli, çekirdek DELETE bekliyorDELETE ile, input[post_id] sorgu parametresiyle çağırGözlem + çekirdek kodu
Kurulum “başarılı” ama şablon boşPanelden açılıp hiç kaydedilmemiş şablonda _elementor_edit_mode boşMeta’yı builder yap, sonra yeniden kur ve yayınlaGözlem
Test adresi 404 veriyor?m= WordPress’in tarih arşivi sorgu değişkeni?v= ya da ?t= kullanGözlem + çekirdek kodu
Şablon yeniden kurulunca site bozuk görünüyorÖğeler yeni kimlik aldı, birleştirilmiş CSS bayat kaldıElementor önbelleği + LiteSpeed “Tümünü Temizle”Gözlem + Elementor dokümanı
MCP bağlantısı 429 veriyorSunucu, WAF ya da güvenlik eklentisi katmanı; hangisi olduğu ayrılmadıAynı yetenekleri Abilities REST ile çağırGözlem + Elementor kayıt kodu
Yedi satırlık hata tablosu: global sınıf, önbellek, 405, boş şablon, 404, bozuk CSS ve 429 için sebep ve çözüm
Satırlar kurulum notlarımdan; sebeplerin çoğu WordPress ve Elementor kaynak koduyla doğrulandı.

Bağlanamıyorsan önce bunlara bak

Aşağıdaki üç durumu kendi kurulumlarımda yaşamadım; kaynak koddan ve resmi dokümandan aktarıyorum:

  • Wordfence: uygulama şifrelerini kapatan seçenek, eklentinin ayar dosyasında varsayılan olarak açık (9.0.1, Eylül 2026); bu durumda WordPress uygulama şifresi özelliğini hiç sunmuyor.
  • CGI ile çalışan sunucular: Authorization başlığı yolda silinebiliyor. WordPress REST API SSS’si bunun için .htaccess dosyasına SetEnvIf Authorization “(.*)” HTTP_AUTHORIZATION=$1 satırını eklemeyi öneriyor.
  • Atomic Editor kapalıysa: Elementor 4.3.2’deki 27 yeteneğin 17’si 403 ve elementor_v4_required hatası döndürüyor. Ayar Elementor > Settings > Atomic Editor altında.

Yapay zekâya bırakmadığım işler

Claude Code çağrıları yapmayı, şemaları okumayı ve bölümleri kurmayı üstleniyor; şu kararlar bende kalıyor:

  • Canlı site ayarları: ana sayfa ataması site sahibinin onayıyla, kalıcı bağlantılar panelden.
  • Kit ayarları: yetenek açıklaması “birleştirilir” dese de kit kaydında ayarların üzerine yazıldığını gördüm; her değişiklikte tam seti gönderiyor, önce yedek alıyorum.
  • Global sınıf silme: olmayan bir kimliği silmeye çalışmak tüm sınıfları silebiliyor; önce listeleyip kimliği doğruluyorum.
  • KVKK metni: hukukçu kontrolünden geçmeden yayına çıkmıyor.
  • Son görsel kontrol: önbellek temizlendikten sonra, gerçek bir telefonda.

Sık sorulan sorular

Claude Code ücretsiz mi, ne kadar?

Ücretsiz değil: Eylül 2026 itibarıyla Claude Code, Claude’un bütün ücretli planlarına dahil. Pro plan aylık 20 dolar (yıllık ödemede ayda 17 dolar), Max plan 100 dolardan başlıyor; güncel fiyatlar Claude’un fiyat sayfasında. WordPress tarafında uygulama şifresi ve REST API için ek ücret yok.

MCP mi, API mi? MCP şart mı?

Şart değil. Elementor yetenekleri REST’e de açık kayıtlı; güvenlik katmanı MCP’yi kesse bile aynı araçlar uygulama şifresiyle Abilities REST’ten çağrılabiliyor. MCP’nin artısı, bağlantının tek ekrandan kurulması.

Claude Code ile WordPress’te neler yapılabilir?

Bu günlükteki kapsam: taslak sayfalar; header, footer ve 404 şablonları; global değişkenler ve sınıflar; menüler, medya yükleme, site ayarları ve Rank Math meta’sı. Hepsini REST üzerinden kurdum.

Elementor MCP ücretsiz mi, kimler bağlayabilir?

Elementor’un SSS’sine göre bağlanmak ücretsiz; temel bölümler ücretsiz üretiliyor, Pro öğeler Pro plan istiyor, yapay zekâ aracının ücreti ise ayrı. Bağlantıyı yalnızca site yöneticileri kurabiliyor ve bağlanan araç, giriş yapan kullanıcının yetkilerini birebir devralıyor.

Klasik (V3) Elementor sayfalarında çalışır mı?

Resmi Elementor MCP şimdilik yalnızca Atomic (V4) öğeleri destekliyor; mevcut sayfaları da ancak V4 ile kurulmuşlarsa düzenleyebiliyor. V3 desteği için “yakında” deniyor. Pro Slides gibi V3 widget’larını ben ham _elementor_data JSON’unu REST ile yazarak kuruyorum; V4 bir kutunun içine V3 widget koymak da çalışıyor.

Yöntemin özü dört adım: bağlantıyı uygulama şifresiyle kur, siteyi taslakta ve az istekle inşa et, yayını sıra kuralına göre yap, önbelleği temizleyip gerçek cihazda bak. Siteni bu disiplinle kurup yayına almak istersen WordPress ve Elementor ile web sitesi kurulumu sayfamdan kısa bir keşif görüşmesi planlayabilirsin.