Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Getting Started with the Cron API
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
JR Tashjian
October 11, 2014
Programming
140
0
Share
Getting Started with the Cron API
WordCamp Saratoga 2014
JR Tashjian
October 11, 2014
Other Decks in Programming
See All in Programming
Terraform言語の静的解析 / static analysis of Terraform language
wata727
1
140
PHPer、Cloudflare に引っ越す
suguruooki
1
140
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
1.6k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
240
Road to RubyKaigi: Play Hard(ware)
makicamel
1
550
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
260
20260514_its_the_context_window_stupid.pdf
heita
0
630
Are We Really Coding 10× Faster with AI?
kohzas
0
130
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
120
AIを導入する前にやるべきこと
negima
2
340
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
160
My daily life on Ruby
a_matsuda
3
190
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
Navigating Team Friction
lara
192
16k
Marketing to machines
jonoalderson
1
5.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
790
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
560
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
390
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.3k
The untapped power of vector embeddings
frankvandijk
2
1.7k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
350
KATA
mclloyd
PRO
35
15k
Transcript
@jrtashjian
WordPress Cron API
WordPress Cron API
What’s Cron?
* * * * * /path/to/command
* * * * * /path/to/command day of the week
* * * * * /path/to/command day of the week
month
* * * * * /path/to/command day of the week
month day of the month
* * * * * /path/to/command day of the week
month day of the month hour
* * * * * /path/to/command day of the week
month day of the month hour minute
# run once a year 0 0 1 1 *
/path/to/command
# run once a year @yearly /path/to/command @annually /path/to/command
@monthly /path/to/command @weekly /path/to/command @daily /path/to/command @hourly /path/to/command
Asynchronous Jobs
Database Job System Clients Enqueue Workers Dequeue
None
WordPress Cron API
Database Job System Clients Enqueue Workers Dequeue
Database WP Cron API Plugin Enqueue Site Visits Dequeue
WordPress Cron API
Using the API
2 Main Functions • wp_schedule_event( $timestamp, $recurrence, $hook, $args )
• wp_schedule_single_event( $timestamp, $hook, $args )
2 Main Functions • wp_schedule_event( $timestamp, $recurrence, $hook, $args )
• wp_schedule_single_event( $timestamp, $hook, $args )
2 Main Functions • wp_schedule_event( $timestamp, $recurrence, $hook, $args )
• wp_schedule_single_event( $timestamp, $hook, $args )
2 Main Functions • wp_schedule_event( $timestamp, $recurrence, $hook, $args )
• wp_schedule_single_event( $timestamp, $hook, $args )
2 Main Functions • wp_schedule_event( $timestamp, $recurrence, $hook, $args )
• wp_schedule_single_event( $timestamp, $hook, $args )
Custom Schedule
Get Schedules <?php wp_get_schedules(); ?> Array ( [hourly] => Array
( [interval] => 3600 [display] => Once Hourly ) [twicedaily] => Array ( [interval] => 43200 [display] => Twice Daily ) [daily] => Array … )
Create a Schedule <?php add_filter( 'cron_schedules', 'cron_add_weekly' ); function cron_add_weekly(
$schedules ) { $schedules['weekly'] = array( 'interval' => 60 * 60 * 24 * 7, // 604800 'display' => __( 'Once Weekly' ) ); }
Create a Schedule <?php add_filter( 'cron_schedules', 'cron_add_weekly' ); function cron_add_weekly(
$schedules ) { $schedules['weekly'] = array( 'interval' => 60 * 60 * 24 * 7, // 604800 'display' => __( 'Once Weekly' ) ); }
Create a Schedule <?php add_filter( 'cron_schedules', 'cron_add_weekly' ); function cron_add_weekly(
$schedules ) { $schedules['weekly'] = array( 'interval' => 60 * 60 * 24 * 7, // 604800 'display' => __( 'Once Weekly' ) ); }
Recurring Event
Recurring Event <?php register_activation_hook( __FILE__, 'prefix_activation' ); function prefix_activation() {
wp_schedule_event( time(), 'hourly', 'prefix_hourly_event_hook' ); } add_action( 'prefix_hourly_event_hook', 'prefix_do_this_hourly' ); function prefix_do_this_hourly() { // do something. }
Recurring Event <?php register_activation_hook( __FILE__, 'prefix_activation' ); function prefix_activation() {
wp_schedule_event( time(), 'hourly', 'prefix_hourly_event_hook' ); } add_action( 'prefix_hourly_event_hook', 'prefix_do_this_hourly' ); function prefix_do_this_hourly() { // do something. }
Recurring Event <?php register_activation_hook( __FILE__, 'prefix_activation' ); function prefix_activation() {
wp_schedule_event( time(), 'hourly', 'prefix_hourly_event_hook' ); } add_action( 'prefix_hourly_event_hook', 'prefix_do_this_hourly' ); function prefix_do_this_hourly() { // do something. }
Single Event
Single Event <?php add_action( 'prefix_single_event', 'prefix_single_event ); function prefix_single_event() {
// do something } wp_schedule_single_event( time() + 3600, 'prefix_single_event' );
Single Event <?php add_action( 'prefix_single_event', 'prefix_single_event ); function prefix_single_event() {
// do something } wp_schedule_single_event( time() + 3600, 'prefix_single_event' );
Single Event with arguments <?php add_action( 'prefix_single_event', 'prefix_single_event, 10, 3
); function prefix_single_event( $arg1, $arg2, $arg3 ) { // do something } wp_schedule_single_event( time() + 3600, 'prefix_single_event', array( $arg1, $arg2, $arg3 ) );
How it works 1. A visitor requests a page on
your site. 2. wp_cron() is called 3. spawn_cron() is called 4. One event processed, then removed from queue
Strengths
Weaknesses
When to use it
Getting More Accurate
define( 'DISABLE_WP_CRON', true );
0 * * * * wget http://yourwebsite.com/wp- cron.php >& /dev/null
WP-CLI http://wp-cli.org
wp cron command • event list • event delete •
event schedule • event run • schedule list
wp cron event list >> wp cron event list +----------------------+---------------------+--------------------+------------+
| hook | next_run_gmt | next_run_relative | recurrence | +----------------------+---------------------+--------------------+------------+ | wp_version_check | 2014-10-11 17:50:37 | 2 hours 13 minutes | 12 hours | | wp_update_plugins | 2014-10-11 17:50:37 | 2 hours 13 minutes | 12 hours | | wp_update_themes | 2014-10-11 17:50:37 | 2 hours 13 minutes | 12 hours | | wp_scheduled_delete | 2014-10-11 18:42:25 | 3 hours 5 minutes | 1 day | | wp_maybe_auto_update | 2014-10-11 19:50:00 | 4 hours 12 minutes | 12 hours | +----------------------+---------------------+--------------------+------------+
wp shell >> wp shell wp> prefix_do_this_hourly(); wp> $arg1 =
"first value"; wp> $arg2 = "second value"; wp> $arg3 = "third value"; wp> prefix_single_event( $arg1, $arg2, $arg3 );
Contributing https://make.wordpress.org/core/components/cron-api/
Questions? @jrtashjian jrtashjian.com