﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
6970	Add_feed - bug and fix - Replacing callback function	programming.has.no.com	ryan	"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;
}"	defect (bug)	closed	high	2.6	General	2.5.1	normal	fixed	add_feed	
