Rumah > Tutorial CMS > WordTekan > Menguasai WordPress Cron untuk Acara Penjadualan

Menguasai WordPress Cron untuk Acara Penjadualan

Christopher Nolan
Lepaskan: 2025-02-19 11:51:14
asal
375 orang telah melayarinya

Menguasai WordPress Cron untuk Acara Penjadualan

Takeaways Key

    WordPress Cron adalah satu set fungsi yang membolehkan penjadualan tugas di tapak WordPress, berjalan apabila halaman dimuatkan. Ia berbeza dengan Cron Unix kerana ia tidak selalunya mencari tugas -tugas baru, sebaliknya, ia melaksanakan tugas -tugas di atas halaman.
  • Terdapat dua jenis peristiwa kron yang boleh dijadualkan: peristiwa tunggal, yang berjalan sekali dan tidak lagi sehingga dijadualkan semula, dan peristiwa berulang, yang berjalan pada jadual yang ditetapkan selama -lamanya. Kedua -dua jenis memerlukan penciptaan 'tindakan' adat yang mesti didaftarkan dengan Cron.
  • Peristiwa Uncheduling adalah penting, terutamanya apabila menggunakan plugin, kerana WordPress akan terus berusaha untuk menjalankan acara walaupun selepas plugin dinyahaktifkan atau dipadam. Untuk tidak menjatuhkan acara, seseorang perlu mengetahui nama cangkuk dan masa yang akan dijadualkan untuk Cron Run.
  • selang kron tersuai boleh ditetapkan dengan mengaitkan ke dalam penapis cron_schedules dan menambah selang adat. Ini boleh digunakan semasa menjadualkan acara menggunakan Cron.
WordPress Cron adalah salah satu ciri yang paling berguna yang anda ingin belajar dan memahami jika, seperti saya, anda menghabiskan banyak masa bekerja dengan WordPress.

Menguasai WordPress Cron untuk Acara Penjadualan dapat menjalankan fungsi tertentu pada jadual yang ketat adalah penting untuk mana -mana CMS dan WordPress mempunyai satu set fungsi yang membantu menjadikan proses ini sangat mudah dan hampir tidak mudah. Dalam artikel ini saya akan merangkumi ciri -ciri WordPress Cron berikut:

bagaimana cron wordpress berbeza daripada kron biasa anda
  • Penjadualan Acara Berulang
  • menjadualkan satu acara
  • Un-Scheduling Acara
  • Menentukan selang kron tersuai
  • Apa itu Cron?

Anda mungkin biasa dengan istilah 'cron' kerana ia berkaitan dengan penjadual berasaskan masa dalam sistem UNIX dan walaupun WordPress 'Cron berbeza; Idea utama di belakangnya adalah sama.

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.

WordPress 'Cron berjalan apabila halaman dimuatkan, sama ada halaman depan atau back-end. Dalam erti kata lain, apabila halaman dimuatkan di laman web anda, WordPress akan memeriksa sama ada terdapat sebarang tugas atau peristiwa yang perlu dijalankan dan melaksanakannya. Sekiranya anda berfikir ini tidak sesuai, anda betul -betul betul.

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.

Acara penjadualan dengan Cron

Terdapat dua perisa peristiwa cron yang boleh anda jadwalkan dengan beberapa baris kod:

  • Acara Tunggal - Jalankan hanya sekali dan tidak lagi sehingga ia dijadualkan semula.
  • Acara berulang-dijalankan mengikut jadual dan ditetapkan untuk berlaku semula selama-lamanya menggunakan selang waktu.

Penjadualan Acara Berulang

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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Untuk menjadualkan acara berulang kami menggunakan fungsi wp_schedule_event ($ timestamp, $ berulang, $ hook, $ args) yang mengambil 4 argumen:

  • $ Timestamp - (Integer) (Diperlukan) Kali pertama yang anda mahu acara berlaku. Ini mesti dalam format timestamp UNIX. WP Cron menggunakan masa UTC/GMT, bukan masa tempatan. Gunakan masa (), yang sentiasa GMT di WordPress. (Current_time ('timestamp') adalah masa tempatan di WordPress.)
  • $ berulang - (rentetan) (diperlukan) Berapa kerap peristiwa itu harus dimulakan semula. Nilai yang sah adalah 'jam', 'twicedaily' dan 'setiap hari'. Kami akan melihat bagaimana untuk membuat selang masa kita sendiri kemudian.
  • $ Hook - (String) (diperlukan) Nama cangkuk tindakan untuk dilaksanakan.
  • $ args - (array) (pilihan) Argumen untuk lulus ke fungsi cangkuk (s).

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>
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk
Salin selepas log masuk

Sekarang anda tahu bagaimana untuk menjadualkan peristiwa berulang, mari kita lihat membuat satu acara yang tidak akan berjalan lagi sehingga ia dijadualkan semula.

menjadualkan satu acara

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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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.

    $ Timestamp - (Integer) (Diperlukan) Masa yang anda mahu acara berlaku. Ini mesti dalam format timestamp UNIX.
  • $ Hook - (String) (diperlukan) Nama cangkuk tindakan untuk dilaksanakan.
  • $ args - (array) (pilihan) Argumen untuk lulus ke fungsi cangkuk.
di sini adalah cepat melihat bagaimana semua tindakan dan cangkuk ini disatukan.

<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>
Salin selepas log masuk
Salin selepas log masuk
Kami menggunakan beberapa pemalar masa yang WordPress ada untuk menjadikan kehidupan kita lebih mudah. Untuk maklumat lanjut mengenai pemalar ini, anda boleh pergi ke "Menggunakan Pemalar Masa", tetapi di sini adalah gambaran ringkas:

    minit_in_seconds = 60 (saat)
  • day_in_seconds = 24 * hour_in_seconds
  • minggu_in_seconds = 7 * day_in_seconds
  • year_in_seconds = 365 * day_in_seconds
  • Peristiwa Un-Scheduling

Sekarang bahawa anda tahu bagaimana untuk menjadualkan peristiwa berulang dan tunggal, ia juga akan berguna untuk mengetahui bagaimana untuk tidak menjadualkan peristiwa-peristiwa ini.

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>
Salin selepas log masuk
Salin selepas log masuk

Adalah mungkin untuk menetapkan selang kron tersuai yang boleh anda gunakan semasa menjadualkan acara menggunakan Cron. Untuk berbuat demikian, kita hanya perlu menyambungkan penapis cron_schedules dan tambah kita sendiri. Mari kita lihat menambah set selang tersuai untuk dijalankan setiap 10 minit.

<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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kesimpulan

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.

soalan yang sering ditanya mengenai menguasai WordPress Cron

Apakah perbezaan antara WP_SCHEDULE_EVENT dan WP_SCHEDULE_SINGLE_EVEN Fungsi WP_SCHEDULE_EVENT digunakan untuk menjadualkan peristiwa berulang, yang bermaksud ia akan berjalan pada selang masa yang anda tentukan, seperti setiap jam, setiap hari, atau dua kali sehari. Sebaliknya, WP_SCHEDULE_SINGLE_EVENT digunakan untuk menjadualkan satu acara satu kali yang akan dijalankan pada masa tertentu pada masa akan datang. Penting untuk memilih fungsi yang betul berdasarkan sama ada anda mahu acara anda dijalankan sekali atau berulang kali. pekerjaan tidak berfungsi. Satu isu biasa adalah masalah dengan tetapan masa pelayan. Jika masa pelayan tidak ditetapkan dengan betul, ia boleh menyebabkan masalah penjadualan. Satu lagi isu yang mungkin adalah konflik dengan plugin atau tema. Sesetengah plugin atau tema boleh mengganggu sistem WordPress Cron, menyebabkan ia tidak berfungsi. Ia juga mungkin ada ralat dalam kod anda. Pastikan untuk menguji kod anda dengan teliti dan periksa tetapan pelayan anda jika anda menghadapi masalah dengan pekerjaan WordPress Cron. Cara untuk menguji jika pekerjaan WordPress Cron anda berfungsi. Satu kaedah ialah menggunakan plugin seperti crontrol WP, yang membolehkan anda melihat dan mengawal apa yang berlaku dalam sistem WP-Cron. Kaedah lain ialah menggunakan alat debugging. Dengan membolehkan WP_DEBUG dalam fail WP-CONFIG.PHP anda, anda dapat melihat sebarang kesilapan yang berlaku apabila kerja kron anda berjalan. Anda juga boleh menggunakan fungsi error_log dalam php untuk log mana -mana kesilapan ke fail. kerja untuk dijalankan pada masa tertentu. Fungsi WP_SCHEDULE_EVENT membolehkan anda menentukan masa apabila peristiwa harus terlebih dahulu berlaku, dan selang di mana ia harus berulang. Fungsi WP_SCHEDULE_SINGLE_EVENT membolehkan anda menentukan masa yang tepat apabila peristiwa itu harus berlaku. Fungsi ini memerlukan dua parameter: timestamp acara dan cangkuk tindakan ke fungsi yang anda ingin tidak bersatu. Sebaik sahaja anda memanggil fungsi ini, peristiwa yang ditentukan tidak akan lagi berlaku.

Apakah cangkuk tindakan WordPress Cron? Apabila anda menjadualkan acara, anda mengaitkannya dengan cangkuk tindakan. Kemudian, anda boleh melampirkan fungsi ke cangkuk tindakan ini, dan mereka akan dilaksanakan apabila acara berjalan. Ini membolehkan anda melakukan tindakan tertentu pada masa -masa tertentu.

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan