#6970 closed defect (bug) (fixed)
Add_feed - bug and fix - Replacing callback function
Reported by: |
|
Owned by: |
|
---|---|---|---|
Milestone: | 2.6 | Priority: | high |
Severity: | normal | Version: | 2.5.1 |
Component: | General | Keywords: | add_feed |
Focuses: | Cc: |
Description
When adding a feed using add_feed (wp-includes/rewrite.php) you can not replace the callback function with a one with a different name, as this will try to remove a callback that doesn't exist, thus remove_action fails. Adding a $remove_function to the function variables and checking for its presence and removing the correct callback function fixes this.
buggy version
function add_feed($feedname, $function) {
global $wp_rewrite;
if (!in_array($feedname, $wp_rewrite->feeds)) { override the file if it is
$wp_rewrite->feeds[] = $feedname;
}
$hook = 'do_feed_' . $feedname;
remove_action($hook, $function, 10, 1);
add_action($hook, $function, 10, 1);
return $hook;
}
fixed version
function add_feed($feedname, $function, $remove_function="") {
global $wp_rewrite;
if (!in_array($feedname, $wp_rewrite->feeds)) { override the file if it is
$wp_rewrite->feeds[] = $feedname;
}
$hook = 'do_feed_' . $feedname;
if($remove_function != "") remove_action($hook, $remove_function, 10, 1);
else remove_action($hook, $function, 10, 1);
add_action($hook, $function, 10, 1);
return $hook;
}
Change History (5)
#3
in reply to:
↑ 2
@
17 years ago
Replying to ryan:
How about always removing the default function for that feed?
Yer that would work, and save changing the function arguments... How about this version?
function add_feed($feedname, $function) {
global $wp_rewrite;
if (!in_array($feedname, $wp_rewrite->feeds)) { override the file if it is
$wp_rewrite->feeds[] = $feedname;
}
$hook = 'do_feed_' . $feedname;
remove_action($hook, $hook, 10, 1);
add_action($hook, $function, 10, 1);
return $hook;
}
Code: