Blog

WordPress Eklenti Çatışmalarını Profesyonel Gibi Teşhis Etme ve Düzeltme

Eklenti çatışmalarını teşhis etmek ve düzeltmek için izolasyon, hata ayıklama araçları ve hook çözümü kullanarak sistematik bir yöntem öğrenin.

Özet

Eklenti çatışmaları, WordPress geliştiricileri ve site sahipleri için yaygın bir baş ağrısıdır. Körü körüne her şeyi devre dışı bırakmak yerine, sistematik bir hata ayıklama yaklaşımı izleyin. Bu makale, izolasyon kullanarak çatışan eklentileri belirleme, Query Monitor gibi hata ayıklama araçlarından yararlanma ve hook ile betik çatışmalarını inceleme konusunda size yol gösterir. Aynı filtreyi geçersiz kılan iki eklenti gibi gerçek örneklerle pratik adımları öğreneceksiniz. Ayrıca zorunlu kullanım eklentileriyle gelişmiş izolasyonu ve uygun ad alanı oluşturma ve koşullu yükleme gibi önleme en iyi uygulamalarını ele alıyoruz. Sonunda, eklenti çatışmalarını hızlı bir şekilde çözmek ve istikrarlı bir site sürdürmek için tekrarlanabilir bir sürece sahip olacaksınız.

Sorun: Eklentiler Çatıştığında

Eklenti çatışmaları bir WordPress sitesini durma noktasına getirebilir. Yeni bir eklenti kurarsınız ve aniden düzen bozulur, bir özellik çalışmayı durdurur veya beyaz bir ekran görürsünüz. Her şeyi devre dışı bırakıp yeniden başlama eğilimi vardır, ancak bu verimsizdir ve neden olduğunu size öğretmez. Yapılandırılmış bir yaklaşım zaman kazandırır ve sitenizin bağımlılıkları hakkında fikir verir.

Adım 1: Suçluyu İzole Edin

Kesin belirtileri belgeleyerek başlayın. Bir PHP ölümcül hatası mı, bir JavaScript konsol hatası mı yoksa belirli bir sayfada görsel bir sorun mu? Tetikleyen URL'yi ve eylemleri not edin. Ardından, tüm eklentileri devre dışı bırakın. Sorun ortadan kalkarsa, bunun eklentiyle ilgili olduğunu onaylamış olursunuz. Ardından, her etkinleştirmeden sonra kontrol ederek eklentileri birer birer etkinleştirin. Bu klasik ikili arama, suçluyu hızla daraltır.

Örnek: Bir önbellek eklentisini etkinleştirdikten sonra WooCommerce mağazanızdaki "Sepete Ekle" düğmesinin kaybolduğunu fark ettiniz. Tüm eklentileri devre dışı bırakmak düğmeyi geri getirir. Birer birer etkinleştirme, özel bir ödeme ağ geçidi eklentisiyle çatışmayı ortaya çıkarır. Artık hangi iki eklentinin savaşta olduğunu biliyorsunuz.

Uyarı: Bazı çatışmalar yalnızca belirli koşullar altında ortaya çıkar (ör. giriş yapmış kullanıcılar vs. misafirler, belirli yazı türleri). Testinizi iyice yapın.

Adım 2: Hata Ayıklama Araçlarını Kullanın

Şüpheli(ler)i belirledikten sonra, WordPress'in yerleşik hata ayıklama araçlarını kullanın. PHP bildirimlerini, uyarılarını ve ölümcül hatalarını yakalamak için wp-config.php dosyasında WP_DEBUG ve WP_DEBUG_LOG'u etkinleştirin. İpuçları için wp-content/debug.log dosyasını kontrol edin. Yönetici araç çubuğunda hook'ları, veritabanı sorgularını ve PHP hatalarını görüntüleyen ücretsiz bir eklenti olan Query Monitor'ü yükleyin. Aynı eylem veya filtreye hangi eklentilerin bağlı olduğunu görmek için özellikle "Hooks" sekmesine dikkat edin.

JavaScript sorunları için tarayıcınızın geliştirici konsolunu açın (F12) ve kırmızı hatalar veya uyarılar arayın. Yaygın sorunlar arasında jQuery çatışmaları nedeniyle "Uncaught TypeError" veya "$ is not a function" bulunur. Hangi betiklerin yüklendiğini ve hangi sırayla olduğunu görmek için Ağ sekmesini kullanın.

Örnek: Query Monitor, hem WooCommerce'in hem de bir kargo eklentisinin aynı öncelikle (10) woocommerce_checkout_process'e bağlandığını ortaya çıkarır. Kargo eklentisinin işlevi önce çalışır ve bazı verileri değiştirir, ancak WooCommerce'in işlevi bunun üzerine yazar ve eksik alanlara neden olur. WordPress Hook Mimarisi: Eylemler ve Filtreler Açıklandı öncelik ve kabul edilen argümanların yürütme sırasını nasıl belirlediğini anlamanıza yardımcı olur.

Uyarı: Her zaman önce bir hazırlık ortamında test edin. Yoğun trafiğe sahip canlı siteler, yük altında farklı davranışlar sergileyebilir.

Adım 3: Hook Çatışmalarını Çözün

Hook çatışmaları en yaygın olanlar arasındadır. İki eklenti aynı eylem veya filtreyi aynı öncelikle kullandığında, biri diğerinin çalışmasını iptal edebilir. Bunu düzeltmek için, bir eklentinin hook'unun önceliğini değiştirebilir veya çatışan hook'u tamamen kaldırabilirsiniz. Eklenti dosyalarını düzenlemek kötü bir uygulama olduğundan (güncellemeler değişikliklerin üzerine yazar), /wp-content/mu-plugins/ içinde zorunlu kullanım (MU) eklentisi oluşturun. Bir MU eklentisi otomatik olarak çalışır ve orijinal eklentiyi etkilemeden öncelikleri geçersiz kılabilir.

Örnek: İki eklenti de add_action('init', 'my_function', 10); tanımlar. MU eklentinizde şunu yazabilirsiniz:

add_action('init', 'my_function', 20); // Birinin önceliğini değiştir

Ya da hook'u tamamen kaldırmak isterseniz:

remove_action('init', 'my_function', 10);

Hook'ları yönetme hakkında daha derinlemesine bilgi için WordPress Hook'larında Ustalaşmak: Eylemler ve Filtreler İçin Pratik Bir Kılavuz bölümüne bakın.

Uyarı: Hook'ları kaldırmak, diğer kod buna bağlıysa işlevselliği bozabilir. İyice test edin.

Adım 4: JavaScript ve CSS Çatışmalarını Hata Ayıklayın

Birçok çatışma, kötü sıraya alınmış betikler veya stillerden kaynaklanır. Hataları incelemek için tarayıcının geliştirici araçlarını kullanın. Yaygın bir desen, bir eklentinin eski bir jQuery sürümünü yüklemesi veya uygun noConflict sarmalayıcıları olmadan $ kullanmasıdır. İki eklentinin aynı tanımlayıcıyla betik kaydettiğini kontrol edin — WordPress yalnızca birini yükler ve bu, diğerinin beklenen işlevselliğini bozabilir.

Örnek: Bir kaydırıcı eklentisi kendi jQuery sürümünü (1.12.4) wp_enqueue_script ile yükler, ancak başka bir eklenti jQuery 3.x bekler. Konsol Uncaught TypeError: $(...).slick is not a function gösterir. Çözüm, yinelenen tanımlayıcıyı kaydını silmek ve tek bir sürümün yüklendiğinden emin olmaktır.

function fix_jquery_version() {
    wp_deregister_script('jquery');
    wp_enqueue_script('jquery', '/path/to/jquery-3.6.0.min.js', array(), '3.6.0');
}
add_action('wp_enqueue_scripts', 'fix_jquery_version', 100);

Blok düzenleyici betikleri için, @wordpress/* paketleriyle çatışmalar ortaya çıkabilir. Çarpışma olmadan blok varlıklarını sıraya alma desenleri için WordPress Dinamik Bloklarında Ustalaşmak: Etkileşimli İçerik için PHP ve JavaScript'i Birleştirme bölümüne bakın.

Uyarı: jQuery sürümünü site genelinde değiştirmek, eski özelliklere dayanan diğer betikleri bozabilir.

Adım 5: MU Eklentileriyle Gelişmiş İzolasyon

Çatışma zor bulunduğunda, test için belirli eylemleri veya filtreleri devre dışı bırakan bir MU eklentisi oluşturun. Hangi filtrenin işlenmekte olduğunu hata ayıklamak için current_filter() kullanın. Bu, eklenti dosyalarına dokunmadan tam başarısızlık noktasını daraltmanızı sağlar.

Örnek: Bir eklentinin the_content filtresinin kısa kodları bozduğundan şüpheleniyorsunuz. Uygulanan tüm filtreleri günlüğe kaydeden bir MU eklentisi oluşturun:

add_filter('the_content', function($content) {
    error_log('Applied filters: ' . print_r($GLOBALS['wp_filter']['the_content'], true));
    return $content;
}, 1);

Ardından hangi filtrelerin çalıştığını görmek için hata ayıklama günlüğünü kontrol edin. Bu, eklentileri devre dışı bırakmadan çatışmaları belirlemeye yardımcı olur.

Uyarı: Bu çok fazla günlük verisi oluşturabilir; idareli kullanın ve hata ayıklamadan sonra kaldırın.

Adım 6: Çatışmaları Proaktif Olarak Önleyin

Çatışmalarla başa çıkmanın en iyi yolu onları önlemektir. Eklenti geliştirirken veya seçerken WordPress kodlama standartlarını izleyin: işlevler için benzersiz ön ekler kullanın (myplugin_function yerine the_function), küresel değişkenlerden kaçının ve varlıkları yalnızca ihtiyaç duyulan sayfalarda koşullu olarak sıraya koyun. Her zaman en son WordPress sürümünü kullanın ve eklentileri düzenli olarak güncelleyin.

Kapsamlı bir en iyi uygulama seti için, ad alanı oluşturma, güvenlik ve performans optimizasyonunu kapsayan Sağlam WordPress Eklentileri Oluşturma: En İyi Uygulamalar İçin Pratik Bir Kılavuz bölümünü okuyun.

Sonuç

Eklenti çatışmaları kaçınılmazdır, ancak sistematik bir yaklaşımla bunları hızlıca çözebilirsiniz. İzolasyonla başlayın, ardından tam hook veya betik çatışmasını belirlemek için hata ayıklama araçlarını kullanın. MU eklentileriyle hedefli düzeltmeler uygulayın ve gelecekteki sorunları azaltmak için önleyici tedbirler alın. Bu yöntem, sinir bozucu bir hata ayıklama oturumunu WordPress iç işleyişine dair anlayışınızı derinleştiren bir öğrenme deneyimine dönüştürür.