WP Zamanlı Otomatik Yazı Güncelleme Eklentisiz

WordPress yönetim paneline “Yazı Güncelleme” adlı özel bir menü ekleyerek, sitedeki tüm yazıların belirli aralıklarla güncellenmesini sağlayan bir sistem oluşturur. Kodun amacı, sitenizdeki yazıların “post_modified” yani son güncellenme tarihini otomatik olarak değiştirmektir.
Bu işlem özellikle SEO açısından bazı durumlarda içeriklerin güncel görünmesini sağlamak veya zaman damgasını yenilemek için kullanılır. Kodun çalışma mantığı, WordPress’in zamanlanmış görev (cron job) sistemini kullanarak yazıların belirli aralıklarla güncellenmesini sağlamaktır.
Kodun ilk kısmında add_action(‘admin_menu’, ‘yazi_guncelleme_menu_ekle’) fonksiyonu ile yönetim paneline yeni bir menü eklenir. Bu menü “Yazı Güncelleme” adını taşır ve yönetici yetkisine sahip kullanıcılar tarafından görülebilir. Menüye tıklandığında yazi_guncelleme_sayfasi() fonksiyonu çalışır ve burada bir buton aracılığıyla güncelleme işlemi başlatılabilir.
İkinci kısımda add_filter(‘cron_schedules’, ‘ozel_cron_zamanlari’) fonksiyonu sayesinde WordPress’in varsayılan zaman çizelgesine özel bir cron periyodu eklenir. Normalde WordPress’te dakikalık veya saatlik zaman dilimleri sınırlıdır.
Üçüncü bölümde yazi_guncelleme_cron_gorevi() adlı fonksiyon yer alır. Bu fonksiyon, arka planda çalışan esas işlemdir. İlk çalıştırıldığında, tüm yazıların kimlik numaralarını (ID) alır ve bunları geçici olarak bir ay transient sistemiyle saklar. Transient, WordPress’in geçici veri depolama yapısıdır ve bu sayede gereksiz veritabanı sorguları önlenir. Ardından her cron çalıştığında bir yazı seçilir, yazının “post_modified” alanı güncellenir ve işlem sırası bir sonraki yazıya geçer. İşlem tamamlandığında “Tüm yazılar güncellendi” mesajı gösterilir ve cron görevi durdurulur.
Bu kodun amacı, sitedeki içeriklerin düzenli aralıklarla otomatik olarak güncellenmesini sağlamak, yazıların “son güncellenme” tarihini yenileyerek sitenin aktif görünümesini temin etmektir.
add_filter('cron_schedules', 'ozel_cron_zamanlari');
function ozel_cron_zamanlari($schedules) {
$schedules['custom_60_sec'] = array(
'interval' => 60,
'display' => __('Her 60 saniyede')
);
return $schedules;
}
add_action('yazi_guncelleme_cron', 'yazi_guncelleme_cron_gorevi');
function yazi_guncelleme_cron_gorevi() {
$yazilar = get_transient('yazi_guncelleme_liste');
if (!$yazilar) {
$yazilar = get_posts(array(
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
'orderby' => 'modified',
'order' => 'ASC'
));
set_transient('yazi_guncelleme_liste', $yazilar, MONTH_IN_SECONDS);
set_transient('yazi_guncelleme_toplam', count($yazilar), MONTH_IN_SECONDS);
set_transient('yazi_guncelleme_index', 0, MONTH_IN_SECONDS);
set_transient('yazi_guncelleme_durum', 'Güncelleme başlatıldı...', MONTH_IN_SECONDS);
}
$index = get_transient('yazi_guncelleme_index');
$toplam = get_transient('yazi_guncelleme_toplam');
if ($index >= $toplam) {
set_transient('yazi_guncelleme_durum', 'Tüm yazılar güncellendi.', MONTH_IN_SECONDS);
$timestamp = wp_next_scheduled('yazi_guncelleme_cron');
if ($timestamp) {
wp_unschedule_event($timestamp, 'yazi_guncelleme_cron');
}
delete_transient('yazi_guncelleme_liste');
delete_transient('yazi_guncelleme_index');
delete_transient('yazi_guncelleme_toplam');
return;
}
$post_id = $yazilar[$index];
wp_update_post(array(
'ID' => $post_id,
'post_modified' => current_time('mysql'),
'post_modified_gmt' => current_time('mysql', 1)
));
$index++;
set_transient('yazi_guncelleme_index', $index, MONTH_IN_SECONDS);
set_transient('yazi_guncelleme_durum', "$index / $toplam yazı güncellendi.", MONTH_IN_SECONDS);
}
function yazi_guncelleme_sayfasi() {
?>
<div class="wrap">
<h1>Yazı Güncelleme</h1>
<form method="post">
<input type="submit" name="guncelle_cron" class="button button-primary" value="Güncellemeyi Başlat">
</form>
<div style="margin-top:20px;">
<strong>Durum:</strong>
<div id="durum"><?php echo get_transient('yazi_guncelleme_durum') ?: 'Henüz başlatılmadı.'; ?></div>
</div>
</div>
<?php
if (isset($_POST['guncelle_cron'])) {
delete_transient('yazi_guncelleme_liste');
delete_transient('yazi_guncelleme_index');
delete_transient('yazi_guncelleme_toplam');
set_transient('yazi_guncelleme_durum', 'Güncelleme başlatıldı...', MONTH_IN_SECONDS);
if (!wp_next_scheduled('yazi_guncelleme_cron')) {
wp_schedule_event(time(), 'custom_60_sec', 'yazi_guncelleme_cron');
}
echo '<div class="updated"><p>Güncelleme işlemi arka planda başlatıldı.</p></div>';
}
}
add_action('admin_menu', 'yazi_guncelleme_menu');
function yazi_guncelleme_menu() {
add_menu_page(
'Yazı Güncelleme',
'Yazı Güncelleme',
'manage_options',
'yazi-guncelleme',
'yazi_guncelleme_sayfasi'
);
}Gerekli Adımlar
Adım 1: functions.php dosyasını aç, WordPress yönetim paneline gir. Soldaki menüden Görünüm ve Tema Dosya Düzenleyici (Theme File Editor) sekmesine git. Sağ tarafta functions.php (Tema İşlevleri) dosyasını bul. Açmadan önce mutlaka yedek al. Hata olursa siten beyaz ekran verebilir.
Alternatif olarak, FTP veya cPanel Dosya Yöneticisi üzerinden de dosyayı düzenleyebilirsin:
/wp-content/themes/aktif-tema/functions.php
Adım 2: Kodu ekle Daha önce paylaştığın şu kodu dosyanın en altına yapıştır.
Açıklamalar
- Tüm yazıların ID’lerini alır.
- 60 saniyede yani bir dakikada bir güncelleme yapar.
- En eski güncelleme tarihten başlayarak güncelleme yapar.
- yazi_guncelleme_index: Hangi yazının sırada olduğunu takip eder.
- Her cron çalışmasında bir sonraki yazı güncellenir.
- Tüm yazılar bitince cron görevi durdurulur ve transient’ler temizlenir.
- Tüm geçici veriler (transient) 1 ay boyunca saklanır (MONTH_IN_SECONDS).
Yönetici “Güncellemeyi Başlat” butonuna bastığında, sistem eski geçici verileri siler, yeni güncelleme listesini oluşturur ve cron görevini başlatır. Bu işlem kullanıcıyı bekletmeden arka planda gerçekleşir.






