remove_all_actions()
Удаляет все хуки у указанного события.
Функция удалит все привязанные к событию функции. Если указать приоритет в параметре $priority, то будут удалены только хуки с указанным приоритетом, а не все.
Это обёртка для функции remove_all_filters(). Т.е. она работает точно также и создана для правильного нейминга.
Хуков нет.
Возвращает
true
. Всегда возвращает true
.
Использование
remove_all_actions( $tag, $priority );
- $tag(строка) (обязательный)
- Название события, все хуки которого нужно удалить.
- $priority(число|false)
Приоритет хуков, которые нужно удалить.
- Если указать, то будут удалены только хуки с этим приоритетом.
- Если не указать, то будут удалены абсолютно все прикрепленные к событию хуки.
По умолчанию: false
Примеры
#1 Удалим все прикрепленные к событию функции (хуки)
remove_all_actions( 'login_head' );
#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 ); // Останется
#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() remove all actions WP 6.7.1
function remove_all_actions( $hook_name, $priority = false ) { return remove_all_filters( $hook_name, $priority ); }