Yüksek trafikli WooCommerce mağazaları için on bir bağımsız performans ve kararlılık düzeltmesi. Her düzeltme tek bir PHP dosyasıdır (mu-plugin); sadece ihtiyacınız olanları kurarsınız.
Kurulum
Eklentiler → Yeni ekle ile yüklemeyin. Bu paket normal bir eklenti değildir; o ekrandan yüklenen ZIP hiçbir düzeltmeyi çalıştırmaz. ZIP'i bilgisayarınızda açın ve ihtiyacınız olan
.phpdosyalarını doğrudanwp-content/mu-plugins/klasörünün en üst düzeyine kopyalayın (FTP/SFTP veya dosya yöneticisiyle; klasör yoksa oluşturun).
Sadece ihtiyacınız olan dosyaları kopyalayın. mu-plugin dosyaları alt klasörlerden yüklenmez, dosyalar doğrudan mu-plugins/ içinde durmalıdır. Etkinleştirme gerekmez, silmek devre dışı bırakır.
Her düzeltme apply_filters( 'eru_htf_<düzeltme>_enabled', true ) ile kapatılabilir:
add_filter( 'eru_htf_cloudflare_purge_frontend_enabled', '__return_false' );
Sabitler yalnızca defined() ile okunur; tanımlamazsanız güvenli varsayılanlar geçerlidir.
Düzeltmeler
| Dosya | Kısaca |
|---|---|
eru-htf-action-scheduler-sleep.php |
Action Scheduler tur arası beklemesini 5 sn → 1 sn yapar |
eru-htf-automatewoo-redis-flush.php |
AutomateWoo grup temizliğini SCAN'siz yapar |
eru-htf-cart-fragments-guard.php |
Sepeti olmayan ziyaretçide get_refreshed_fragments isteğini önler |
eru-htf-checkout-login-gate-events.php |
Giriş duvarında yanlış begin_checkout / InitiateCheckout olaylarını engeller |
eru-htf-category-rewrite-flush.php |
Kategori düzenlemesinde gereksiz tam cache flush'ını önler |
eru-htf-cloudflare-purge-frontend.php |
Ön yüzde senkron Cloudflare purge çağrılarını keser |
eru-htf-plugin-diet.php |
Yalnız admin işi yapan eklentileri ön yüzde yüklemez |
eru-htf-indexnow-nonblocking.php |
IndexNow ping'ini yanıt beklemeden gönderir |
eru-htf-order-status-webhook-topics.php |
Durum geçişi bazlı webhook konuları ekler |
eru-htf-pixelyoursite-fragment-fix.php |
PixelYourSite fragment'indeki tanımsız JS fonksiyonu hatasını giderir |
eru-htf-redis-flush-tracer.php |
Redis FLUSHDB çağıranını kütüğe yazar (davranış değiştirmez) |
1. Action Scheduler Sleep (eru-htf-action-scheduler-sleep.php)
- Sorun: Yüksek trafikte Action Scheduler'ın async runner'ı her kuyruk turundan sonra 5 saniye uyur; bu sürede bir PHP-FPM worker'ı boşuna meşgul kalır ve yavaş istek kayıtlarında görünür.
- Ne yapar:
action_scheduler_async_request_sleep_secondsdeğerini 1 saniyeye çeker. Süreyi sıfırlamaz: uyku, ardışık turların birbirini kovalamasını engelleyen bir frendir. Bu bir CPU düzeltmesi değildir, kazanç worker yuvasıdır. - Kapatma:
add_filter( 'eru_htf_action_scheduler_sleep_enabled', '__return_false' );Süre için:define( 'ERU_HTF_AS_SLEEP_SECONDS', 2 ); - Ne zaman KULLANMAYIN: Trafiğiniz düşükse kazanç ölçülemez; kuyruk işlemlerinin art arda hızla çalışması sunucunuzu yoruyorsa 5 sn'yi koruyun.
2. AutomateWoo Redis Flush (eru-htf-automatewoo-redis-flush.php)
- Sorun: AutomateWoo her sepet/müşteri değişiminde
flush_group('dashboard')çağırır; Redis Object Cache bunu tüm anahtar uzayında SCAN ile yapar. Redis tek iş parçacıklı olduğundan büyük veritabanlarında tüm site bir süre bloke olur. - Ne yapar:
automatewoo_cache_supports_flush_groupfiltresinefalsedöner; AutomateWoo tek birwp_cache_set()ile sürüm önekini tazeler (O(1)). Eski anahtarlar TTL ile düşer. - Kapatma:
add_filter( 'eru_htf_automatewoo_redis_flush_enabled', '__return_false' ); - Ne zaman KULLANMAYIN: AutomateWoo yoksa gerek yok (zararsız). Kalıcı object cache kullanmıyorsanız etkisi yoktur.
3. Cart Fragments Guard (eru-htf-cart-fragments-guard.php)
- Sorun:
cart-fragments.js, sessionStorage'da veri yoksa koşulsuz/?wc-ajax=get_refreshed_fragmentsisteği atar. Siteye ilk kez giren herkes, sepeti olmasa da, önbelleklenemeyen bir PHP isteği ödetir; kampanya anlarında worker'ları bitiren budur. - Ne yapar: Script'i sunucuda kuyruktan çıkarır, yerine çerez kontrol eden küçük bir yükleyici basar. Sepet/oturum çerezi yoksa script yüklenmez, AJAX hiç doğmaz. Karar tarayıcıda verilir, çünkü sayfa tam sayfa önbelleğinden gelir. Sepet, ödeme ve hesabım sayfalarına dokunulmaz.
- Kapatma:
add_filter( 'eru_htf_cart_fragments_guard_enabled', '__return_false' );veyawp-config.phpiçindedefine( 'ERU_HTF_CART_FRAGMENTS_GUARD', false ); - Ne zaman KULLANMAYIN: Başlıktaki sepet sayısı, çerez olmadan da sunucudan taze veri bekliyorsa (özel temalar/eklentiler
wc_fragment_refreshbekliyorsa) önce test edin.
4. Checkout Login Gate Events (eru-htf-checkout-login-gate-events.php)
- Sorun: Misafir ödeme kapalı ve ödemede kayıt kapalıysa, misafir ödeme sayfasında form yerine giriş/kayıt duvarını görür. Sayfa hâlâ checkout olduğundan GTM4WP
begin_checkout, PixelYourSiteInitiateCheckoutolayını basar; GA4, Google Ads ve Meta hunisinin ödeme adımı şişer. - Ne yapar: WooCommerce çekirdeğinin erken-çıkış koşulunu aynalayıp "giriş duvarı" durumunu tespit eder; bu durumda GTM4WP push'unu footer script'leri basılmadan önce söker ve PixelYourSite olayını
pys_validate_pixel_eventile reddeder (sunucu tarafı CAPI kopyası da gitmez). Giriş yapmış kullanıcı etkilenmez. - Kapatma:
add_filter( 'eru_htf_checkout_login_gate_events_enabled', '__return_false' ); - Ne zaman KULLANMAYIN: Misafir ödeme açıksa ya da GTM4WP/PixelYourSite kullanmıyorsanız gerek yoktur (kendiliğinden pasif kalır).
5. Category Rewrite Flush (eru-htf-category-rewrite-flush.php)
- Sorun: Rank Math ürün kategorisi kaydedilince rewrite kurallarını yeniler; bu sırada
wp_cache_flush()çağırır. Redis'te seçmeli flush tanımlı değilse bu hamFLUSHDB'dir: tüm object cache silinir, ardından soğuk cache fırtınası gelir. - Ne yapar: Kategorinin rewrite kuralı yalnızca slug'ına ve ebeveynine bağlıdır. Ad, açıklama, görsel gibi düzenlemelerde Rank Math'in flush'ını başlatmaz. Emin olamadığı her durumda (slug/ebeveyn değişti, önceki hal yakalanamadı) Rank Math'in kendi callback'ini aynen çağırır. Oluşturma/silme kancalarına karışmaz.
- Kapatma:
add_filter( 'eru_htf_category_rewrite_flush_enabled', '__return_false' ); - Ne zaman KULLANMAYIN: Rank Math WooCommerce modülünü kullanmıyorsanız etkisi yoktur. Kategori URL'lerini slug/ebeveyn dışında bir şeye bağlayan özel kod varsa kullanmayın.
6. Cloudflare Purge Frontend (eru-htf-cloudflare-purge-frontend.php)
- Sorun: Bir ürün cache'i temizlendiğinde (örn. ödemede stok düşünce) WP Rocket senkron olarak Cloudflare API'sine iki istek atar; müşteri ödeme ve teşekkür sayfasında bu ağ çağrılarını bekler.
- Ne yapar: Ön yüz ve REST isteklerinde
api.cloudflare.com'a giden HTTP isteğinipre_http_requestile keser (boğaz noktası), ayrıca WP Rocket'ın Cloudflare abonelerini ve Cloudflare eklentisinintransition_post_statuscallback'ini ön yüzde kancadan çıkarır. Admin (admin-ajax dahil), cron, WP-CLI veedit_postsyetkisine sahip giriş yapmış kullanıcıların REST kaydetmeleri (blok editör, WooCommerce yönetimi, eklenti REST kayıtları) muaftır, purge aynen çalışır; diğer REST isteklerinde ağ kesilir. Kancadan çıkarma katmanları (2 ve 3) kullanıcı henüz bilinmediğinden her REST URL'sini atlar. - Kapatma:
add_filter( 'eru_htf_cloudflare_purge_frontend_enabled', '__return_false' );Bu filtre bir mu-plugin içinde eklenmelidir (3. katmanplugins_loadedsırasında okur; tema veya normal eklenti çok geç yüklenir). - Ne zaman KULLANMAYIN: Ön yüzden (sipariş, entegrasyon) değişen sayfaların edge'de bayat kalmasına tahammülünüz yoksa ya da edge TTL'iniz uzunsa kullanmayın.
7. Plugin Diet (eru-htf-plugin-diet.php)
- Sorun: Yalnız admin/cron/CLI'da iş yapan eklentiler (içe/dışa aktarma, çeviri editörü, lisans yöneticisi, rapor, statik feed üretici) yine de her ön yüz isteğinde yüklenir.
- Ne yapar: Verdiğiniz eklentileri yalnızca ön yüz isteklerinde
active_pluginsokumasından çıkarır; dosyalara dokunmaz, kalıcı değildir. Bir yazma muhafızı, ön yüzde listeyi geri yazan kodun kısaltılmış listeyi veritabanına kalıcılaştırmasını engeller. Liste varsayılan olarak boştur; kendi kuralınızı verirsiniz:
add_filter( 'eru_htf_plugin_diet_rules', static function ( $rules ) {
return array_merge( $rules, array(
'example-importer/example-importer.php',
'example-translation-editor/example-translation-editor.php',
'example-license-manager/example-license-manager.php',
) );
} );
Cron, WP-CLI, admin, REST, xmlrpc.php, wp-login.php ve import/export tetikleme parametreleri her zaman muaftır. İsteğe bağlı: sık çağrılan izleme uçları (PixelYourSite, GTM4WP) için REST/admin-ajax muafiyeti kalkar; eru_htf_plugin_diet_tracking_endpoints ve eru_htf_plugin_diet_tracking_ajax_actions filtreleriyle değiştirilebilir.
- Kapatma:
add_filter( 'eru_htf_plugin_diet_enabled', '__return_false' ); - Ne zaman KULLANMAYIN: Ön yüzde kanca, kısa kod, REST rotası, sorgu/sıralama filtresi olan hiçbir eklentiyi listeye koymayın. Emin değilseniz önce ölçün: kazanç eklenti başına birkaç ila yüz ms'dir.
8. IndexNow Non-Blocking (eru-htf-indexnow-nonblocking.php)
- Sorun: Rank Math Instant Indexing,
api.indexnow.org'awp_remote_post()ile gider ve yanıtı bekler; dış servis yavaşlarsa PHP worker'ı o süre boyunca tutulur. - Ne yapar: Yalnız IndexNow adresine giden isteklere
blocking => falseve kısa bir timeout (varsayılan 2 sn) ekler. - Kapatma:
add_filter( 'eru_htf_indexnow_nonblocking_enabled', '__return_false' );Yalnız timeout kalsın isterseniz:add_filter( 'eru_htf_indexnow_nonblocking_blocking', '__return_false' );Timeout:define( 'ERU_HTF_INDEXNOW_TIMEOUT', 3 ); - Ne zaman KULLANMAYIN: Eklentinin "History" ekranını gönderim denetimi için kullanıyorsanız (yanıt görülemez); o durumda yalnız timeout'u bırakın.
9. Order Status Webhook Topics (eru-htf-order-status-webhook-topics.php)
- Sorun:
order.updatedkonusu siparişin her kaydında, meta güncellemeleri dahil, tetiklenir; tek sipariş için onlarca webhook gelebilir. - Ne yapar:
order.processing,order.completed,order.cancelled,order.refundedkonularını ekler. Bunlar WooCommerce durum kancalarına bağlıdır ve her durum geçişinde tam bir kez tetiklenir. Webhook ekranında ve REST API'de seçilebilir. - Kapatma:
add_filter( 'eru_htf_order_status_webhook_topics_enabled', '__return_false' ); - Ne zaman KULLANMAYIN: Alıcı sistem
order.updatedile ara durumları veya meta değişimini de bekliyorsa; mevcut webhook'larınız etkilenmez, yeni konuları kullanmak isteğe bağlıdır.
10. PixelYourSite Fragment Fix (eru-htf-pixelyoursite-fragment-fix.php)
- Sorun: PixelYourSite Pro'nun
#pys_ajax_eventssepet fragment'ipys_generate_token()çağırır; sitenin yüklediği minify edilmişpublic.min.jsiçinde bu fonksiyon global değildir. Paylaşılan olay kimliği boşsaReferenceErroroluşur ve script bloğunun geri kalanı (olay kimliği senkronu, pixel tetikleme) çalışmaz. - Ne yapar: Fragment HTML'indeki çağrıyı sunucuda üretilmiş bir token ile değiştirir. Eklenti dosyalarına dokunmaz; çağrı kalıbı bulunmazsa fragment'e hiç dokunmaz.
- Kapatma:
add_filter( 'eru_htf_pixelyoursite_fragment_fix_enabled', '__return_false' ); - Ne zaman KULLANMAYIN: PixelYourSite bu hatayı kendi sürümünde giderdiyse veya eklentiyi kullanmıyorsanız gerek yoktur (kendiliğinden pasif kalır).
11. Redis Flush Tracer (eru-htf-redis-flush-tracer.php)
- Sorun: Redis slowlog'unda
FLUSHDBgörürsünüz ama kimin tetiklediğini göremezsiniz. - Ne yapar: Redis Object Cache drop-in'inin flush bitince çalıştırdığı
redis_object_cache_flushkancasını dinler; bağlamı (admin/cron/ajax/rest/wp-cli/ön yüz), istek yolunu (sorgu dizesi hiç yazılmaz), kullanıcı kimliğini ve kısaltılmış backtrace'i bir kütüğe yazar. IP adresi yazılmaz. Hiçbir davranışı değiştirmez. Varsayılan kütük belge kökünün bir üstündedir (eru-htf-redis-flush.log);ERU_HTF_REDIS_FLUSH_TRACER_LOGile değiştirilir. Dosya 5 MB'ı (ERU_HTF_REDIS_FLUSH_TRACER_MAX) geçince yazma durur. Yazılamıyorsa sessizce çıkar. - Kapatma:
add_filter( 'eru_htf_redis_flush_tracer_enabled', '__return_false' ); - Ne zaman KULLANMAYIN: Teşhis aracıdır; kaynağı bulduktan sonra dosyayı ve kütüğü silin. Redis Object Cache kullanmıyorsanız gerek yok.
Gereksinimler
WordPress 6.5+, PHP 8.0+. WooCommerce gerekmez: WooCommerce'e veya üçüncü taraf bir eklentiye (Redis Object Cache, WP Rocket, Rank Math, AutomateWoo, PixelYourSite, GTM4WP…) bağlı dosya, o eklenti yoksa sessizce hiçbir şey yapmaz.
English summary
Eleven standalone mu-plugin files that fix common performance and stability problems on busy WooCommerce stores: a shorter Action Scheduler pause, O(1) AutomateWoo cache flushes, a cookie-aware cart-fragments loader, no phantom begin_checkout events behind a checkout login wall, conditional category rewrite flushes, no synchronous Cloudflare purges on the front end, a plugin diet for admin-only plugins (rules are empty by default and supplied via the eru_htf_plugin_diet_rules filter), non-blocking IndexNow pings, status-based order webhook topics, a PixelYourSite fragment fix, and a Redis flush tracer. Do not upload it via Plugins → Add New: unzip it and copy only the .php files you need into the top level of wp-content/mu-plugins/. Every fix can be disabled with the eru_htf_<fix>_enabled filter, and every file does nothing if the plugin it targets is absent.
Sürüm notları
Bkz. CHANGELOG.md.
Lisans
GPL-2.0-or-later. Geliştirici: Erusoft. Diğer Erusoft eklentileri: https://wordpress.erusoft.com