bagaimana cron wordpress berbeza daripada kron biasa anda
Beberapa contoh bagaimana WordPress menggunakan sistem kron secara dalamannya adalah untuk memeriksa kemas kini tema dan plugin dan juga memeriksa jika ada jawatan yang sedia untuk diterbitkan.
Bagaimana WordPress Cron berbeza?Jika anda sudah biasa dengan Cron Unix, anda mungkin berfikir bahawa Cron WordPress sentiasa mencari tugas baru dan menjalankannya ketika mereka datang. Ini jauh dari kebenaran dan saya akan menjelaskan mengapa tidak lama lagi.
Jika anda mempunyai laman web yang tidak mendapat terlalu banyak lalu lintas dan anda mempunyai tugas yang perlu dilaksanakan pada masa yang tepat, WordPress tidak akan mengetahui tugas itu sehingga seseorang melawat laman web anda. Walaupun ia berlaku sebagai bot enjin carian merangkak laman web anda.
Terdapat dua perisa peristiwa cron yang boleh anda jadwalkan dengan beberapa baris kod:
Penjadualan acara berulang memerlukan anda membuat 'tindakan' adat yang juga mesti didaftarkan dengan Cron. Sebaik sahaja kron berjalan, fungsi yang dilampirkan pada 'tindakan' adat yang anda buat sebelum ini dilaksanakan.
Mari kita lihat contoh berikut di mana kita akan memadam semakan semula setiap hari.
Pertama kita membuat 'tindakan' adat kita yang akan melampirkannya fungsi yang kita mahu jalankan apabila cangkuk dipanggil oleh Cron.
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed </span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' ); </span></span><span> </span><span><span>// This function will run once the 'delete_post_revisions' is called </span></span><span><span>function delete_all_post_revisions() { </span></span><span> </span><span> <span>$args = array( </span></span><span> <span>'post_type' => 'post', </span></span><span> <span>'posts_per_page' => -1, </span></span><span> <span>// We don't need anything else other than the Post IDs </span></span><span> <span>'fields' => 'ids', </span></span><span> <span>'cache_results' => false, </span></span><span> <span>'no_found_rows' => true </span></span><span> <span>); </span></span><span> </span><span> <span>$posts = new WP_Query( $args ); </span></span><span> </span><span> <span>// Cycle through each Post ID </span></span><span> <span>foreach( (array)$posts->posts as $post_id ) { </span></span><span> </span><span> <span>// Check for possible revisions </span></span><span> <span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) ); </span></span><span> </span><span> <span>// If we got some revisions back from wp_get_post_revisions </span></span><span> <span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) { </span></span><span> </span><span> <span>foreach( $revisions as $revision_id ) { </span></span><span> </span><span> <span>// Do a final check on the Revisions </span></span><span> <span>if( wp_is_post_revision( $revision_id ) ) { </span></span><span> <span>// Delete the actual post revision </span></span><span> <span>wp_delete_post_revision( $revision_id); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>
Untuk menjadualkan acara berulang kami menggunakan fungsi wp_schedule_event ($ timestamp, $ berulang, $ hook, $ args) yang mengambil 4 argumen:
Pertama, kami pastikan acara itu belum dijadualkan sebelum dan jika tidak, kami teruskan dan menjadualkannya.
<span><span><?php </span></span><span><span>// Make sure this event hasn't been scheduled </span></span><span><span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) { </span></span><span> <span>// Schedule the event </span></span><span> <span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' ); </span></span><span><span>}</span></span>
Perhatikan bahawa anda juga boleh menambah coretan kod ini ke tindakan. Jika anda seorang penulis plugin, anda boleh menubuhkan acara yang dijadualkan untuk menjalankan kali pertama halaman Pilihan Plugin dilawati. Untuk contoh yang lebih mudah, kami akan mengikatnya dengan tindakan WordPress 'init.
<span><span><?php </span></span><span><span>// Add function to register event to WordPress init </span></span><span><span>add_action( 'init', 'register_daily_revision_delete_event'); </span></span><span> </span><span><span>// Function which will register the event </span></span><span><span>function register_daily_revision_delete_event() { </span></span><span> <span>// Make sure this event hasn't been scheduled </span></span><span> <span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) { </span></span><span> <span>// Schedule the event </span></span><span> <span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' ); </span></span><span> <span>} </span></span><span><span>}</span></span>
Sekarang anda tahu bagaimana untuk menjadualkan peristiwa berulang, mari kita lihat membuat satu acara yang tidak akan berjalan lagi sehingga ia dijadualkan semula.
Sama seperti namanya, satu peristiwa adalah satu yang berjalan sekali dan kemudian ia berhenti. Acara tunggal ini masih boleh dijadualkan semula jika diperlukan.
Konsep di belakangnya adalah sama dengan peristiwa berulang. Mula -mula anda mendaftarkan cangkuk tersuai yang dipanggil oleh Cron apabila ia berjalan di pelayan. Sebaik sahaja Cron memanggil cangkuk, fungsinya dilaksanakan dan itu pada dasarnya bagaimana anda menyelesaikan sesuatu.
Sebagai contoh, kita akan menetapkan tarikh tamat tempoh untuk jawatan. Catatan akan tamat tempoh 30 hari selepas diterbitkan. Kami akan menyambung ke Publish_Post supaya kami dapat menjadualkan acara tunggal kami sebaik sahaja jawatan itu diterbitkan dan dikira bermula.
Menyediakan fungsi yang akan memadam jawatan selepas 30 hari.
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed </span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' ); </span></span><span> </span><span><span>// This function will run once the 'delete_post_revisions' is called </span></span><span><span>function delete_all_post_revisions() { </span></span><span> </span><span> <span>$args = array( </span></span><span> <span>'post_type' => 'post', </span></span><span> <span>'posts_per_page' => -1, </span></span><span> <span>// We don't need anything else other than the Post IDs </span></span><span> <span>'fields' => 'ids', </span></span><span> <span>'cache_results' => false, </span></span><span> <span>'no_found_rows' => true </span></span><span> <span>); </span></span><span> </span><span> <span>$posts = new WP_Query( $args ); </span></span><span> </span><span> <span>// Cycle through each Post ID </span></span><span> <span>foreach( (array)$posts->posts as $post_id ) { </span></span><span> </span><span> <span>// Check for possible revisions </span></span><span> <span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) ); </span></span><span> </span><span> <span>// If we got some revisions back from wp_get_post_revisions </span></span><span> <span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) { </span></span><span> </span><span> <span>foreach( $revisions as $revision_id ) { </span></span><span> </span><span> <span>// Do a final check on the Revisions </span></span><span> <span>if( wp_is_post_revision( $revision_id ) ) { </span></span><span> <span>// Delete the actual post revision </span></span><span> <span>wp_delete_post_revision( $revision_id); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>
Cukup mudah, bukan? Sekarang kita perlu menjadualkan acara apabila jawatan itu sebenarnya diterbitkan. Untuk mencapai tugas ini, kita perlu menggunakan fungsi WP_SCHEDULE_SINGLE_EVENT ($ timestamp, $ Hook, $ args) yang mengambil 3 argumen.
<span><span><?php </span></span><span><span>// Make sure this event hasn't been scheduled </span></span><span><span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) { </span></span><span> <span>// Schedule the event </span></span><span> <span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' ); </span></span><span><span>}</span></span>
Anda mungkin tertanya-tanya, mengapa anda mahu peristiwa-peristiwa yang tidak dijadualkan? Terdapat alasan yang baik, terutamanya jika anda memasukkan beberapa peristiwa jadual jenis dalam plugin anda.
Cron disimpan di meja WP_OPTIONS dan dengan hanya menyahaktifkan dan memadam plugin anda. WordPress masih akan cuba menjalankan acara anda walaupun kata plugin tidak lagi tersedia. Setelah mengatakannya, sila pastikan anda tidak menjatuhkan peristiwa dengan betul dalam plugin atau pelaksanaan tersuai anda.
Peristiwa Cron Un-Scheduling agak mudah, yang perlu anda ketahui adalah nama cangkuk dan kapan masa yang dijadualkan akan datang bahawa Cron tertentu sepatutnya dijalankan. Kami akan menggunakan WP_NEXT_SCHEDULED () untuk mencari apabila kejadian seterusnya akan berlaku dan hanya kemudian kami tidak boleh menjatuhkannya menggunakan wp_unschedule_event ().
Memandangkan contoh pertama kami, kami tidak akan menjatuhkan acara dengan cara berikut.
Menyesuaikan selang kron
<span><span><?php </span></span><span><span>// Add function to register event to WordPress init </span></span><span><span>add_action( 'init', 'register_daily_revision_delete_event'); </span></span><span> </span><span><span>// Function which will register the event </span></span><span><span>function register_daily_revision_delete_event() { </span></span><span> <span>// Make sure this event hasn't been scheduled </span></span><span> <span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) { </span></span><span> <span>// Schedule the event </span></span><span> <span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' ); </span></span><span> <span>} </span></span><span><span>}</span></span>
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed </span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' ); </span></span><span> </span><span><span>// This function will run once the 'delete_post_revisions' is called </span></span><span><span>function delete_all_post_revisions() { </span></span><span> </span><span> <span>$args = array( </span></span><span> <span>'post_type' => 'post', </span></span><span> <span>'posts_per_page' => -1, </span></span><span> <span>// We don't need anything else other than the Post IDs </span></span><span> <span>'fields' => 'ids', </span></span><span> <span>'cache_results' => false, </span></span><span> <span>'no_found_rows' => true </span></span><span> <span>); </span></span><span> </span><span> <span>$posts = new WP_Query( $args ); </span></span><span> </span><span> <span>// Cycle through each Post ID </span></span><span> <span>foreach( (array)$posts->posts as $post_id ) { </span></span><span> </span><span> <span>// Check for possible revisions </span></span><span> <span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) ); </span></span><span> </span><span> <span>// If we got some revisions back from wp_get_post_revisions </span></span><span> <span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) { </span></span><span> </span><span> <span>foreach( $revisions as $revision_id ) { </span></span><span> </span><span> <span>// Do a final check on the Revisions </span></span><span> <span>if( wp_is_post_revision( $revision_id ) ) { </span></span><span> <span>// Delete the actual post revision </span></span><span> <span>wp_delete_post_revision( $revision_id); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>
Menggunakan Cron WordPress 'tidak boleh menjadi lebih mudah dan ia adalah alat yang sangat bagus dan menarik yang pasti membantu anda menjadikan plugin anda lebih mantap. Mempelajari semua fungsi ini dan meletakkan mereka dalam amalan dengan aplikasi dunia sebenar adalah cara terbaik untuk menguasai Cron WordPress untuk acara penjadualan.
Bolehkah saya menggunakan WordPress Cron untuk menjadualkan jawatan? WordPress sendiri menggunakan pekerjaan Cron untuk mengendalikan jawatan yang dijadualkan. Apabila anda menetapkan jawatan yang akan diterbitkan pada tarikh yang akan datang, WordPress menjadualkan pekerjaan Cron untuk menerbitkan jawatan pada masa yang ditentukan. Boleh melihat semua pekerjaan WordPress Cron yang dijadualkan menggunakan plugin seperti WP Crontrol. Plugin ini menyediakan antara muka mesra pengguna di mana anda dapat melihat semua acara yang dijadualkan, selang masa mereka, dan masa larian seterusnya. Anda juga boleh menggunakannya untuk menambah, mengedit, atau memadam pekerjaan Cron. Anda boleh melakukan ini menggunakan plugin seperti WP Crontrol, yang membolehkan anda menjalankan sebarang acara Cron dengan segera. Ini berguna untuk tujuan ujian dan penyahpepijatan. Ia bukan pekerjaan kron sebenar kerana ia tidak berjalan di peringkat pelayan. Sebaliknya, ia berjalan apabila halaman dimuatkan di laman WordPress anda. Sebaliknya, pekerjaan kron sebenar, adalah tugas yang dijadualkan di peringkat pelayan. Ia berjalan pada masa tertentu, tanpa mengira sama ada sesiapa melawat laman web anda. Walaupun pekerjaan WordPress Cron lebih mudah untuk ditubuhkan dan digunakan, pekerjaan kron sebenar boleh menjadi lebih dipercayai dan tepat.
Atas ialah kandungan terperinci Menguasai WordPress Cron untuk Acara Penjadualan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!