WordPress'te Cron Job WP-Cron Nasıl Çalışır?

WordPressYayın: Güncellendi: 7 dk okumaHazırlayan: cronjob.com.tr Editörleri

WordPress zamanlanmış yayın, güncelleme kontrolü ve eklenti arka plan işleri için WP-Cron adlı yerleşik bir sözde-cron kullanır. Bu mekanizma gerçek bir sistem cron job değildir: görevler ziyaretçi isteğine bağlı tetiklenir. Düşük trafikte gecikir; yüksek trafikte her sayfa yükünde gereksiz kontrol üretir.

Bu rehber WP-Cron'un nasıl çalıştığını, DISABLE_WP_CRON ile sistem cronuna geçişi, WP-CLI ile doğrulamayı, sık hata mesajlarını ve SSH erişiminiz yoksa cronjob.com.tr ile HTTP tetiklemeyi adım adım anlatır. Resmi WordPress dokümantasyonundaki yaklaşım: sistem zamanlayıcısından wp-cron.php çağrılır, ardından sayfa yükü tetiklemesi kapatılır (developer.wordpress.org).

Hedef kitle: WooCommerce veya zamanlanmış yayın kullanan site sahipleri, eklenti geliştiricileri ve cPanel/VPS üzerinde WordPress yönetenler. PHP script cron'u için ayrıca PHP ile Cron Job rehberine bakın.

WP-Cron Nasıl Çalışır?

Her sayfa yükünde WordPress, süresi dolmuş olay olup olmadığını kontrol eder. Varsa arka planda wp-cron.php için HTTP isteği (spawn) gönderir; ziyaretçinin yanıtını bekletmemeye çalışır. Trafik yoksa kontrol de yoktur; bu yüzden gece 03:00'e planlanan görev sabah ilk ziyarette çalışabilir.

  1. Ziyaretçi bir sayfa ister.
  2. WordPress hazır cron olaylarını tarar.
  3. Süresi dolmuş olay varsa wp-cron.php tetiklenir.
  4. Olay kancaları (do_action) çalışır; sonraki çalışma zamanı yeniden yazılır.

Avantajı: sunucu crontab erişimi olmayan paylaşımlı hosting'de de çalışır. Dezavantajı: zamanlama kesin değildir; CDN/cache tam sayfa önbelleği ziyaretçi isteklerini azaltırsa tetikleme daha da seyrekleşir.

WordPress'in Kullandığı Cron Görevleri

Varsayılan tekrar aralıkları hourly, twicedaily, daily ve (sürüme göre) weekly şeklindedir. Daha sık aralık için cron_schedules filtresi gerekir. Sipariş ve hesap e-postaları genellikle tetikleyici olayla anında gönderilir; gönderimi kuyruğa alıp hız limitine göre dağıtmanız gerekiyorsa e-posta kuyruğu ve hız limiti yaklaşımını anlatan rehbere bakın.

Adım Adım: Gerçek Cron'a Geçiş

Güvenilir zamanlama için WP-Cron'un ziyaretçi tetiklemesini kapatıp sistem cronu veya dış HTTP zamanlayıcı kullanın. Zaman ifadelerini crontab sözdizimi ile doğrulayın.

  1. wp-config.php içinde require / require_once satırlarından önce define('DISABLE_WP_CRON', true); ekleyin.
  2. PHP CLI yolunu bulun: which php veya cPanel'de MultiPHP'nin CLI yolu (sıkça /usr/local/bin/php).
  3. Crontab'a 15 dakikalık tetikleme ekleyin (aşağıdaki örnekler).
  4. WP-CLI ile wp cron event list ve wp cron event run --due-now çalıştırıp kuyruğu doğrulayın.
  5. Bir zamanlanmış taslak yazı oluşturup tetikleme aralığından sonra yayınlandığını kontrol edin.

wp-config.php

define('DISABLE_WP_CRON', true);

CLI ile wp-cron.php

*/15 * * * * /usr/bin/php /var/www/html/wp-cron.php > /dev/null 2>&1

cPanel örneği (kullanıcı ve yolu kendinize göre değiştirin):

*/15 * * * * /usr/local/bin/php /home/USER/public_html/wp-cron.php > /dev/null 2>&1

HTTP ile tetikleme (curl / wget)

*/15 * * * * /usr/bin/curl -s "https://siteniz.com/wp-cron.php?doing_wp_cron" > /dev/null 2>&1
*/15 * * * * /usr/bin/wget -q -O /dev/null "https://siteniz.com/wp-cron.php?doing_wp_cron"
Not: DISABLE_WP_CRON yalnızca ziyaretçi tabanlı spawn'ı kapatır. wp-cron.php'ye doğrudan CLI veya HTTP çağrısı çalışmaya devam eder; ikisi birbirinin yerine geçer, biri diğerine bağlı değildir.

WP-CLI ile Kontrol

wp cron event list
wp cron event list --fields=hook,next_run,recurrence
wp cron event run --due-now
wp cron event run --all
wp cron event run wp_scheduled_auto_draft_delete
wp cron schedule list

Multisite'ta site bağlamı zorunludur: wp cron event run --due-now --url=https://alt.ornek.com.

Gerçek Senaryolar

Senaryo 1: Düşük trafikli blogda zamanlanmış yayın

Günde birkaç ziyaretçi alan blogda sabah 09:00'a planlanan yazı, ilk ziyaretçi gelene kadar taslakta kalır. Çözüm: DISABLE_WP_CRON + her 15 dakikada wp-cron.php tetiklemesi. Tetiklemeler başarılı olur ve görev kuyruğu zamanında işlenirse yayın gecikmesi yaklaşık tetikleme aralığı kadar olabilir.

Senaryo 2: WooCommerce stok ve abonelik işleri

Sipariş durumu, stok senkronu veya abonelik yenileme eklentileri WP-Cron kancalarına bağlıdır. Yoğun mağazada */5 * * * * tercih edilir; uzun süren işlerde CLI tetikleme HTTP timeout riskini azaltır. Çakışan ağır işleri geceye kaydırın. Mağazanın stok, pazarlama feed'i ve rapor görevlerinin bütünsel planlaması için e-ticaret siteleri için cron görev planı rehberine bakabilirsiniz.

Özel Cron Aralığı ve Olay

<?php
// Özel eklentinin ana PHP dosyası
add_filter('cron_schedules', function ($schedules) {
    $schedules['every_fifteen_minutes'] = [
        'interval' => 900,
        'display'  => 'Her 15 Dakikada Bir',
    ];
    return $schedules;
});

if (!wp_next_scheduled('ozel_temizlik_gorevi')) {
    wp_schedule_event(time(), 'daily', 'ozel_temizlik_gorevi');
}

add_action('ozel_temizlik_gorevi', function () {
    global $wpdb;
    $ids = $wpdb->get_col("
        SELECT ID FROM {$wpdb->posts}
        WHERE post_type = 'revision'
        AND post_modified < DATE_SUB(NOW(), INTERVAL 90 DAY)
    ");
    foreach ($ids as $id) {
        wp_delete_post_revision((int) $id);
    }
});

register_deactivation_hook(__FILE__, function () {
    wp_clear_scheduled_hook('ozel_temizlik_gorevi');
});

Kilitleme süresi için (saniye): define('WP_CRON_LOCK_TIMEOUT', 120); — aynı anda birden fazla cron spawn'ını sınırlar. Veritabanı yedeklerini bir eklentinin WP-Cron kancasına bağlamak yerine sunucu tarafında çözmek isterseniz veritabanı yedekleme cron'u kurulumunu anlatan rehberdeki mysqldump tabanlı örnekler daha güvenilir sonuç verir.

Sık Hatalar ve Çözümleri

Zamanlanmış yazı yayınlanmıyor

Neden: Trafik yok veya tam sayfa cache ziyaretçi isteklerini kesiyor. Çözüm: Gerçek cron'a geçin; WP Crontrol veya wp cron event list ile publish_future_post kancasını kontrol edin.

/bin/sh: 1: php: not found

Neden: Crontab PATH'inde PHP yok. Çözüm: Mutlak yol kullanın (/usr/bin/php veya /usr/local/bin/php). Ayrıntılı PHP cron sorunları için Cron Job Çalışmıyor rehberine bakın.

Error establishing a database connection (CLI wp-cron)

Neden: Yanlış çalışma dizini veya socket yolu; CLI ortamı web'den farklıdır. Çözüm: Önce cd /var/www/html && /usr/bin/php wp-cron.php deneyin; DB_HOST değerini doğrulayın.

Loopback / cURL error 28 veya site sağlığında "WP-Cron çalıştırılamıyor"

Neden: Sunucu kendi URL'sine HTTP isteği atamıyor (firewall, DNS, SSL). Çözüm: DISABLE_WP_CRON açıp CLI ile php wp-cron.php çalıştırın; HTTP yerine yerel CLI tercih edin.

Permission denied crontab veya dosya

Neden: Kullanıcının crontab hakkı yok veya script okunamıyor. Çözüm: Doğru kullanıcıyla crontab -e; dosya izinlerini web/CLI kullanıcısına göre ayarlayın.

cronjob.com.tr ile HTTP Alternatifi

SSH veya cPanel cron yoksa https://siteniz.com/wp-cron.php?doing_wp_cron adresini dışarıdan zamanlayabilirsiniz. Önce DISABLE_WP_CRON tanımlayın; aksi halde hem ziyaretçi hem dış tetikleme çakışabilir.

  1. cronjob.com.tr'de ücretsiz hesap açın (kredi kartı istenmez).
  2. Yeni iş: metot GET, URL https://siteniz.com/wp-cron.php?doing_wp_cron.
  3. Aralık: 5 veya 15 dakika (hazır aralık veya 5 alanlı cron ifadesi; saat dilimi varsayılan Europe/Istanbul).
  4. Başarı: HTTP 200–399. Loglarda durum kodu ve yanıt süresi 7 gün saklanır; ardışık hata eşiği aşılınca e-posta bildirimi gelir.

Hizmet ücretsizdir; en kısa aralık 60 saniyedir. Yerel ağ adreslerine istek gönderilmez; WordPress'iniz internetten erişilebilir HTTPS URL olmalıdır.

WP-Cron vs Gerçek Cron

ÖzellikWP-Cron (varsayılan)Sistem / HTTP cron
TetiklemeZiyaretçi bağımlıZamanında
Düşük trafikGecikmeliDüzenli
Yüksek trafikFazla kontrolSabit aralık
Sayfa yüküEtkilenebilirAyrı süreç

Sıkça Sorulan Sorular (SSS)

WP-Cron'u devre dışı bırakırsam ne olur?

Ziyaretçi trafiğiyle otomatik tetikleme durur. Zamanlanmış yayınlar, güncelleme kontrolleri ve eklenti görevleri çalışmaz; bu yüzden gerçek cron veya HTTP ile wp-cron.php'yi düzenli tetiklemeniz gerekir.

WP-Cron tetikleme aralığı ne olmalı?

Çoğu site için 15 dakika (*/15 * * * *) yeterlidir. Yoğun WooCommerce sitelerinde 5 dakika, düşük trafikli blogda 30 dakika uygun olabilir. Aralık, en sık çalışan görevin toleransına göre seçilir.

Multisite'ta WP-Cron nasıl çalışır?

Her site kendi cron kuyruğunu tutar. Ana domain wp-cron.php çağrısı genelde yeterli olmaz; alt siteler için URL bazlı tetikleme veya WP-CLI ile wp cron event run --due-now --url=site.ornek.com kullanın.

ALTERNATE_WP_CRON ne işe yarar?

ALTERNATE_WP_CRON true iken WordPress, spawn_cron HTTP isteği yerine yönlendirme tabanlı bir tetikleme dener. Bazı engellenmiş loopback ortamlarında yardımcı olur; kalıcı çözüm DISABLE_WP_CRON + sistem cronudur.

Sonuç

WP-Cron küçük sitelerde iş görür; güvenilir yayın ve mağaza işleri için DISABLE_WP_CRON ile 5–15 dakikalık gerçek tetikleme standart çözümdür. WP-CLI ile kuyruğu izleyin; SSH yoksa HTTP zamanlayıcı kullanın.

Hemen Ücretsiz Cron Job Oluşturun

cronjob.com.tr ile wp-cron.php URL'sini dakikada bir tetikleyin. Kayıtta kredi kartı gerekmez; log ve hata bildirimi ücretsizdir.

Ücretsiz Başla →

İlgili Rehberler