Bir yazıyı ileri bir tarihe zamanladınız, o gün geldi geçti ama yazı yayımlanmadı. Panelde yazının yanında ‘kaçırılan zamanlama’ yazıyor. Aynı şekilde yedek alma, e-posta gönderimi gibi arka plan görevleri de çalışmıyor olabilir. Bunların hepsi WordPress’in zamanlanmış görev sistemiyle, yani wp-cron ile ilgilidir.
wp-cron neden tökezler
WordPress’in cron sistemi gerçek bir sunucu zamanlayıcısı gibi çalışmaz. Siteye biri girdiğinde tetiklenir. Yani wp-cron, ziyaretçi trafiğine bağlıdır. Bir sayfa açıldığında WordPress ‘zamanı gelmiş bir görev var mı’ diye bakar ve varsa çalıştırır. Siteniz düşük trafikliyse ve o an kimse girmemişse, zamanlanmış yazının saati geçse bile tetikleyecek kimse olmaz. Yazı bu yüzden kaçırılmış sayılır.
İkinci bir ihtimal de wp-cron’un bilinçli ya da yanlışlıkla kapatılmış olmasıdır. wp-config.php içinde define(‘DISABLE_WP_CRON’, true); satırı varsa ve yerine gerçek bir sunucu cron kurulmamışsa görevler hiç çalışmaz. Bazı hostingler performans için bunu kapatır ama alternatifini kurmayı atlayabilir.
Önce durumu görün
Ne olup bittiğini anlamak için WP Crontrol gibi bir eklenti işinizi görür. Kurup etkinleştirdiğinizde sitenizdeki tüm zamanlanmış görevleri, ne zaman çalışmaları gerektiğini ve çalışıp çalışmadığını tek listede görürsünüz. Saati çoktan geçmiş ama hâlâ bekleyen görevler varsa cron tetiklenmiyor demektir. Bu eklenti üzerinden bir görevi elle de çalıştırıp sistemin düzgün işleyip işlemediğini test edebilirsiniz.
Kalıcı çözüm, gerçek cron
En güvenilir yol, trafiğe bağlı sistemi kapatıp yerine sunucunun kendi zamanlayıcısını koymaktır. Böylece görevler trafiğe bakmadan, sabit aralıklarla çalışır.
- wp-config.php dosyasına define(‘DISABLE_WP_CRON’, true); satırını ekleyin. Bu, WordPress’in her sayfa açılışında cron’u tetiklemesini durdurur, böylece aynı anda iki kez çalışma ihtimali de ortadan kalkar.
- Hosting panelinizde cron görevleri bölümüne gidin. Çoğu panelde bu bölüm bulunur. Buradan belirli aralıklarla sitenizin wp-cron.php dosyasını çağıran bir görev tanımlayın. On beş dakikada bir çağırmak çoğu site için fazlasıyla yeterlidir.
- Panelde böyle bir seçenek yoksa sunucuya erişiminiz varsa crontab üzerinden aynı işi yapan bir satır ekleyebilirsiniz. İsteği gönderen basit bir araç wp-cron.php adresini düzenli olarak çağırır.
- Kurduktan sonra WP Crontrol listesine tekrar bakın, görevlerin artık zamanında çalıştığını görmelisiniz.
Sadece zamanlanmış yazılar sorunsa
Teknik ayarlarla uğraşmak istemiyor ve derdiniz yalnızca kaçırılan yazılarsa, kaçırılan zamanlamayı yakalayıp yazıyı gecikmeli de olsa yayımlayan küçük eklentiler var. Bunlar kök sorunu çözmez ama trafiğin tekrar geldiği ilk anda bekleyen yazıyı yayına alır. Düşük trafikli bir blog için pratik bir çözümdür.
Saat dilimi de işin içinde
Bazen cron düzgün çalışır ama yazılar yine de yanlış zamanda çıkar. Bunun sebebi çoğu zaman saat dilimi ayarıdır. WordPress genel ayarlarındaki saat dilimi sunucunun saatiyle uyuşmazsa zamanladığınız an ile gerçekte yayımlanan an kayar. Ayarlar bölümünden saat diliminizi şehir olarak seçin, sabit bir fark değeri yerine bölge seçmek yaz saati geçişlerinde de doğru çalışır. Yazıyı zamanladığınızda panelde görünen saatin kafanızdaki saatle aynı olduğundan emin olun, bu küçük kontrol ileride çok kafa karışıklığını önler.
İşe yaradı mı
Yeni bir yazıyı birkaç dakika sonrasına zamanlayıp bekleyin. Saati geldiğinde otomatik yayımlandıysa sistem artık düzgün çalışıyor demektir. WP Crontrol üzerinden de görevlerin yeşil, yani zamanında çalışır durumda olduğunu doğrulayın.
Sonradan rahat etmek
Gerçek cron kurduysanız bunu bir kez yapıp unutabilirsiniz, uzun süre sorun çıkarmaz. Çok sayıda ağır zamanlanmış göreviniz varsa bunları farklı saatlere yaymak sunucuyu rahatlatır. Ara sıra görev listesine göz atın, birikmiş ya da sürekli hata veren bir görev varsa erken fark edersiniz. Zamanlanmış içerikle çalışıyorsanız bu düzenleme sizi çok sayıda kaçırılmış yayından kurtarır.
Bu işleri kendiniz yapmak yerine profesyonel destek isterseniz, WordPress bakım ve teknik destek hizmetime göz atabilirsiniz.
Bu konunun tüm rehberi: WordPress Hataları ve Çözümleri