Opened 4 years ago
Closed 4 years ago
#10468 closed defect (bug) (fixed)
wp_clear_scheduled_hook does not work when including an $args parameter
| Reported by: |
|
Owned by: |
|
|---|---|---|---|
| Priority: | normal | Milestone: | 3.0 |
| Component: | Cron | Version: | 2.8.1 |
| Severity: | normal | Keywords: | has-patch needs-testing |
| Cc: | scribu@… |
Description
The value for $args that gets passed from wp_clear_scheduled_hook to wp_unschedule_event gets changed and therefore nothing will get unscheduled as no jobs will have that argument.
The problem is that the value of the $args parameter is detected using array_slice( func_get_args(), 1 ) and this actually places the value of $args inside an array with one element with the value of $args.
The value of $args passed by wp_clear_scheduled_hook('my_hook','hello') to wp_unschedule_event will then look like this:
array
(
[0] => hello
)
instead of this:
hello
The function wp_clear_scheduled_hook is used with the $args parameter in core in three places:
- Inside wp_delete_post to clear any job which might try to publish a future post which has been deleted.
- Inside check_and_publish_future_post to clear any job which might try to republish a future post which has been published.
- Inside _transition_post_status to clear any job which might try to publish a future post which has gone back to draft status.
So according to this bug, these three areas cannot be functioning as expected, as they pass a value in the $args parameter to wp_clear_scheduled_hook.
Attachments (1)
Change History (8)
johnbillion
— 4 years ago
comment:1
johnbillion
— 4 years ago
- Keywords has-patch needs-testing added
comment:2
scribu
— 4 years ago
- Cc scribu@… added
- Keywords cron wp-cron wp_clear_scheduled_hook removed
- Milestone changed from Unassigned to 2.9
comment:4
westi
— 4 years ago
Makes perfect sense for this to take an $args array like the rest of them.
We may break some plugins though that have made it work for single arguments.
I wonder if we should put in some backwards compatibility code for them.
comment:5
scribu
— 4 years ago
- Keywords changed from has-patch, needs-testing to has-patch needs-testing
Indeed, if a plugin did something like
wp_clear_scheduled_hook('my_hook', 'first_arg', 'second_arg');
it would have worked correctly.
Patch.
wp_clear_scheduled_hook can currently take multiple values for $args. My patch removes this functionality, but breaking backwards compatibility won't be an issue as this never worked anyway.