WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I need to implement a scheduled task in my plugin, and I tried to follow the examples in the documentation, passing one of class methods as the target. I installed Cron Manager plugin, and I see that my hook has been scheduled, but the first schedule is a few seconds in the past. I guess that's because WP sets the very first schedule to "now", which, supposedly, should call the hook straight away.

The issue is that the method I attached to the hook is not called, and Cron Manager displays "seconds left: -X" (where X is the amount of seconds passed from the moment I scheduled the task).

I will skip the wp_schedule stuff as I know that it works (the hook is in the scheduled list, although with a timestamp in the past), so here's the relevant code:

// Cron hook is called myclass_cron
class MyClass {
    public function __construct() {
        add_action('init', array($this, 'wordpress_loaded'));

    public function wordpress_loaded() {
        add_action('myclass_cron', array($this, 'cron_tasks'));

    public function cron_tasks() {
        // Cron stuff. I tried adding a "sleep()" command to see if page load was slower, but it clearly doesn't go through this method

If I add a do_action('myclass_cron'), cron_tasks() runs as expected. I was wondering if I was calling add_action() too late (i.e. when WP is loaded), but I tried to move it to the Class Constructor, and the issue persisted.

Thanks in advance for the answers.

share|improve this question
Could you post the whole thing please? – Andrew Bartel May 14 '13 at 22:14
up vote 0 down vote accepted

I actually found out that the Cron works, just not as I expected. I refreshed the pages and called wp-cron.php (using wget) a couple of times, and I kept seeing my cron task schedule with "-X seconds". Then I stopped for a minute or two, and refreshed the frontend page of the site, and my Cron task got called.

When it was time for the second scheduled execution, one hour later, I repeated the test. Task was due in a couple of seconds, so I waited about 10 seconds an loaded a random page: nothing happened. I waited another half a minute or so, loaded again a random page, and the task got called.

It seems that WordPress has a "relaxed" way of calling Cron jobs, which I don't fully understand yet. Anyway, my approach was correct, my expectations were not. :)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.