В моем файле 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():Результат:
Удалить действие из вашего вопроса (не проверено):