Saya memiliki fungsi untuk dijalankan setiap 5 menit. Saya telah merujuk berikut dari kodeks:
<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>
Saya ingin menjalankan fungsi ini hanya setiap 5 minuet kapan pun harus dimulai. Bagaimana saya bisa begini?
Juga dikatakan codex mengatakan cron akan dijalankan ketika pengunjung mengunjungi situs tersebut. Apakah ada cara untuk menjalankan cron setiap menit dan tidak menunggu kunjungan?
katakanlah fungsi berikut harus dijalankan setiap 5 menit lalu bagaimana saya bisa melakukannya menggunakan wp_schedule_event()
atau wp_cron
?
function run_evry_five_minutes(){
// codes go here
}
functions.php
Jawaban:
Anda dapat membuat waktu jadwal baru melalui cron_schedules:
Sekarang Anda dapat menjadwalkan fungsi Anda:
Untuk hanya menjadwalkannya sekali, bungkus dalam suatu fungsi dan periksa sebelum menjalankannya:
Perhatikan parameter $ args! Tidak menentukan parameter $ args di wp_next_scheduled, tetapi memiliki $ args untuk wp_schedule_event, akan menyebabkan jadwal acara yang hampir tak terbatas jumlahnya sama (bukan hanya satu).
Terakhir, buat fungsi aktual yang ingin Anda jalankan:
Saya pikir penting untuk menyebutkan bahwa wp-cron memeriksa jadwal dan menjalankan pekerjaan yang dijadwalkan setiap kali halaman dimuat.
Jadi, jika Anda memiliki situs web dengan lalu lintas rendah yang hanya memiliki 1 pengunjung per jam, wp-cron hanya akan berjalan ketika pengunjung menelusuri situs Anda (satu jam sekali). Jika Anda memiliki situs dengan lalu lintas tinggi dengan pengunjung yang meminta halaman setiap detik, wp-cron akan terpicu setiap detik menyebabkan beban tambahan pada server.
Solusinya adalah dengan menonaktifkan wp-cron dan memicunya melalui pekerjaan cron nyata dalam interval waktu Anda tercepat mengulangi pekerjaan wp-cron dijadwalkan (5 menit dalam kasus Anda).
Lucas Rolff menjelaskan masalahnya dan memberikan solusinya secara terperinci.
Sebagai alternatif, Anda dapat menggunakan layanan pihak ke-3 gratis seperti UptimeRobot untuk menanyakan situs Anda (dan memicu wp-cron) setiap 5 menit, jika Anda tidak ingin menonaktifkan wp-cron dan memicunya melalui pekerjaan cron nyata.
sumber
Jika situs Anda mendapatkan lalu lintas yang padat maka Anda dapat mencoba menggunakannya
set_transient()
untuk menjalankannya (sangat kurang-lebih) setiap 5 menit, misalnya:sumber
functions.php
saat melawat make ke halaman, update akan dilakukan untuk tabel dalam database saya ..function run_evry_five_minutes() { $homepage = file_get_contents('link to visit'); echo $homepage; }
. Tetapi tabel DB tidak diperbarui bahkan setelah 6 menit.get_transient()
/set_transient()
tanpa hal-hal cron lebih masuk akal, lebih sederhana, akan memperbarui jawaban ...Anda dapat memicunya dalam aktivasi plugin alih-alih pada setiap panggilan plugin:
sumber
Saya takut bahwa selain menunggu seseorang untuk mengunjungi situs Anda yang menjalankan suatu fungsi, satu-satunya pilihan lain adalah mengatur pekerjaan cron di server Anda menggunakan sesuatu seperti ini /programming/878600/how -Untuk membuat-cronjob-using-bash atau jika Anda memiliki antarmuka gaya cpanel di server Anda, kadang-kadang ada gui untuk mengatur ini.
sumber
functions.php
karena ketika fungsinya berada di dalamplugin
atau difunctions.php
kita tidak dapat meminta klien untuk mengatur cron dari cpanel sendiri ..Itu Cronjob Scheduler Plugin memungkinkan Anda untuk menjalankan tugas-tugas sering andal dan tepat waktu tanpa ada harus mengunjungi situs Anda, yang Anda butuhkan adalah minimal 1 tindakan dan jadwal Unix Crontab.
Ini sangat mudah digunakan, dan sangat fleksibel. Anda membuat fungsi Anda sendiri, dan menentukan tindakan di dalamnya. Kemudian Anda dapat memilih tindakan Anda dari menu plugin dan memecatnya kapan pun Anda mau.
sumber
Saya punya solusi yang mungkin menggunakan fungsi jadwal dan fungsi WP Ajax rekursif.
file_get_contents()
Jika penghitung sama atau lebih tinggi dari 60 itu akan mengatur ulang penghitung dan menunggu pekerjaan cron berikutnya.
Jika counter kelipatan 5 (jadi pada setiap 5 menit) itu akan menjalankan fungsi yang Anda inginkan
Dan, di samping kondisi, itu akan tidur selama 59 detik
sleep(59);
(dengan asumsi fungsi Anda itu cepat). Setelah tidur, itu akan memicu menggunakan dirinya sendirifile_get_contents()
lagi.Hal-hal penting yang perlu diperhatikan:
set_time_limit(90);
untuk mencegah server untuk merusak fungsi Anda sebelum tidurIni solusi, bukan yang bagus, dan mungkin diblokir oleh server. Menggunakan cron eksternal Anda dapat mengatur fungsi sederhana dan server akan menggunakan sumber daya di atasnya setiap 5 menit sekali. Menggunakan solusi ini, server akan menggunakan sumber daya di dalamnya sepanjang waktu.
sumber
Jawaban @ johano dengan benar menjelaskan cara mengatur interval khusus untuk pekerjaan WP cron. Pertanyaan kedua tidak dijawab, yaitu bagaimana menjalankan cron setiap menit:
Dalam file tersebut
wp-config.php
, tambahkan kode berikut:Tambahkan pekerjaan cron (
crontab -e
di unix / linux):Bagian pertama (langkah 1) akan menonaktifkan pekerjaan cron internal WordPress. Bagian kedua (langkah 2) akan menjalankan pekerjaan cron WordPress secara manual setiap menit.
Dengan jawaban @ Johano (cara menjalankan tugas setiap 5 menit) dan milik saya (cara menjalankan cron secara manual), Anda harus dapat mencapai tujuan Anda.
sumber