admin管理员组

文章数量:1304239

Ok, let's say I want to give the user the ability to schedule a wp cron event every X minutes. Now, let's say I want X to be anywhere from 10 to 525600 (minutes in a year).

What I'm seeing is an utterly stupid way to handle cron events through the $schedules array. If I understand correctly, I have to add a custom schedule to the array for every single different event time the end user wants. For example:

add_filter( 'cron_schedules', function ( $schedules ) {
$schedules['twelve_minutes'] = array(
   'interval' => 12,
   'display' => __( 'Twelve Minutes' )
);
return $schedules;
} );

Please tell me there's some way to schedule an event with a custom time without having to add 525,590 unique intervals to the $schedules array.

Ok, let's say I want to give the user the ability to schedule a wp cron event every X minutes. Now, let's say I want X to be anywhere from 10 to 525600 (minutes in a year).

What I'm seeing is an utterly stupid way to handle cron events through the $schedules array. If I understand correctly, I have to add a custom schedule to the array for every single different event time the end user wants. For example:

add_filter( 'cron_schedules', function ( $schedules ) {
$schedules['twelve_minutes'] = array(
   'interval' => 12,
   'display' => __( 'Twelve Minutes' )
);
return $schedules;
} );

Please tell me there's some way to schedule an event with a custom time without having to add 525,590 unique intervals to the $schedules array.

Share Improve this question asked Feb 24, 2021 at 18:10 uPromptuPrompt 1729 bronze badges 4
  • What's the scenario where you would want to run a cronjob at 12 minutes and another one 13 minutes? Why not just combine them both into one or the other? WordPress has default intervals which should work in most scenarios. developer.wordpress/plugins/cron/… – Howdy_McGee Commented Feb 24, 2021 at 18:21
  • Imagine a scenario where the plugin is checking the status of other websites. Let's say the end user wants to check site A every 2 weeks. Site B every 10 minutes, Site C every 6 hours. That would be 3 more custom additions to the $schedules. Now let's imagine that same end user wants to monitor not 3, but 100 websites. The purpose of this mental experiment is to create a set of WP cron jobs where the user doesn't have to keep going into Linux to create them. They can create one cron job in the OS to fire up WP every 10 minutes. From there, WP cron handles the rest. – uPrompt Commented Feb 24, 2021 at 18:57
  • WordPress Cronjobs are not your traditional Server Cronjobs. They will not run every X minutes exactly. The cronjobs run whenever someone visits the website, at which point WordPress will run all events that meet the time or are past-due. From the docs: "Note that scheduling an event to occur within 10 minutes of an existing event with the same action hook will be ignored unless you pass unique $args values for each scheduled event.". It's not perfect, there are limitations. Unfortunately, I don't think there's a way around making schedules without making your own wp_schedule_event function. – Howdy_McGee Commented Feb 24, 2021 at 19:17
  • That's what I was seeing. Just wanted to make sure I wasn't being stoopid. Thanks. – uPrompt Commented Feb 24, 2021 at 19:48
Add a comment  | 

1 Answer 1

Reset to default 1

I use the following code to run a task. this doesn't require adding a cron schedule.

function setup_my_action() { 
  if (!wp_next_scheduled('my_action')) {
     wp_schedule_single_event(time()+3600, 'my_action');
  }
}
function my_action() { 
  // do something
}
add_action('init','setup_my_action');
add_action('my_action', 'my_action');

本文标签: plugin developmentwpscheduleevent custom event time