## Функция REMOVE_ACTION() в WordPress
Функция remove_action() используется для удаления функции, связанной с определённым хуком. Это может быть полезно, если вам нужно убрать стандартные функции, прикреплённые к какому-либо хуку, и, возможно, заменить их на свои.
Важно помнить, что для успешного удаления хуков аргументы $callback и $priority должны совпадать с теми, которые использовались при добавлении хука. Предупреждение об ошибке удаления не будет выдано.
### Возвращаемое значение
true или false: указывает, была ли функция успешно удалена.
### Синтаксис
```php
remove_action( $hook_name, $callback, $priority );
- $hook_name (строка) (обязательный): имя хука, откуда нужно удалить функцию.
- $callback (строка|массив|callable) (обязательный): имя функции, которую требуется удалить. Вы можете вызывать эту функцию даже в том случае, если гарантии, что она существует, нет.
- $priority (целое число): точный приоритет, использованный при добавлении функции. По умолчанию равен 10.
Примеры использования
Пример 1: Удаление функции из хука
Предположим, мы хотим убрать функцию wpautop() из хука the_content:
remove_action( 'the_content', 'wpautop' );
Вы также можете использовать функцию remove_filter(), чтобы сделать то же самое, так как они идентичны:
remove_filter( 'the_content', 'wpautop' );
Примечание: Важно вызывать
remove_action()после того, как хук был добавлен. Чаще всего эту функцию нужно вызывать внутри другой функции, а не напрямую в вашем плагине или теме.
add_action( 'wp_head', 'remove_my_action' );
function remove_my_action() {
remove_action( 'the_content', 'wpautop' );
}
Примечания
- Вам может понадобиться изменить приоритет удаления в соответствии с тем, когда именно вызывается хук.
- Нельзя удалить хук до того, как он был добавлен.
- Нельзя удалить действие после его выполнения.
- Чтобы успешно удалить действие, приоритет должен совпадать с тем, что использовался при его создании.
Пример 2: Удаление хука из класса
Если событие было добавлено из класса (например, плагин добавил какое-то событие), вам нужно знать конкретный экземпляр класса, который его добавил. Эти экземпляры классов часто сохраняются в глобальных переменных.
Пример удаления хука (т.е. отключение функции хука), если экземпляр класса сохранён в глобальной переменной $my_class:
global $my_class; // сохранённый экземпляр класса
remove_action( 'the_content', array( $my_class, 'class_filter_function' ) );
Имейте в виду, что класс может не добавлять хук сразу, поэтому вам нужно удалить его после того, как он был добавлен классом.
Пример 3: Удаление хука с помощью статического метода класса
Для статических методов мы можем указать метод для удаления напрямую. Предположим, хук был добавлен следующим образом:
class My_Class {
function __construct() {
// добавляем хук
add_action( 'checkout_init', [ __CLASS__, 'force_login' ], 10, 1 );
}
static function force_login() {
// код функции
}
}
new My_Class();
Чтобы удалить этот хук, нужно сначала вызвать функцию remove_action позже и правильно указать имя метода:
add_action( 'wp_loaded', function() {
remove_action( 'checkout_init', [ 'My_Class', 'force_login' ], 10, 1 );
} );
Дополнительные примеры
Для получения дополнительных примеров можете ознакомиться с описанием функции remove_filter().
Удаление хука для недоступного объекта класса
Если вам нужно удалить действие или фильтр для объекта класса, к которому у вас нет доступа, вы можете использовать следующую функцию:
if( ! function_exists( 'remove_class_filter' ) ) :
function remove_class_filter( $tag, $class_name = '', $method_name = '', $priority = 10 ) {
global $wp_filter;
// Проверяем, что фильтр действительно существует
if( ! isset( $wp_filter[ $tag ] ) ){
return false;
}
// Логика удаления фильтра
// ...
return true;
}
endif;
Таким образом, вы сможете удалять хуки, даже если у вас недостаточно информации о классе.
Изменения с версии 1.2.0
Функция remove_action() была внедрена с версии 1.2.0.