Delete all scheduled events with a particular hook

I have several cron jobs all hooked to the same hook, but each with a different argument (a post ID). It appears wp_clear_scheduled_hook only clears job which match the argument passed with it (or jobs without any arguments, if no argument is provided).

Is there a way to delete all the cron jobs associated with a hook, regardless of the argument that job has? (Without doing so ‘manually’ by looping through the IDs).

Read More

Seems an answer was deleted! To clarify what I would like to achieve: each post has an expiration date – and I would like to delete the post after this date.

(An alternative option is to have one cron job – repeating every 24 hours that deletes any expired posts).

However, I decided to create a one-off job for each post – but it seems you can’t delete all the jobs at once without cycling through them.

Related posts

Leave a Reply

2 comments

  1. I have just quickly wrote the below function, it will clear all crons for the specified hook, irrespective of the cron time and the hook argument.

    NOTE: I have NOT TESTED the function, so please don’t run it on your live site.

    function wpse39681_clear_all_crons( $hook ) {
        $crons = _get_cron_array();
        if ( empty( $crons ) ) {
            return;
        }
        foreach( $crons as $timestamp => $cron ) {
            if ( ! empty( $cron[$hook] ) )  {
                unset( $crons[$timestamp][$hook] );
            }
    
            if ( empty( $crons[$timestamp] ) ) {
                unset( $crons[$timestamp] );
            }
        }
        _set_cron_array( $crons );
    }
    

    Related: http://core.trac.wordpress.org/ticket/18997