remove_all_actions()WP 2.7.0

Удаляет все хуки у указанного события.

Функция удалит все привязанные к событию функции. Если указать приоритет в параметре $priority, то будут удалены только хуки с указанным приоритетом, а не все.

Это обёртка для функции remove_all_filters(). Т.е. она работает точно также и создана для правильного нейминга.

Работает на основе: remove_all_filters()

Хуков нет.

Возвращает

true. Всегда возвращает true.

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

remove_all_actions( $tag, $priority );
$tag(строка) (обязательный)
Название события, все хуки которого нужно удалить.
$priority(число|false)

Приоритет хуков, которые нужно удалить.

  • Если указать, то будут удалены только хуки с этим приоритетом.
  • Если не указать, то будут удалены абсолютно все прикрепленные к событию хуки.

По умолчанию: false

Примеры

0

#1 Удалим все прикрепленные к событию функции (хуки)

remove_all_actions( 'login_head' );
0

#2 Удалим только хуки с приоритетом 9, у события login_head

remove_all_actions( 'login_head', 9 );

Это приведет к тому, что, большая часть событий текста записи будет отключена - т.е. будут отключены все события с приоритетом 9. Вот такие:

// из файла: /wp-includes/default-filters.php
add_action( 'login_head', 'wp_print_head_scripts',  9 );    // Будет удалён
add_action( 'login_head', 'print_admin_styles',     9 );    // Будет удалён
add_action( 'login_head', 'wp_robots',              1 );    // Останется
add_action( 'login_head', 'wp_resource_hints',      8 );    // Останется
add_action( 'login_head', 'wp_site_icon',           99 );   // Останется
0

#3 Отменим колбеки в теме Kadence на событии woocommerce_before_shop_loop

В теме Kadence на событии woocommerce_before_shop_loop срабатывает метод, который хотелось бы отключить, но как это сделать, ведь объекта класса получить в данном случае нельзя. Один из самых простых способов - это использовать функцию remove_all_actions().

Коротко, как добавлено событие:

namespace Kadence\Woocommerce;

class Component implements Component_Interface {

	public function initialize() {
		...
		add_action( 'woocommerce_before_shop_loop', array( $this, 'archive_loop_top' ), 20 );
		...
	}

}

// В другом файле используется без доступа к этому объекту

Так как у нас на руках нет объекта этого класса и метод не статичный, то отменить это событие можно так:

add_action( 'wp_head', function () {
	remove_all_actions( 'woocommerce_before_shop_loop', 20 );
} );

Удаление события проводим на хуке wp_head, так как на нём 100% наше событие зарегистрировано и к нему прикреплены функции. Также указываем тот же приоритет, что и был при регистрации, чтобы не удалить другие колбеки, если таковые были. Важно, функция удалит (отвяжет) все функции, прикреплённые на событие woocommerce_before_shop_loop с приоритетом 20, что может быть не подходящим решением в вашей задаче (зарегистрировано много колбеков с этим приоритетом, а удалить надо всего один, тогда вам пригодится скрипт wp-filters-extras). В теукщей задаче такая функция была одна и это подошло для решения.

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

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

Код remove_all_actions() WP 6.5.2

function remove_all_actions( $hook_name, $priority = false ) {
	return remove_all_filters( $hook_name, $priority );
}