为什么Remove_action在我的插件中不起作用?

时间:2010-11-27 作者:Chris Cox

与Buddypress一起使用WordPress多站点网络。为了修改顶部导航栏,我编写了一个函数来替换部分菜单。这样称呼它:

add_action(\'bp_adminbar_menus\', \'new_adminbar_blogs_menu\', 6);

remove_action(\'bp_adminbar_menus\', \'bp_adminbar_blogs_menu\', 6);
在我的功能中工作完美。但是当我尝试将上述代码移动到插件文件时,remove\\u操作无法启动,但add\\u操作按预期工作。

As a temporary solution, renaming the function folder to something appearing after Buddypress alphabetically solved the issue.

4 个回复
最合适的回答,由SO网友:Rarst 整理而成

我不确定BuddyPress的具体情况。

通常情况下,在函数实际添加到挂钩之前触发remove时,remove不起作用。在核心主题、插件主题、父主题和子主题之间,有许多添加/删除的相对组合。

在这种情况下,要使remove-fire正确,您需要将其包装到函数中,并在add之后将包装器函数挂钩到某个点。

SO网友:MikeSchinkel

你好@Chris Cox:

我不确定,但我有一个猜测。这两行代码是在你的主题中单独列出的吗functions.php 文件,或者它们是否包装在an \'init\' hook? 如果没有,或者你不知道我在说什么,那么下面是我认为你需要包含在插件中的代码:

add_action(\'init\',\'yourplugin_init\');
function yourplugin_init() {
  add_action(\'bp_adminbar_menus\', \'new_adminbar_blogs_menu\', 6);
  remove_action(\'bp_adminbar_menus\', \'bp_adminbar_blogs_menu\', 6);
}

SO网友:bueltge

你必须检查一下,BP内部是如何发射的;也许hook plugins\\u稍后加载了cam作为功能。php的主题,她是非常快和之前的插件。可以使用该值设置新的优先级。通过init hook添加插件,然后包括remove\\u操作。

SO网友:Horttcore

BuddyPress有自己的“init”功能,请检查文档。正如Mike所说,您的BuddyPress是在您的函数之前加载的。php。

http://codex.buddypress.org/plugin-development/checking-buddypress-is-active/

这对你有帮助。

结束

相关推荐