How to test wp_cron?

The question:

This is kind of a stupid question…

I scheduled a action to run every hour:

if(!wp_next_scheduled('my_hourly_events'))
  wp_schedule_event(time(), 'hourly', 'my_hourly_events');

add_action('my_hourly_events', 'the_function_to_run');

function the_function_to_run(){
   echo 'it works!'; 
}

How can I test if this works without waiting an hour? 🙂

I tried adding wp_clear_scheduled_hook('my_hourly_events'); before this code and adding wp_cron() after, but I don’t see my function running…

edit:

ok, I added a trigger_error() inside my function, checked out the apache error log, and it’s there 🙂

So now I’m even more confused:

  • How can the wp-cron run in the background? because apparently that’s what happens if I see no output…

  • this doesn’t seem to work in a object context; why?

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

My favorite plugin for that is Core Control which has very nice module for display of what is going in the cron – which events are set up, when are they next firing, etc.

On getting your hands dirty level see _get_cron_array(), which returns internal stored data for cron events (top level of keys are timestamps).

Method 2

wp-cli is another way:

Listing Events

> wp cron event list
+-------------------+---------------------+-----------------------+---------------+
| hook              | next_run_gmt        | next_run_relative     | recurrence    |
+-------------------+---------------------+-----------------------+---------------+
| wp_update_plugins | 2020-04-14 08:11:38 | 7 hours 24 minutes    | 12 hours      |
| wp_update_themes  | 2020-04-14 08:11:38 | 7 hours 24 minutes    | 12 hours      |
| wcsc_prime_sites  | 2020-04-14 17:00:55 | 16 hours 13 minutes   | 1 day         |
+-------------------+---------------------+-----------------------+---------------+

Schedule an Event

> wp cron event schedule wp_update_plugins "now +5 seconds"
Success: Scheduled event with hook 'wp_update_plugins' for 2020-04-14 00:43:54 GMT.

Then you can visit the front-end of the site and refresh a couple times to make sure it’s triggered. Then run list again to see that it’s no longer scheduled.

Run Directly in Terminal

> wp cron event run wcsc_prime_sites
Executed the cron event 'wcsc_prime_sites' in 0.805s.
Success: Executed a total of 1 cron event.

One quirk to be aware of is that wp-cli runs in the wp-admin context, but WP Cron runs on the front end. That usually isn’t a problem, but when you’re writing jobs, make sure that you require() any wp-admin/includes files that your code expects to be loaded.

If you don’t, then the job will work fine in wp-cli, but will produce a fatal error when running normally.

Other commands

Run wp help cron for more details.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment