Плагин Buddypress Иерархия групп

Buddypress имеет групповую функциональность, которую я объединил с плагином BP Group Hierarchy, чтобы создать иерархию групп на основе роли пользователя.

Однако в плагине использовался метод, описанный Buddpress в ссылке group-extension-api>.

Групповые шаги регистрируются с помощью функции bp_register_group_extension и вызывается add_action. Я безуспешно пытался удалить действие. Поскольку я не совсем понимаю, как работает массив, т.е. массив ( &$extension, \'_register\' ), я пошел искать и нашел это post.

Там есть строка о том, что

Новый формат для вышеупомянутых обратных вызовов метода со ссылкой на объект всегда следующий: имя класса, за которым сразу следует имя метода, за которым следует количество ранее добавленных (имя класса + имя метода). Для классов это позволяет добавлять столько классов, на которые ссылаются объекты, и добавлять методы, которые не переопределяют друг друга.

Однако я не могу удалить действие.

Я попытался удалить действие, поместив следующие строки кода в function.php

функция remove_bp_hierarchy(){

если (has_action('bp_actions')) {

echo $extension = новое расширение BP_Groups_Hierarchy_Extension;

remove_action('bp_actions', array(&$extension, '_register'), 999);

} еще {

}

add_action('bp_init','remove_bp_hierarchy', 999);

Что-то не так с моим remove_action или я использую неправильный метод? Спасибо и привет.

## Обновлять

Нашел страницу, на которой видим список хуков, а также хуки функция на странице. Я вижу, что есть функция с именем _register, которую я ищу. Однако адрес класса всегда меняется. Я думал использовать найденную функцию, чтобы выполнить preg_match и удалить ее, когда она будет найдена. это супер тяжело. Так есть ли другой способ удалить его? Спасибо и С уважением.


person Hong Ming    schedule 27.08.2012    source источник
comment
Теперь временно решите это, используя глобальный $wp_filter; $the_key = ключ($wp_filter['bp_actions'][8]); unset($wp_filter['bp_actions'][8] ); который похож на хардкорный wordpress remove_action   -  person Hong Ming    schedule 27.08.2012


Ответы (1)


CodingBabyDotCom -

Короче говоря: вам придется пройтись по массиву $wp_filter, чтобы удалить действие.

Вам нужна ссылка на ЖЕ экземпляр, который использовался для создания действия, чтобы удалить его с помощью функции remove_action. Таким образом, опубликованная вами функция не работает, потому что она использует новый экземпляр.

К сожалению, bp_register_group_extension() создает только временный экземпляр, поэтому на него нельзя ссылаться более поздними функциями.

Код в вашем комментарии удалит ВСЕ действия на уровне 8, что означает все расширения группы. Чтобы удалить только тот, который вы хотите, переберите каждый фильтр и проверьте его тип с помощью:

is_a( $wp_filter['bp_actions'][8][$key], 'BP_Groups_Hierarchy_Extension' )

person David Dean    schedule 12.11.2012