WordPress как на ладони
wordpress jino

remove_action() WP 1.2.0

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

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

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

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

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

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

Хуков нет.

Возвращает

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 WP 4.8.2

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

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

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

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

remove_action 3 комментария
  • campusboy1832 cайт: wp-plus.ru

    Друзья, расскажите побольше про удаления хука-события для 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' ) );
    	}
     ........................
    
    	public function process_user_option_update( $user_id ) {
    		update_user_meta( $user_id, '_yoast_wpseo_profile_updated', time() );
    
    		$nonce_value = $this->filter_input_post( 'wpseo_nonce' );
    
    		if ( empty( $nonce_value ) ) { // Submit from alternate forms.
    			return;
    		}
    
    		check_admin_referer( 'wpseo_user_profile_update', 'wpseo_nonce' );
    
    		update_user_meta( $user_id, 'wpseo_title', $this->filter_input_post( 'wpseo_author_title' ) );
    		update_user_meta( $user_id, 'wpseo_metadesc', $this->filter_input_post( 'wpseo_author_metadesc' ) );
    		update_user_meta( $user_id, 'wpseo_metakey', $this->filter_input_post( 'wpseo_author_metakey' ) );
    		update_user_meta( $user_id, 'wpseo_excludeauthorsitemap', $this->filter_input_post( 'wpseo_author_exclude' ) );
    	}
    
    Ответить1.5 года назад #
    • Kama4485

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

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

      $foo = new WPSEO_Admin_User_Profile();

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

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

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

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

      1
      Ответить1.5 года назад #
  • Морис

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

    Ответить20 дней назад #

Здравствуйте, !

Ваш комментарий