Comment puis-je modifier la fréquence d'un événement programmé?
3 réponses
- votes
-
- 2011-05-23
Ok,je pourrais résoudre leproblèmeen utilisant
wp_clear_scheduled_hook()
J'ai commentéma déclaration deplanificationet ajouté
wp_clear_scheduled_hook('send_email_alerts_hook')
à lafin.Ensuite,désactivez - réactivezmonplugin,qui a supprimémon hookprogrammé.Ensuite,j'ai suppriméwp_clear_scheduled_hook()
et décommentémon code,maintenant le calendrier a été défini correctement.J'aitrouvé le conseil ici .
Ok, I could solve the problem by using
wp_clear_scheduled_hook()
I commented out my schedule declaration and added
wp_clear_scheduled_hook('send_email_alerts_hook')
at the end. Then deactivate - reactivate my plugin, which removed my scheduled hook. Then removedwp_clear_scheduled_hook()
and uncommented my code, now the schedule was set properly.Found the tip here.
-
- 2011-05-23
Ilme semble que vousn'ajoutez cet événement que lorsqu'iln'y apasencore d'événement 'send_email_alerts_hook'prévu. Essayez quelque chose comme çaet faites-moi savoir si cela afonctionné.
function shedule_email_alerts() { if ( !wp_next_scheduled( 'send_email_alerts_hook' ) ) { wp_schedule_event(time(), 'daily', 'send_email_alerts_hook'); } else { wp_reschedule_event(time(), 'daily', 'send_email_alerts_hook'); } }
Lefaitest que vous "réécrivez" cet événementtout letemps,il serait doncbon de désactiver cettefonction lors de sapremièreexécution.
Lameilleure solution serait de vérifier comment cestravaux sont rassembléset de vérifier si cet événementest déjà ajouté. Sitelest le cas,vérifiez si la récurrenceest différente - si c'est le cas,reprogrammez. Vouspouveztrouver cettefonction dans la ligne wp-includes/cron.php ~ 63
function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) { $crons = _get_cron_array(); $schedules = wp_get_schedules(); if ( !isset( $schedules[$recurrence] ) ) return false; $event = (object) array( 'hook' => $hook, 'timestamp' => $timestamp, 'schedule' => $recurrence, 'args' => $args, 'interval' => $schedules[$recurrence]['interval'] ); $event = apply_filters('schedule_event', $event); // A plugin disallowed this event if ( ! $event ) return false; $key = md5(serialize($event->args)); $crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args, 'interval' => $event->interval ); uksort( $crons, "strnatcasecmp" ); _set_cron_array( $crons ); }
Bonne chance!
It looks for me that you are adding this event only when there is no such event 'send_email_alerts_hook' scheduled yet. Try something like this and let me know if it workded.
function shedule_email_alerts() { if ( !wp_next_scheduled( 'send_email_alerts_hook' ) ) { wp_schedule_event(time(), 'daily', 'send_email_alerts_hook'); } else { wp_reschedule_event(time(), 'daily', 'send_email_alerts_hook'); } }
The thing is that you will "rewrite" this event all the time, so it would be good to deactivate this function when it run first time.
The best solution would be to check how those jobs are gathered and check if this event is already added. If so then check if recurrence is different - if so reschedule. You can find this function in wp-includes/cron.php line ~63
function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) { $crons = _get_cron_array(); $schedules = wp_get_schedules(); if ( !isset( $schedules[$recurrence] ) ) return false; $event = (object) array( 'hook' => $hook, 'timestamp' => $timestamp, 'schedule' => $recurrence, 'args' => $args, 'interval' => $schedules[$recurrence]['interval'] ); $event = apply_filters('schedule_event', $event); // A plugin disallowed this event if ( ! $event ) return false; $key = md5(serialize($event->args)); $crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args, 'interval' => $event->interval ); uksort( $crons, "strnatcasecmp" ); _set_cron_array( $crons ); }
Good luck!
-
- 2011-05-23
Essayez de déboguer avec ceplugin. J'ai écrit: Lien vers Github/Gist .C'est unpeu hack-ish,mais ça sert sonbut.
Notez que le hook
wp_footer()
doit êtreprésent dans votrethème.Sinon,vous devrez l'accrocher ailleurs.Try debuggin with this Plugin i wrote: Link to Github/Gist. It's a little hack-ish, but it serves its purpose.
Note that the
wp_footer()
hook must be present in your theme. Else you'll have to hook it somewhere else.-
Connaissiez-vous le [WP-Crontrol] (http://wordpress.org/extend/plugins/wp-crontrol/)et [Cron View] (http://wordpress.org/extend/plugins/cron-view/)plugins?Did you know about the [WP-Crontrol](http://wordpress.org/extend/plugins/wp-crontrol/) and [Cron View](http://wordpress.org/extend/plugins/cron-view/) plugins?
- 0
- 2011-07-05
- scribu
-
Non,je ne savaispas.No, I didn't know.
- 0
- 2011-07-05
- kaiser
J'ai déclaré un événementplanifié dans unplugin comme celui-ci:
Ensuite,j'ai voulu changer lafréquenceen "quotidienne",cefaisant,en remplaçant lafonction d'originepar:
Maisil semble quemon événement soittoujours déclenchétoutes les heures.J'utilise le plugin de contrôle debase pour surveiller lestâches CRONet il apparaîttoujours comme 'unefoisparheure '