Apa Itu Missed Schedule di WordPress?
Status “Missed schedule” muncul ketika sebuah post yang Anda jadwalkan sudah melewati waktu terbitnya, tetapi WordPress belum menerbitkannya. Post tersebut tetap berstatus terjadwal yang terlewat — tidak terbit, tidak hilang — dan menunggu sampai ada sesuatu yang menjalankan tugas penerbitannya.
Daftar Isi
- Apa Itu Missed Schedule di WordPress?
- Jawaban Singkat
- Mengapa Post Bisa Gagal Terbit Tepat Waktu?
- Periksa Dulu: Apakah Ini Benar-Benar Missed Schedule?
- Persiapan dan Backup
- Langkah 1: Selamatkan Post yang Sudah Terlewat
- Langkah 2: Lihat Daftar Tugas Terjadwal
- Langkah 3: Ganti WP-Cron Berbasis Kunjungan dengan Cron Server
- Langkah 4: Perbaiki Loopback Bila Itu Penyebabnya
- Langkah 5: Uji Bahwa Jadwal Kini Berjalan
- Verifikasi Hasil
- Troubleshooting Lanjutan
- Alternatif Bila Anda Tidak Punya Akses SSH atau Crontab
- FAQ
- Kesimpulan
Penyebabnya terletak pada cara kerja WP-Cron, sistem penjadwal bawaan WordPress. WP-Cron bukan jam yang berjalan terus-menerus di latar belakang. Menurut Plugin Handbook resmi WordPress, WP-Cron tidak berjalan secara kontinu, dan justru karena itulah tugas yang harus tepat waktu bisa bermasalah. WP-Cron hanya memeriksa daftar tugas tertunda ketika ada kunjungan yang memuat WordPress, lalu menjalankan tugas yang sudah jatuh tempo lewat permintaan ke wp-cron.php. Konsekuensinya mudah ditebak: bila tidak ada kunjungan yang sampai ke PHP pada waktu yang dijadwalkan, tugas penerbitan pun tertunda — dan bila kunjungan itu tidak pernah datang, post tetap berstatus Missed schedule.
Jawaban Singkat
Untuk post yang sudah terlanjur Missed schedule, terbitkan secara manual dari daftar post (buka post, ubah statusnya, dan klik Terbitkan) atau jalankan tugas tertunda dengan wp cron event run --due-now bila Anda memakai WP-CLI. Agar tidak terulang, ganti WP-Cron berbasis kunjungan dengan cron server yang sesungguhnya: tambahkan define( 'DISABLE_WP_CRON', true ); di wp-config.php, lalu buat entri crontab yang memanggil wp-cron.php atau WP-CLI setiap 5 menit. Jangan hanya menonaktifkan WP-Cron tanpa pengganti — itu justru membuat semua tugas terjadwal berhenti total.
Mengapa Post Bisa Gagal Terbit Tepat Waktu?
Empat penyebab berikut mencakup hampir semua kasus Missed schedule. Mengenali pola Anda menghemat waktu karena setiap penyebab punya perbaikan yang berbeda:
| Penyebab | Tanda-tandanya | Perbaikan utama |
|---|---|---|
| Tidak ada kunjungan yang sampai ke PHP | Situs sepi, atau post dijadwalkan pada jam sepi; post terbit terlambat begitu ada kunjungan | Ganti ke cron server setiap 5 menit |
| Kunjungan tidak sampai ke WordPress karena cache | Situs ramai tetapi post tetap terlewat; cache halaman penuh atau CDN aktif | Ganti ke cron server; cache tidak lagi menjadi penentu |
| Loopback request gagal | Site Health menampilkan peringatan loopback; tugas terjadwal lain juga terlambat | Perbaiki penyebab loopback (auth, firewall, DNS, alamat situs) |
| WP-Cron dinonaktifkan tanpa pengganti | Semua tugas terjadwal berhenti, bukan hanya satu post | Buat cron server, atau hapus DISABLE_WP_CRON bila cron server belum ada |
| Zona waktu salah | Semua post "terlambat" dengan selisih yang sama persis | Perbaiki zona waktu di Pengaturan > Umum |
Periksa Dulu: Apakah Ini Benar-Benar Missed Schedule?
Sebelum memperbaiki scheduler, pastikan diagnosisnya benar. Buka daftar post di wp-admin dan perhatikan statusnya:
- “Terjadwal” dan waktunya masih di masa depan — belum ada masalah. Tunggu sampai waktu terbitnya.
- “Missed schedule” dan waktunya sudah lewat — inilah kasus artikel ini: tugas penerbitan belum dijalankan.
- “Draf” — kemungkinan Anda belum menyelesaikan aksi penjadwalan (misalnya menutup editor sebelum mengonfirmasi jadwal). Jadwalkan ulang untuk waktu di masa depan.
- “Terbit” tetapi tidak muncul di beranda — ini masalah visibilitas/cache, bukan scheduler. Buka permalink langsung dalam keadaan logout dan bersihkan cache.
Selanjutnya, periksa dua hal yang sering memberi petunjuk gratis: zona waktu dan Site Health.
Periksa zona waktu
Buka Pengaturan > Umum dan periksa zona waktu yang dipilih. Jika zona waktu WordPress tidak sesuai dengan zona waktu yang Anda maksud, setiap post akan tampak "terlambat" dengan selisih yang konsisten — misalnya selalu terlambat beberapa jam dengan jumlah yang sama. Ini masalah pengaturan, bukan scheduler, dan memperbaikinya tidak memerlukan perubahan cron apa pun.
Periksa Site Health
Buka Perkakas > Kesehatan Situs. Perhatikan dua jenis peringatan: peringatan tentang loopback request (WordPress tidak bisa menghubungi situsnya sendiri) dan peringatan tentang scheduled events yang terlambat. Catat pesan persisnya sebelum mengubah apa pun — pesan itu menunjukkan lapisan mana yang gagal, dan mengubah banyak pengaturan sekaligus hanya akan mengaburkan penyebabnya.
Loopback request adalah WordPress yang membuat permintaan HTTP ke alamat situsnya sendiri, seperti yang dilakukan pengunjung. Permintaan ini dipakai untuk menjalankan scheduled events. Bila loopback gagal, WP-Cron berbasis kunjungan pun ikut gagal, meskipun situs Anda ramai pengunjung.
Persiapan dan Backup
- Backup wp-config.php. Salin file sebelum mengedit:
cp wp-config.php wp-config.php.bak. Kesalahan ketik di file ini bisa membuat situs tidak bisa diakses. - Catat jadwal yang terlewat. Tulis judul post, waktu yang dijadwalkan, dan statusnya sekarang. Catatan ini membantu Anda memastikan perbaikan benar-benar bekerja pada post berikutnya, bukan hanya pada post yang sudah diperbaiki manual.
- Siapkan akses SSH bila memakai WP-CLI. Perintah WP-CLI mempercepat diagnosis, tetapi tidak wajib — semua perbaikan utama di artikel ini juga bisa dilakukan lewat wp-admin dan crontab panel hosting.
Langkah 1: Selamatkan Post yang Sudah Terlewat
Perbaiki dulu post yang sudah berstatus Missed schedule, sebelum mengurus pencegahan:
Cara A: Terbitkan manual dari wp-admin (tanpa SSH)
- Buka Post > Semua Post, cari post berstatus Missed schedule.
- Buka editor post, periksa isi dan tanggalnya.
- Ubah statusnya menjadi Terbit dan klik Terbitkan. Post akan langsung tayang dengan tanggal saat ini, atau tanggal yang Anda tetapkan.
- Jika Anda ingin post tayang dengan tanggal semula, ubah dulu tanggalnya di panel pengaturan post sebelum menerbitkan, sesuai kebutuhan editorial Anda.
Cara B: Jalankan tugas tertunda dengan WP-CLI (bila tersedia)
cd /var/www/html
wp cron event list --due-now
wp cron event run --due-now
Perintah pertama menampilkan tugas yang sudah jatuh tempo; perintah kedua menjalankannya, termasuk tugas publish_future_post yang menerbitkan post terjadwal. Sesuaikan jalur /var/www/html dengan root instalasi WordPress Anda. Setelah itu, periksa status post:
wp post list --post_status=future
wp post get ID_POST --field=post_status
Ganti ID_POST dengan ID post Anda. Status yang diharapkan setelah perbaikan adalah publish.
Langkah 2: Lihat Daftar Tugas Terjadwal
Diagnosis yang baik melihat seluruh antrean, bukan hanya satu post. Dua cara:
- Tanpa SSH: pasang plugin WP Crontrol (gratis, dari direktori plugin WordPress) lalu buka Perkakas > Cron Events. Anda akan melihat daftar event, jadwalnya, dan waktu berikutnya — termasuk event yang sudah terlambat.
- Dengan WP-CLI: jalankan
wp cron event listdanwp cron test. Perintahwp cron testmemeriksa apakah WP-Cron dapat berjalan (spawning) sebagaimana mestinya.
Yang perlu diperhatikan: apakah hanya publish_future_post yang terlambat, atau banyak event lain juga menumpuk? Bila banyak event menumpuk, masalahnya ada pada mekanisme cron secara keseluruhan — dan perbaikan pada Langkah 3 adalah jawabannya. Bila hanya satu post yang bermasalah sementara event lain berjalan, periksa post tersebut secara spesifik (misalnya, apakah post itu dijadwalkan lalu diedit berulang kali, atau apakah ada plugin yang mengintervensi proses penerbitan).
Langkah 3: Ganti WP-Cron Berbasis Kunjungan dengan Cron Server
Ini adalah perbaikan permanen yang direkomendasikan Plugin Handbook WordPress: serahkan pemicu jadwal kepada task scheduler sistem operasi, lalu nonaktifkan pemicu berbasis kunjungan agar tidak terjadi kerja ganda.
3a. Nonaktifkan WP-Cron berbasis kunjungan
Buka wp-config.php dengan editor teks, lalu tambahkan baris berikut di atas baris /* That's all, stop editing! Happy publishing. */:
define( 'DISABLE_WP_CRON', true );
Penting untuk memahami apa yang dilakukan baris ini: ia hanya menghentikan pemicu berbasis kunjungan, bukan menghapus tugas terjadwal. Tanpa cron server sebagai pengganti, tidak ada lagi yang menjalankan tugas — jadi langkah 3a dan 3b harus dilakukan berpasangan, dalam satu sesi perbaikan yang sama.
3b. Buat entri cron server setiap 5 menit
Buka crontab pengguna server dengan:
crontab -e
Tambahkan salah satu baris berikut. Interval 5 menit adalah titik awal yang wajar: post akan terbit paling lambat 5 menit setelah jadwalnya, dengan beban server yang dapat diabaikan. Interval sekali sehari tidak cukup — post yang dijadwalkan pagi akan menunggu sampai tengah malam.
Opsi A — WP-CLI (disarankan bila tersedia). Menjalankan tugas langsung di PHP tanpa permintaan HTTP, sehingga masalah loopback dan firewall tidak berpengaruh:
*/5 * * * * cd /var/www/html && /usr/local/bin/wp cron event run --due-now --quiet
Sesuaikan jalur instalasi WordPress dan jalur biner wp (periksa dengan which wp) dengan server Anda. Lingkungan cron memiliki PATH yang sangat singkat, jadi selalu tulis jalur lengkap, bukan hanya wp.
Opsi B — Permintaan HTTP ke wp-cron.php (bila WP-CLI tidak tersedia). Ini adalah metode yang ditunjukkan Plugin Handbook: gunakan alat seperti wget untuk memanggil skrip cron WordPress:
*/5 * * * * wget -q -O /dev/null https://example.com/wp-cron.php?doing_wp_cron
Ganti example.com dengan domain Anda. Plugin Handbook juga mencatat contoh dengan wget --delete-after agar output permintaan tidak tersimpan sebagai file. Pada panel hosting (misalnya cPanel), menu Cron Jobs menerima perintah yang sama dengan pilihan interval "Once Per Five Minutes" — Anda cukup memasukkan perintahnya tanpa awalan waktu.
Simpan crontab, lalu verifikasi entri tersimpan:
crontab -l
Langkah 4: Perbaiki Loopback Bila Itu Penyebabnya
Bila Anda memilih Opsi B (HTTP), atau bila Site Health melaporkan loopback gagal, perbaiki lapisan loopback:
- Password staging (HTTP Basic Auth). Jika situs dilindungi password di level server, permintaan loopback akan dijawab 401 dan gagal. Kecualikan
wp-cron.phpdari autentikasi, atau beralih ke Opsi A (WP-CLI) yang tidak melewati HTTP. - Firewall atau plugin keamanan yang memblokir wp-cron.php. Periksa aturan firewall/WAF dan plugin keamanan; izinkan server mengakses domainnya sendiri.
- DNS yang masih menunjuk ke IP lama. Setelah migrasi, server bisa saja masih mengarahkan domain ke mesin lama karena cache DNS. Periksa resolusi domain dari dalam server (
getent hosts example.com) dan pastikan mengarah ke IP yang benar. - Alamat situs tidak cocok. Pastikan alamat di Pengaturan > Umum (WordPress Address dan Site Address) sama persis dengan alamat HTTPS yang sebenarnya, dan sertifikat SSL valid.
- Cache yang menyembunyikan kunjungan. Cache halaman penuh dan CDN melayani pengunjung tanpa memuat WordPress — tetapi setelah beralih ke cron server, cache tidak lagi memengaruhi jadwal, karena pemicunya bukan lagi kunjungan.
Langkah 5: Uji Bahwa Jadwal Kini Berjalan
Jangan menganggap perbaikan selesai sebelum dibuktikan. Lakukan pengujian ujung ke ujung:
- Buat post percobaan (draf) dan jadwalkan 10 menit ke depan.
- Tutup situs — jangan membuka situs sama sekali selama menunggu. Tujuannya membuktikan cron server yang bekerja, bukan kunjungan Anda.
- Setelah 10–15 menit, periksa status post dari wp-admin atau dengan
wp post get ID --field=post_status. Statuspublishberarti rantai perbaikan bekerja. - Periksa Site Health lagi: peringatan scheduled events yang terlambat seharusnya hilang pada pemeriksaan berikutnya.
- Jalankan
wp cron event listdan pastikan tidak ada antrean tugas yang terus menumpuk.
Jika post percobaan tetap terlewat, kembali ke Langkah 2 dan periksa: apakah crontab benar-benar tersimpan (crontab -l), apakah jalur wp dan jalur instalasi benar, dan apakah ada pesan error dari cron (periksa email sistem atau log cron). Kesalahan paling umum adalah jalur yang salah dan DISABLE_WP_CRON yang aktif tanpa cron server yang berjalan.
Verifikasi Hasil
Perbaikan dinyatakan berhasil bila semua indikator berikut terpenuhi:
- Post yang terlewat sudah diterbitkan (manual atau lewat --due-now).
- Post percobaan yang dijadwalkan terbit sendiri tanpa kunjungan Anda.
crontab -lmenampilkan entri cron server yang aktif.- Site Health tidak lagi melaporkan scheduled events yang terlambat.
wp cron event listtidak menunjukkan antrean tugas yang menumpuk dari hari ke hari.
Troubleshooting Lanjutan
Semua tugas berhenti setelah menambahkan DISABLE_WP_CRON
Ini tanda cron server belum dibuat atau tidak berjalan. Buat entri crontab (Langkah 3b) atau, sebagai langkah darurat sementara, hapus baris DISABLE_WP_CRON agar pemicu berbasis kunjungan aktif kembali — lalu buat cron server dengan benar.
Post percobaan terbit, tetapi post lama tetap Missed schedule
Post yang sudah terlewat tidak selalu diterbitkan otomatis oleh cron baru; tugasnya mungkin sudah kedaluwarsa. Terbitkan post lama secara manual (Langkah 1) dan biarkan cron baru menangani jadwal berikutnya.
Site Health tetap melaporkan loopback gagal setelah beralih ke WP-CLI
Loopback tetap bisa gagal karena alasan lain (firewall, DNS, auth) meskipun jadwal sudah berjalan lewat WP-CLI, karena Site Health menguji loopback itu sendiri. Perbaiki penyebab loopback di Langkah 4 bila Anda ingin peringatan itu hilang — tetapi jadwal post Anda sudah aman selama cron WP-CLI berjalan.
Post terbit terlambat beberapa menit secara konsisten
Itu normal dengan interval 5 menit: post dijadwalkan 10:00 akan terbit pada eksekusi cron berikutnya, misalnya 10:05. Jika keterlambatan harus di bawah 5 menit, ubah interval menjadi setiap menit — tetapi pertimbangkan beban server dan apakah ketepatan semenit itu benar-benar dibutuhkan.
Tugas terjadwal plugin lain (backup, email) juga terlambat
Itu gejala yang sama: antrean cron tidak berjalan. Perbaikan cron server di artikel ini memperbaiki semua tugas terjadwal WordPress, bukan hanya penerbitan post — karena semuanya memakai antrean WP-Cron yang sama.
Alternatif Bila Anda Tidak Punya Akses SSH atau Crontab
- Panel hosting. Gunakan menu Cron Jobs di panel hosting (cPanel, Plesk, dan sejenisnya) dengan perintah wget/curl yang sama dan interval 5 menit. Ini setara dengan crontab VPS.
- Layanan cron eksternal. Layanan pemantau/pemicu cron eksternal dapat memanggil
wp-cron.phpAnda sesuai jadwal. Pastikan layanan yang dipilih tepercaya, karena URL tersebut akan dipanggil secara berkala dari luar. - Plugin Missed Schedule. Plugin khusus (misalnya plugin yang memeriksa post terlewat pada interval tertentu) dapat menjadi jaring pengaman: ia menerbitkan post yang terlewat saat ada kunjungan. Ini bukan pengganti cron server yang sesungguhnya, tetapi lebih baik daripada tidak ada apa-apa bila Anda tidak bisa mengubah cron server.
- Terbitkan manual untuk sementara. Bila semua opsi di atas belum tersedia, jadwalkan post jauh sebelum waktu yang Anda butuhkan dan periksa statusnya secara berkala — solusi sementara, bukan perbaikan.
FAQ
Apakah Missed schedule berarti post saya hilang?
Tidak. Post tetap ada dengan status terlewat. Anda bisa menerbitkannya secara manual atau menjalankan tugas tertunda, dan isinya tidak berubah.
Apakah saya harus menginstal plugin untuk memperbaiki ini?
Tidak wajib. Plugin seperti WP Crontrol membantu melihat antrean, tetapi perbaikan permanennya adalah cron server — dan itu tidak memerlukan plugin. Plugin hanya menjadi alat diagnosis dan jaring pengaman.
Apakah DISABLE_WP_CRON mematikan semua jadwal WordPress?
Tidak. Konstanta itu hanya menghentikan pemicu berbasis kunjungan. Tugas terjadwal tetap ada dan tetap bisa dijalankan oleh cron server. Yang berbahaya adalah mengaktifkannya tanpa membuat cron server sebagai pengganti.
Berapa interval cron server yang ideal?
Setiap 5 menit adalah titik awal yang wajar untuk kebanyakan blog: keterlambatan maksimum 5 menit dengan beban yang dapat diabaikan. Setiap menit hanya diperlukan bila ketepatan waktu sangat kritis.
Mengapa post saya terbit terlambat padahal situs saya ramai?
Karena kunjungan yang dilayani cache atau CDN tidak memuat WordPress, sehingga tidak memicu WP-Cron. Situs yang ramai di permukaan bisa berperilaku seperti situs sepi dari sudut pandang scheduler. Cron server menghilangkan ketergantungan ini.
Apakah masalah ini sama dengan post yang tidak muncul di beranda?
Belum tentu. Post berstatus Terbit tetapi tidak muncul di beranda adalah masalah visibilitas atau cache, bukan scheduler. Periksa permalink dalam keadaan logout dan bersihkan cache sebelum menyentuh pengaturan cron.
Kesimpulan
Missed schedule terjadi karena WP-Cron bukan jam yang berjalan sendiri: ia hanya bekerja saat ada kunjungan yang memuat WordPress, dan gagal saat kunjungan sepi, tertahan cache, atau loopback-nya bermasalah. Selamatkan dulu post yang terlewat — terbitkan manual atau jalankan wp cron event run --due-now — lalu perbaiki akarnya dengan cron server: nonaktifkan pemicu berbasis kunjungan lewat DISABLE_WP_CRON dan buat entri crontab setiap 5 menit yang memanggil WP-CLI atau wp-cron.php. Uji dengan post percobaan tanpa membuka situs, dan pastikan Site Health serta antrean cron bersih. Dengan begitu, jadwal terbit Anda tidak lagi bergantung pada ada-tidaknya pengunjung.