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).
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.
4.9.0 introduced
wp_unschedule_hook()
https://developer.wordpress.org/reference/functions/wp_unschedule_hook/
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.
Related: http://core.trac.wordpress.org/ticket/18997