wp-crontrol icon indicating copy to clipboard operation
wp-crontrol copied to clipboard

"Run Now" doesn't work with Cavalcade

Open maciejmackowiak opened this issue 4 years ago • 3 comments

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);

maciejmackowiak avatar Mar 17 '21 18:03 maciejmackowiak

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

archon810 avatar Mar 17 '21 20:03 archon810

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

archon810 avatar Mar 17 '21 20:03 archon810

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.

johnbillion avatar Mar 17 '21 21:03 johnbillion