johnbillion / wp-crontrol

Take control of the cron events on your WordPress website
https://wp-crontrol.com
GNU General Public License v2.0
209 stars 37 forks source link

"Run Now" doesn't work with Cavalcade #56

Open maciejmackowiak opened 3 years ago

maciejmackowiak commented 3 years ago

Hi, We have run into an issue with Cavalcade and wp-crontrol, when we use the "Run Now" button it adds the event to the database but because of this function in Cavalcade: https://github.com/humanmade/Cavalcade/blob/771b2e114aaa5684fb2f9322a6af5a89e9ff90d0/inc/connector/namespace.php#L449 This check returns false: https://github.com/johnbillion/wp-crontrol/blob/develop/src/event.php#L104

And it results in Failed to schedule the cron event message but the event is created.

The solution could be to replace this part:

$scheduled = force_schedule_single_event( $hookname, $event->args ); // UTC

With using the schedule_event hook like this:

add_filter('schedule_event', function($event){
    if ($event->hook == 'wp-crontrol-fake-event') {
        $event->hook = $event->args['hook'];
        $event->args = $event->args['args'];
    }
    return $event;
});
$scheduled = wp_schedule_single_event(1, 'wp-crontrol-fake-event', $event);
archon810 commented 3 years ago

As a Cavalcade user, I'd love to see this implemented.

archon810 commented 3 years ago

When you click Run Now, a duplicate event with 50+year (no date set or 1969 epoch time 0 I guess?) next run date is created and really scares you at first.

image

johnbillion commented 3 years ago

Thanks for the report. Forcing an event to be added when WordPress core treats it as a duplicate is a complete pain, hence this function for forcibly inserting it into the cron array.

I'll take a look at your proposed solution. Won't have time soon though.