The ‘pre_schedule_event’ WordPress PHP filter schedules a recurring event by attaching a hook that gets triggered by WordPress at the specified interval.
The action occurs when someone visits your WordPress site if the scheduled time has passed.
Usage
To schedule a recurring event, use the wp_schedule_event()
function with the following parameters:
wp_schedule_event( $timestamp, $recurrence, $hook, $args = array(), $wp_error = false );
Parameters
- $timestamp (int): Required. Unix timestamp (UTC) for when to next run the event.
- $recurrence (string): Required. How often the event should subsequently recur. See
wp_get_schedules()
for accepted values. - $hook (string): Required. Action hook to execute when the event is run.
- $args (array): Optional. Array containing arguments to pass to the hook’s callback function. Each value in the array is passed to the callback as an individual parameter. The array keys are ignored. Default: array()
- $wp_error (bool): Optional. Whether to return a WP_Error on failure. Default: false
Examples
Schedule a daily backup
In this scenario, we want to schedule a daily backup of our WordPress site.
function my_daily_backup() { // Your backup logic here } add_action('my_daily_backup_hook', 'my_daily_backup'); if (!wp_next_scheduled('my_daily_backup_hook')) { wp_schedule_event(time(), 'daily', 'my_daily_backup_hook'); }
This code schedules a daily backup by adding an action named my_daily_backup_hook
. It first checks if the event is already scheduled using wp_next_scheduled()
. If not, it schedules the event using wp_schedule_event()
with a ‘daily’ recurrence.
Schedule an hourly email notification
In this scenario, we want to send an email notification to the administrator every hour.
function hourly_email_notification() { // Your email sending logic here } add_action('hourly_email_notification_hook', 'hourly_email_notification'); if (!wp_next_scheduled('hourly_email_notification_hook')) { wp_schedule_event(time(), 'hourly', 'hourly_email_notification_hook'); }
This code schedules an hourly email notification by adding an action named hourly_email_notification_hook
. It first checks if the event is already scheduled using wp_next_scheduled()
. If not, it schedules the event using wp_schedule_event()
with an ‘hourly’ recurrence.
Schedule a twice daily database optimization
In this scenario, we want to optimize our WordPress database twice daily.
function optimize_database() { // Your database optimization logic here } add_action('optimize_database_hook', 'optimize_database'); if (!wp_next_scheduled('optimize_database_hook')) { wp_schedule_event(time(), 'twicedaily', 'optimize_database_hook'); }
This code schedules a twice daily database optimization by adding an action named optimize_database_hook
. It first checks if the event is already scheduled using wp_next_scheduled()
. If not, it schedules the event using wp_schedule_event()
with a ‘twicedaily’ recurrence.
Schedule a custom interval event
In this scenario, we want to schedule an event to run every 30 minutes.
function add_custom_cron_schedule($schedules) { $schedules['every_30_minutes'] = array( 'interval' => 30 * MINUTE_IN_SECONDS, 'display' => 'Every 30 minutes' ); return $schedules; } add_filter('cron_schedules', 'add_custom_cron_schedule'); function run_every_30_minutes() { // Your logic for the event here } add_action('run_every_30_minutes_hook', 'run_every_30_minutes'); if (!wp_next_scheduled('run_every_30_minutes_hook')) { wp_schedule_event(time(), 'every_30_minutes', 'run_every_30_minutes_hook'); }
This code schedules an event to run every 30 minutes by first adding a custom cron schedule named ‘every_30_minutes’ using the `add_custom_cron_schedule()` function and the `cron_schedules` filter. Then, it adds an action named `run_every_30_minutes_hook`. It checks if the event is already scheduled using `wp_next_scheduled()`. If not, it schedules the event using `wp_schedule_event()` with the ‘every_30_minutes’ recurrence.
Schedule a weekly user report generation
function add_weekly_cron_schedule($schedules) { $schedules['weekly'] = array( 'interval' => 7 * DAY_IN_SECONDS, 'display' => 'Once a week' ); return $schedules; } add_filter('cron_schedules', 'add_weekly_cron_schedule'); function generate_user_report() { // Your user report generation logic here } add_action('generate_user_report_hook', 'generate_user_report'); if (!wp_next_scheduled('generate_user_report_hook')) { $next_week = strtotime('next Monday'); wp_schedule_event($next_week, 'weekly', 'generate_user_report_hook'); }
This code schedules a weekly user report generation by first adding a custom cron schedule named ‘weekly’ using the add_weekly_cron_schedule()
function and the cron_schedules
filter. Then, it adds an action named generate_user_report_hook
. It checks if the event is already scheduled using wp_next_scheduled()
. If not, it schedules the event using wp_schedule_event()
with the ‘weekly’ recurrence, starting from the next Monday.