В моем файле functions.php
я хотел бы удалить приведенный ниже фильтр, но я не уверен, как это сделать, поскольку он находится в классе. Как должна выглядеть remove_filter()
?
add_filter('comments_array',array( &$this, 'FbComments' ));
В моем файле functions.php
я хотел бы удалить приведенный ниже фильтр, но я не уверен, как это сделать, поскольку он находится в классе. Как должна выглядеть remove_filter()
?
add_filter('comments_array',array( &$this, 'FbComments' ));
Вы должны сохранить ссылку на объект в статическом свойстве вашего класса и затем вернуть эту статическую переменную из статического метода. Примерно так:
Пока вам известен объект, то можете просто удалить его с помощью
remove_filter()
. Все, что вам нужно запомнить, это объект, имя метода и приоритет (если используется):Это очень хороший вопрос. Это относится к API плагина и лучших практик программирования.
Вот пример плагина, чтобы проиллюстрировать проблему.
В итоге вы увидите:
WordPress нужно имя для фильтра. Мы не предоставили его, поэтому WordPress вызывает
_wp_filter_build_unique_id()
и создает его. Это имя не предсказуемо, поскольку оно используетspl_object_hash()
.Если вызывается
var_export()
в$GLOBALS['wp_filter'][ 'wp_footer' ]
мы получаем что-то вроде этого:Создадим функцию:
Когда мы вызываем эту функцию? Невозможно точно знать, когда создается исходный объект. Может быть, иногда до
'plugins_loaded'
. А может быть позже.Мы используем точно такой же хук, с которым связан объект, и очень рано переключаемся с приоритетом
0
. Это единственный способ быть уверенным. Вот как мы должны удалить методprint_message_3()
:Результат:
Удалить действие из вашего вопроса (не проверено):