WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

remove_action() WP 1.2.0

Удаляет хук (событие или фильтр). Удаляет функцию прикрепленную к указанному хуку.

Удалять хук нужно после того, как он был добавлен. А значит: если вы удаляете хук, а он не удаляется, то скорее всего вы удаляете его до того как он добавляется в коде.

// удаляем хук
remove_action( 'wp_head', 'my_function', 20 );

// здесь подключаемые файлы и где-то в них этот хук 
// добавляется так: add_action( 'wp_head', 'my_function', 20 );
// в результате ваше удаление не работает!

В этом случае удалить хук можно повесив удаление на другой, более поздний хук например wp_loaded:

add_action( 'wp_loaded', function(){
	remove_action( 'wp_head', 'my_function');
} );

ВАЖНО: При удалении хука, приоритет (параметр $priority) должен совпадать с указанным при создании хука. При несовпадении, вы не увидите никаких предупреждений об этом - функция просто вернет false.

Работает на основе: remove_filter()
✈ 1 раз = 0.00001с = скорость света | 50000 раз = 0.06с = скорость света

Хуков нет.

Возвращает

true/false. true — хук был удален. false — хук не был удален.

Использование

remove_action( $tag, $function_to_remove, $priority, $accepted_args );
$tag(строка) (обязательный)
Название фильтра, функцию которого нужно будет удалить.
По умолчанию: нет
$function_to_remove(строка) (обязательный)
Название функции, которую нужно удалить.
По умолчанию: нет
$priority(число)
Приоритет хука (функции), который был установлен во время добавления.
По умолчанию: 10
$accepted_args(число)
Число аргументов хука.
По умолчанию: 1

Примеры

#1. Пример отключения хука-события:

Отключим действие wpautop у хука the_content:

remove_action( 'the_content', 'wpautop' );

точно также его можно отключить через remove_filter() - это идентичная функция:

remove_filter( 'the_content', 'wpautop' );

#2 Пример удаления хука-события для PHP класса

Если событие было добавлено из класса (например, плагин добавил какое-то событие), то чтобы его удалить вам нужно знать конкретный экземпляр класса, который добавил хук. Часто эти экземпляры классов хранятся в глобальных переменных.

Пример удаления хука вызванного из класса, который был записан в глобальную переменную $my_class:

global $my_class; // это сохраненный экземпляр класса
remove_action( 'the_content', array( $my_class, 'class_filter_function' ) );

Нужно иметь ввиду, что класс может добавлять хук не сразу и удалять его нужно после того, как хук добавлен классом. По этой причине вы можете вставлять правильный код удаления, но реального удаления хука может не происходить...

Когда удаляется хук, который создавался внутри класса, то передавать нужно именно тот экземпляр класса из которого создавался хук.

#3 Другие примеры

Еще примеры смотрите в описании функции: remove_filter().

Код remove_action: wp-includes/plugin.php VER 5.0.1

<?php
function remove_action( $tag, $function_to_remove, $priority = 10 ) {
	return remove_filter( $tag, $function_to_remove, $priority );
}

Cвязанные функции

Из метки: События (хуки)

Еще из раздела: Хуки: события, фильтры

6 комментов
  • campusboy3081 cайт: www.youtube.com/c/wpplus

    Друзья, расскажите побольше про удаления хука-события для PHP класса. Вот хочу убрать со страницы редактирования пользователя в админке мета-поля, добавленные плагином Yoast SEO. Вот часть кода его:

    class WPSEO_Admin_User_Profile {
    	/**
    	 * Class constructor
    	 */
    	public function __construct() {
    		add_action( 'show_user_profile', array( $this, 'user_profile' ) );
    		add_action( 'edit_user_profile', array( $this, 'user_profile' ) );
    		add_action( 'personal_options_update', array( $this, 'process_user_option_update' ) );
    		add_action( 'edit_user_profile_update', array( $this, 'process_user_option_update' ) );
    	}
    
    Ответить2.8 года назад #
    • Kama7099

      Тут нет альтернатив вроде бы: нужно найти нужный экземпляр класса и удалить через него.

      Т.е. тебе надо найти где создается класс:

      $foo = new WPSEO_Admin_User_Profile();

      Обычно переменная $foo глобальная и к ней есть доступ отовсюду. Используя её можно удалить хук. Например:

      add_action( 'show_user_profile', array( $foo, 'user_profile' ) );

      Если автор не предусмотрел доступ к созданному экземпляру класса, то не знаю даже как удалить хук... Можно в системе хуков попробовать найти как-то хук по названию и удалить его из массива, но там массив огромный... Это уже частный случай и требует индивидуального подхода...

      П.С. про порядок выполнения операций не забывай: не вызови удаление до того как хук добавлен - не удалиться ничего, даже если код правильный...

      1
      Ответить2.8 года назад #
  • Морис cайт: pc-assistent.ru

    А как удалить функцию wp_make_link_relative

    Ответить1.2 года назад #
  • unskill

    При удалении хука, приоритет (параметр $priority) должен совпадать с указанным при создании хука.

    Спс.

    1
    Ответить8 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться