How to test wp_cron?

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?

Topic wp-cron actions cron events Wordpress

Category Web


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.


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

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.