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 );
$tag(строка) (обязательный)
Название фильтра, функцию которого нужно будет удалить.
По умолчанию: нет
$function_to_remove(строка) (обязательный)
Название функции, которую нужно удалить.
По умолчанию: нет
$priority(число)
Приоритет хука (функции), который был установлен во время добавления.
По умолчанию: 10
$accepted_args(удален)
Удален с версии 3.5.

Примеры

#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().

Список изменений

С версии 1.2.0 Введена.

Код remove action: wp-includes/plugin.php WP 5.3

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

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

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

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

7 комментов
  • @ campusboy3433 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' ) );
    	}
    
    Ответить03.Фев.2016 в 14:29 #
    • Kama7641

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

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

      $foo = new WPSEO_Admin_User_Profile();

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

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

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

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

      1
      Ответить03.Фев.2016 в 20:51 #
  • unskill

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

    Спс.

    1
    Ответить26.Мар.2018 в 14:40 #
  • add_filter( 'style_loader_src', 'mytheme_change_styles_url', 10, 2 );
    function mytheme_change_styles_url( $src, $handle ){
    	$src = wp_make_link_relative( $src );
    	return $src;

    Подскажите, хочу изменить абсолютный путь до файла на относительный, но в теме есть подключение //fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700, как сделать исключение к данной строчке? id='google-font-montserrat-css'

    Ответить16.Май.2019 в 15:31 #
    • @ campusboy3433 www.youtube.com/c/wpplus

      Судя по всему проверить, есть ли в $src подстрока fonts.googleapis.com и если есть - вернуть её в неизменном виде. Проверить можно с помощью strpos().

      Ответить16.Май.2019 в 15:40 #
Здравствуйте, !     Войти . Зарегистрироваться