WordPress Söz Dizimi Hatası (Syntax Error) Nedir? Ayrıntılı Çözüm Rehberi

WordPress Söz Dizimi Hatası (Syntax Error) Nedir? Ayrıntılı Çözüm Rehberi

WordPress sitenizde bir tema veya eklenti dosyasını düzenledikten sonrabeyaz ekranla , “Sitenizde kritik bir hata oluştu” iletisiyle ya da doğrudan bir PHP hata mesajıyla karşılaşabilirsiniz. Hata iletisinde Parse error veya Syntax error ifadeleri bulunuyorsa PHP yorumlayıcısı ilgili dosyayı söz dizimi kurallarına uygun biçimde okuyamamıştır.

Söz dizimi hatası; eksik bir noktalı virgül, kapatılmayan parantez, yanlış eşleştirilen tırnak işaretleri veya hatalı konuma eklenen bir kod bloğu nedeniyle oluşabilir. Hata yalnızca yanlış yazılan satırı etkilemez. PHP, sorunlu dosyayı ayrıştıramadığı için dosyanın tamamını çalıştırmayı durdurur. Bu dosya etkin temaya ya da zorunlu olarak yüklenen bir eklentiye aitse sitenin ön yüzüne ve WordPress yönetim paneline erişim kesilebilir.

Bu rehberde WordPress söz dizimi hatasının PHP çalışma sürecindeki karşılığını, hata iletisindeki dosya ve satır bilgilerinin nasıl yorumlanacağını, sorunlu kodun nasıl bulunacağını ve yönetim paneline erişilemediğinde uygulanabilecek kurtarma yöntemlerini sizlere anlatacağız.

WordPress Söz Dizimi Hatası Nedir?

WordPress; çekirdek dosyaları, temaları ve eklentileri büyük ölçüde PHP ile çalışan bir içerik yönetim sistemidir. Bir sayfa isteği geldiğinde PHP yorumlayıcısı çalıştırılacak dosyaları önce ayrıştırır. Bu aşamada kodun dil bilgisi yapısı kontrol edilir. Bir ifade PHP söz dizimine uymuyorsa ayrıştırma tamamlanamaz ve kod çalıştırma aşamasına geçemez.

Bu nedenle söz dizimi hatası ile çalışma zamanı hatasını birbirinden ayırmanız gerekir. Söz dizimi hatasında PHP dosyayı çalıştırmadan önce durur. Tanımsız bir WordPress fonksiyonunun çağrılması, yanlış veri türü kullanılması veya veritabanı bağlantısının kurulamaması gibi sorunlar ise kod ayrıştırıldıktan sonra ortaya çıkar. Bu hataların iletileri ve çözüm yöntemleri farklıdır.

WordPress söz dizimi hataları çoğunlukla aşağıdaki dosyalarda görülür:

  • Etkin temanın functions.php dosyası,
  • Alt temaya ait PHP dosyaları,
  • wp-content/plugins dizinindeki eklenti dosyaları,
  • wp-content/mu-plugins dizinindeki zorunlu eklentiler,
  • wp-config.php yapılandırma dosyası,
  • Temaya eklenen özel şablon veya sınıf dosyaları.

WordPress Fonksiyonu Üzerinden Söz Dizimi Hatası Örneği

Aşağıdaki örnek, WordPress’in wp_enqueue_scripts kancasını kullanarak temaya bir stil dosyası eklemeyi amaçlar. Ancak wp_enqueue_style() çağrısının sonunda noktalı virgül bulunmadığı için kod ayrıştırılamaz:

<?php
function sadikozdogan_tema_stilleri() {
    wp_enqueue_style(
        'tema-stili',
        get_stylesheet_uri(),
        array(),
        wp_get_theme()->get( 'Version' )
    )
}

add_action( 'wp_enqueue_scripts', 'sadikozdogan_tema_stilleri' );

PHP yorumlayıcısı kapanan parantezden sonra ifadenin tamamlandığını belirten noktalı virgülü bekler. Bunun yerine fonksiyonu kapatan } karakteriyle karşılaştığı için aşağıdakine benzer bir hata üretir:

Parse error: syntax error, unexpected token "}",
expecting "," or ";" in
/public_html/wp-content/themes/tema-adi/functions.php on line 9

Kodun doğru biçimi şöyledir:

<?php
function sadikozdogan_tema_stilleri() {
    wp_enqueue_style(
        'tema-stili',
        get_stylesheet_uri(),
        array(),
        wp_get_theme()->get( 'Version' )
    );
}

add_action( 'wp_enqueue_scripts', 'sadikozdogan_tema_stilleri' );

Bu örnekte hata iletisi 9. satırdaki } karakterini işaret edebilir. Ancak asıl sorun bir önceki satırda eksik bırakılan noktalı virgüldür. PHP’nin bildirdiği satır, her zaman hatanın yazıldığı satır değildir; yorumlayıcının beklenmeyen yapıyla karşılaştığı satırdır. Bu nedenle belirtilen satırla birlikte önceki satırları da incelemelisiniz.

Yaygın PHP Ayrıştırma Hataları Ne Anlama Gelir?

WordPress ekranında veya hata kaydında farklı ayrıştırma iletileri görebilirsiniz. İletideki anahtar ifade, hangi söz dizimi öğesini kontrol etmeniz gerektiği hakkında önemli bilgi verir.

Unexpected Token

Unexpected token, PHP’nin ilgili konumda beklemediği bir karakter, anahtar kelime veya operatörle karşılaştığını belirtir. Hata iletisinde beklenmeyen karakter çoğu zaman ayrıca gösterilir:

Parse error: syntax error, unexpected token "}"

Bu iletide fazladan bir süslü parantez bulunabilir veya önceki ifade noktalı virgülle tamamlanmamış olabilir. Açılan ve kapatılan süslü parantezlerin sayısını, fonksiyon çağrılarının sonunu ve bir önceki satırı kontrol edin.

Unexpected End of File

Unexpected end of file, PHP yorumlayıcısının dosyanın sonuna ulaştığı hâlde açık kalan bir yapının kapanmasını beklediğini gösterir. Genellikle şu hatalardan biri bulunur:

  • Kapatılmamış { } süslü parantez çifti,
  • Kapatılmamış ( ) normal parantez çifti,
  • Açık kalan tek veya çift tırnak,
  • Tamamlanmamış bir dizi tanımı,
  • Kapatılmamış bir koşul, sınıf, yöntem veya fonksiyon bloğu.

Hata dosyanın son satırını gösterse bile sorunun daha üstteki bir kod bloğunda bulunabileceğini dikkate almalısınız.

Unexpected Identifier veya T_STRING

Yeni PHP sürümlerinde unexpected identifier, eski PHP sürümlerinde ise unexpected T_STRING iletisi görülebilir. PHP bir metni, fonksiyon adını veya sınıf adını beklenmeyen konumda algıladığında bu hata oluşur. Bir önceki satırda kapatılmamış tırnak veya eksik noktalı virgül bulunması yaygın nedenler arasında yer alır.

Unclosed Parantez veya Süslü Parantez

Yeni PHP sürümleri bazı hataları daha açıklayıcı biçimde gösterebilir:

Parse error: Unclosed '{' on line 25

Bu iletide belirtilen satırda başlayan kod bloğunun kapanıp kapanmadığını kontrol edin. İç içe fonksiyonlar, koşullar ve anonim fonksiyonlar kullanılıyorsa girintileme düzeni hatalı parantezi bulmanızı kolaylaştırır.

WordPress Söz Dizimi Hatası Neden Oluşur?

functions.php Dosyasına Hatalı Kod Eklenmesi

En yaygın nedenlerden biri, etkin temanın functions.php dosyasına internetten alınan veya elle yazılan bir kodun eksik eklenmesidir. Kod parçasının açılış PHP etiketiyle birlikte mevcut PHP bloğunun içine yapıştırılması, iç içe <?php etiketi oluşturabilir. Kodun yanlış bir fonksiyonun içine eklenmesi de parantez yapısını bozabilir.

Tema veya Eklenti Güncellemesinin Yarım Kalması

Güncelleme sırasında bağlantı kesilirse ya da dosya yazma işlemi tamamlanamazsa bir PHP dosyası eksik kalabilir. Dosyanın son kısmı sunucuya ulaşmadığında açık kalan fonksiyon veya sınıf bloğu unexpected end of file hatasına yol açabilir.

PHP Sürümü Uyumsuzluğu

Tema veya eklenti, sunucuda kullanılan PHP sürümünden daha yeni bir söz dizimine sahip olabilir. Tersine, güncel PHP sürümlerinde kaldırılmış eski bir dil yapısını kullanan kod da hata üretebilir. Böyle bir durumda yalnızca hatalı satırı silmek yerine bileşenin desteklediği PHP sürümünü kontrol edin.

Dosya Kodlaması ve Hatalı Karakterler

Kod düzenleyiciden kopyalanan akıllı tırnaklar, görünmeyen karakterler veya yanlış dosya kodlaması PHP kodunu bozabilir. PHP dosyalarını UTF-8 biçiminde ve düz metin destekleyen bir kod düzenleyiciyle kaydedin. Word işlemci yazılımlarından PHP kodu kopyalamayın.

Aynı Kodun Birden Fazla Yerde Kullanılması

Aynı fonksiyonun hem functions.php dosyasında hem de kod parçacığı eklentisinde tanımlanması genellikle söz dizimi hatası değil, Cannot redeclare function biçiminde ölümcül hata üretir. Bu ayrım önemlidir. Hata iletisinde Parse error bulunmuyorsa sorunu yalnızca söz dizimi kapsamında değerlendirmeyin.

WordPress Söz Dizimi Hatası Nasıl Çözülür?

Dosyalarda değişiklik yapmadan önce site dosyalarının ve veritabanının güncel yedeğini alın. FTP programında uzak dosyayı doğrudan düzenlemek yerine bilgisayarınıza indirin, yerel kopyayı düzenleyin ve doğruladıktan sonra sunucuya yükleyin.

1. Son Yapılan Değişikliği Belirleyin

Hatanın ne zaman başladığını belirleyerek inceleme alanını daraltın:

  • functions.php dosyasına kod eklediyseniz son eklenen kod bloğunu inceleyin.
  • Bir eklentiyi güncellediyseniz hata yolunda o eklentinin adını arayın.
  • Temayı güncellediyseniz etkin tema dosyalarını kontrol edin.
  • PHP sürümünü değiştirdiyseniz tema ve eklentilerin yeni sürümle uyumluluğunu doğrulayın.

Hata değişiklikten hemen sonra başladıysa ilgili dosyanın çalışan yedeğini geri yüklemek en hızlı kurtarma yöntemi olabilir.

2. Hata İletisindeki Dosya Yolunu Okuyun

Hata iletisinin son bölümü, sorunlu dosyanın sunucudaki tam yolunu ve satır numarasını gösterir:

/public_html/wp-content/plugins/ornek-eklenti/ornek-eklenti.php on line 84

Bu yol, hatanın WordPress çekirdeğinde mi, etkin temada mı yoksa bir eklentide mi bulunduğunu anlamanızı sağlar:

  • wp-content/themes/tema-adi/: Hata tema dosyasındadır.
  • wp-content/plugins/eklenti-adi/: Hata ilgili eklentidedir.
  • wp-content/mu-plugins/: Hata zorunlu eklenti dosyasındadır.
  • wp-config.php: Hata WordPress yapılandırma dosyasındadır.
  • wp-admin veya wp-includes: Bir çekirdek dosyası bozulmuş olabilir; dosyanın neden değiştiğini ayrıca araştırın.

Belirtilen satırı tek başına değerlendirmeyin. En az 10-15 satır yukarıdan başlayarak noktalı virgülleri, tırnakları ve parantez çiftlerini kontrol edin.

3. PHP Dosyasını Söz Dizimi Denetiminden Geçirin

Sunucuya SSH erişiminiz varsa PHP’nin yerleşik söz dizimi denetleyicisini kullanabilirsiniz: eğer SSh erişiminiz yok ise,PiliApp
gibi bir online PHP sözdizimi denetleyicisi kullanabilirsiniz.

php -l wp-content/themes/tema-adi/functions.php

Dosyada söz dizimi hatası yoksa aşağıdaki çıktı gösterilir:

No syntax errors detected in functions.php

Hata varsa PHP dosya yolunu, hata türünü ve satır numarasını bildirir. php -l komutu dosyayı çalıştırmaz; yalnızca söz dizimini denetler. Sunucuda birden fazla PHP sürümü bulunuyorsa web sitesinin kullandığı PHP sürümüne ait komutu çalıştırın. Aksi durumda komut satırındaki sonuç ile web sunucusunun sonucu farklı olabilir.

4. WordPress Hata Ayıklama Kaydını Etkinleştirin

Ekranda dosya yolu gösterilmiyorsa sitenin ana dizinindeki wp-config.php dosyasını açın. Aşağıdaki sabitler mevcutsa değerlerini düzenleyin; yoksa /* That's all, stop editing! Happy publishing. */ satırından önce ekleyin:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

Bu yapılandırma, WordPress tarafından yakalanan hata bilgilerinin wp-content/debug.log dosyasına yazılmasını sağlar ve teknik ayrıntıların ziyaretçilere gösterilmesini engeller. Ancak saf bir PHP söz dizimi hatası WordPress tamamen yüklenmeden oluşursa kayıt sunucunun PHP hata günlüğüne yazılabilir. debug.log dosyasında sonuç bulamazsanız barındırma panelindeki PHP error log kaydını kontrol edin.

Aynı sabiti birden fazla kez tanımlamayın. Sorun çözüldükten sonra WP_DEBUG ve WP_DEBUG_LOG değerlerini false yapın. Hata kayıtlarında dosya yolları ve başka teknik ayrıntılar bulunabileceği için günlük dosyasını herkese açık bırakmayın.

5. Hatalı Kodu Düzenleyin veya Çalışan Sürümü Geri Yükleyin

Hata iletisinde belirtilen dosyayı FTP, SFTP veya barındırma panelinin dosya yöneticisi üzerinden indirin. Düzenlemeden önce dosyanın ayrı bir yedeğini saklayın. Kodda şu noktaları kontrol edin:

  • Her PHP ifadesi gerekli yerde noktalı virgülle tamamlanmış mı?
  • Açılan normal, köşeli ve süslü parantezler kapatılmış mı?
  • Tek ve çift tırnaklar doğru eşleştirilmiş mi?
  • Virgülle ayrılması gereken fonksiyon parametrelerinden biri eksik mi?
  • PHP açılış etiketi mevcut PHP bloğunun içine yeniden eklenmiş mi?
  • Kod bir fonksiyonun, sınıfın veya koşul bloğunun yanlış konumuna yapıştırılmış mı?

Son eklenen kodun doğruluğundan emin değilseniz kodu geçici olarak kaldırın ve dosyayı tekrar yükleyin. Site açıldıktan sonra kodu yerel ortamda düzelterek yeniden test edin.

6. Eklentiyi FTP Üzerinden Devre Dışı Bırakın

Hata yolu belirli bir eklentiyi gösteriyorsa bütün eklentileri kapatmak yerine yalnızca o eklentinin klasör adını değiştirin:

  1. FTP veya dosya yöneticisiyle wp-content/plugins dizinine girin.
  2. Hata yolunda adı geçen eklenti klasörünü bulun.
  3. Klasör adının sonuna -pasif ifadesini ekleyin.
  4. Siteyi ve yönetim panelini yeniden kontrol edin.

Sorunlu eklenti hata iletisinden belirlenemiyorsa plugins klasörünün adını geçici olarak plugins-pasif yaparak bütün normal eklentileri devre dışı bırakabilirsiniz. Site açılırsa klasör adını yeniden plugins yapın ve eklentileri tek tek etkinleştirerek sorunu oluşturan bileşeni belirleyin.

Klasör adını değiştirmek eklenti dosyalarını veya ayarlarını silmez. Ancak önbellek, güvenlik, yönlendirme ve e-ticaret gibi işlevler geçici olarak durabilir. Canlı sitede bu işlemin etkisini dikkate alın.

7. Etkin Temayı Devre Dışı Bırakın

Hata etkin tema klasöründeki bir dosyayı gösteriyorsa şu adımları uygulayın:

  1. wp-content/themes dizinine girin.
  2. Etkin tema klasörünün adını geçici olarak değiştirin.
  3. Sunucuda kurulu güncel bir varsayılan WordPress teması bulunduğundan emin olun.
  4. Siteyi yeniden açarak WordPress’in kullanılabilir temaya geçip geçmediğini kontrol edin.

Sunucuda başka bir geçerli tema yoksa klasör adını değiştirmek tek başına siteyi çalıştırmaz. Böyle bir durumda temanın temiz kopyasını yükleyin veya çalışan dosyayı yedekten geri getirin.

Ana temanın functions.php dosyasına doğrudan eklenen özel kodlar tema güncellemesi sırasında kaybolabilir. Kalıcı tema özelleştirmeleri için alt tema kullanın; temadan bağımsız işlevleri ise siteye özel bir eklenti içinde tutun.

8. WordPress Çekirdek Dosyalarını Doğrulayın

Hata yolu wp-admin veya wp-includes dizinini gösteriyorsa çekirdek dosyası eksik, bozuk veya değiştirilmiş olabilir. Çekirdek dosyalarını elle düzenlemeyin. SSH ve WP-CLI erişiminiz varsa dosya bütünlüğünü şu komutla denetleyebilirsiniz:

wp core verify-checksums

Doğrulama başarısız olursa aynı WordPress sürümüne ait temiz çekirdek dosyalarını yeniden yükleyin. wp-content dizininin ve wp-config.php dosyasının üzerine yazmayın. Beklenmeyen çekirdek değişikliklerinde güvenlik ihlali olasılığını da değerlendirin.

Hata Düzeltilmesine Rağmen Site Açılmıyorsa

İlk söz dizimi hatasını giderdikten sonra farklı bir hata iletisi görebilirsiniz. PHP, ilk ayrıştırma hatasında çalışmayı durdurduğu için dosyadaki sonraki sorunlar başlangıçta görünmeyebilir. Yeni iletideki dosya ve satır bilgilerini yeniden inceleyin.

Önbellek sistemi veya PHP OPcache eski dosyayı tutuyorsa düzeltilmiş kod hemen devreye girmeyebilir. WordPress önbelleğini, sunucu önbelleğini ve varsa CDN önbelleğini temizleyin. Gerekli durumda barındırma panelinden PHP hizmetini veya OPcache’i yeniden başlatın.

Dosyayı doğru dizine yüklediğinizi ve sunucudaki dosyanın gerçekten değiştiğini doğrulayın. Aynı temanın birden fazla kopyası bulunuyorsa etkin klasör yerine farklı bir klasördeki dosyayı düzenlemiş olabilirsiniz.

WordPress Söz Dizimi Hatalarını Önleme Yöntemleri

  • Canlı sitede değişiklik yapmadan önce dosya ve veritabanı yedeği alın.
  • Kodu önce yerel veya hazırlık ortamında çalıştırın.
  • PHP söz dizimi denetimi ve parantez eşleştirme özelliği bulunan bir kod düzenleyici kullanın.
  • Değiştirdiğiniz PHP dosyalarında php -l denetimi çalıştırın.
  • Tema özelleştirmelerini alt temada tutun.
  • Temadan bağımsız WordPress işlevlerini siteye özel bir eklentiye taşıyın.
  • WordPress, PHP, tema ve eklenti sürümlerinin uyumluluğunu güncellemeden önce kontrol edin.
  • Kaynağı belirsiz veya güncel olmayan kodları canlı siteye eklemeyin.
  • Sürüm kontrol sistemi kullanarak dosya değişikliklerini takip edin.

WordPress hata mesajını okuma

Sonuç

WordPress söz dizimi hatası, PHP yorumlayıcısının bir dosyayı dil kurallarına uygun biçimde ayrıştıramadığını gösterir. Bu nedenle yalnızca ekranda görülen satıra odaklanmayın. Hata iletisindeki dosya yolunu belirleyin, belirtilen satırın üstündeki kodları inceleyin ve son yapılan değişikliği kontrol edin.

Sorun kendi eklediğiniz koddan kaynaklanıyorsa eksik noktalı virgül, tırnak, virgül ve parantezleri düzeltin. Hata bir tema veya eklenti güncellemesinden sonra oluştuysa ilgili bileşeni FTP üzerinden devre dışı bırakın ya da çalışan sürümünü geri yükleyin. Dosyayı sunucuya göndermeden önce php -l ile denetleyin; WordPress hata kaydı sonuç vermiyorsa sunucunun PHP hata günlüğünü inceleyin.

Değişiklikleri tamamladıktan sonra sitenin ön yüzünü, yönetim panelini ve hatayı oluşturan işlemi yeniden test edin. Geçici hata ayıklama ayarlarını kapatın, önbellekleri temizleyin ve güncel yedeği koruyun. Bu sıra, WordPress söz dizimi hatasını kaynağına göre çözmenizi ve aynı müdahale sırasında yeni bir hata oluşturma riskini azaltmanızı sağlar.

sadık özdoğan

2015 yılından beri sadece WordPress meraklısı.

Henüz oy verilmemiş. İlk oyu sen ver.

Bir yanıt yazın