wp_schedule_event() in plugin not scheduling a cron event wp_schedule_event() in plugin not scheduling a cron event wordpress wordpress

wp_schedule_event() in plugin not scheduling a cron event


See: wp_schedule_event()

Valid values for the recurrence are hourly, daily, and twicedaily. These can be extended using the ‘cron_schedules’ filter in wp_get_schedules().

So you just need to add a custom schedule that runs every 5 minutes.

<?php // Requires PHP 5.4+.add_filter( 'cron_schedules', function ( $schedules ) {    $schedules['every-5-minutes'] = array(        'interval' => 5 * MINUTE_IN_SECONDS,        'display'  => __( 'Every 5 minutes' )    );    return $schedules;} );if( ! wp_next_scheduled( 'my_function_hook' ) ) {      wp_schedule_event( time(), 'every-5-minutes', 'my_function_hook' );  }


WP Cron runs, when somebody visits your website.Thus if nobody visits, the cron never runs.

Now there are 2 solutions:

  1. Disable WP Cron, use a real cron job and customize it.

https://support.hostgator.com/articles/specialized-help/technical/wordpress/how-to-replace-wordpress-cron-with-a-real-cron-job

  1. Use a custom interval in wp_schedule_event():

    function myprefix_custom_cron_schedule( $schedules ) {    $schedules['every_six_hours'] = array(        'interval' => 21600, // Every 6 hours        'display'  => __( 'Every 6 hours' ),    );    return $schedules;}add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' );//Schedule an action if it's not already scheduledif ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) {    wp_schedule_event( time(), 'every_six_hours', 'myprefix_cron_hook' );}///Hook into that action that'll fire every six hours add_action( 'myprefix_cron_hook', 'myprefix_cron_function' );//create your function, that runs on cronfunction myprefix_cron_function() {    //your function...}

and you can see these tuts

http://www.nextscripts.com/tutorials/wp-cron-scheduling-tasks-in-wordpress/

http://www.iceablethemes.com/optimize-wordpress-replace-wp_cron-real-cron-job/

http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/

custom Wp cron

http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules

http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/

http://www.viper007bond.com/2011/12/14/how-to-create-custom-wordpress-cron-intervals/

http://www.sitepoint.com/mastering-wordpress-cron/

https://tommcfarlin.com/wordpress-cron-jobs/

http://www.paulund.co.uk/create-cron-jobs-in-wordpress

cron linux

http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

http://www.thesitewizard.com/general/set-cron-job.shtml

http://code.tutsplus.com/tutorials/scheduling-tasks-with-cron-jobs--net-8800

google search


As @dingo_d commented, WordPress Cron doesn't work like server Cron. the WordPress Cron runs on page load. It checks the database for a scheduled event and if an event is scheduled it runs the task. So if nobody visits the website in a 5 minute time period no job will be run in that period. When someone does visit the website, the page load process runs and the scheduled event takes place.

It was setup like this so WordPress would work without needing any particular Cron functionality on the server.

To circumvent this you can use a service that automatically visit your website or you could setup a Cron script on your server to automatically load the page.

Assuming a linux server you ssh into the terminal then write crontab -e and hit enter. You'll enter the cron file for setting up cron jobs. Add to the file the following line:

/5 * * * wget -q -O - http://yourdomain.com/wp-cron.php?doing_wp_cron

substituting http://yourdomain.com for your actual website. This ensures your website is visited every 5 minutes.

I grabbed the information on how to do this from https://tommcfarlin.com/wordpress-cron-jobs/ so credit to him and that link has lots more WordPress cron info.