Buddypress有一个组功能,我在其中结合了插件BP组层次结构,以便我可以根据用户角色创建组的层次结构。
然而,插件使用Buddpress在group-extension-api>中所教导的方法。链接。
使用函数bp_register_group_extension注册组步骤,并调用add_action。我试图删除该操作但没有成功。因为我不太了解数组是如何工作的,即数组(& $ extension,\'_ register \'),所以我去搜索并找到了这个post。
有一条线说明
上述对象引用的方法回调的新格式始终是:类名,紧接着是方法名,后跟先前添加的量(classname + methodname)。对于类,这允许您添加尽可能多的对象引用类,并添加不会相互覆盖的方法。
但是我似乎无法删除该操作。
我尝试通过在function.php
中添加以下代码行来删除操作function remove_bp_hierarchy(){
if(has_action('bp_actions')){
echo $ extension = new BP_Groups_Hierarchy_Extension;
remove_action('bp_actions',array(& $ extension,'_ register'),999);
}其他{
}
add_action('bp_init','remove_bp_hierarchy',999);
我的remove_action是否有问题,或者我使用了错误的方法?谢谢和问候。
## Update
找到一个page,让我们在页面中看到一个钩子列表和钩子函数。我看到有一个名为_register的函数,它是我正在寻找的函数。但是,类地址总是会改变。我正在考虑使用找到的函数对其执行preg_match并在找到它时将其删除。这太重了。那么有其他方法可以删除它吗?谢谢和问候。
答案 0 :(得分:3)
CodingBabyDotCom -
长话短说:您必须遍历$wp_filter
数组才能删除操作。
您需要引用用于创建操作的SAME实例,以便使用remove_action
函数将其删除。因此,您发布的功能无效,因为它正在使用新实例。
不幸的是bp_register_group_extension()
只创建一个临时实例,因此以后的函数无法引用它。
评论中的代码将删除级别8的所有操作,这意味着所有组扩展。要仅删除所需的那个,请迭代每个过滤器并使用以下内容检查其类型:
is_a( $wp_filter['bp_actions'][8][$key], 'BP_Groups_Hierarchy_Extension' )