Функции ADD_FILTER_ONCE() и ADD_ACTION_ONCE() в WordPress
В WordPress мы часто создаем хуки (hooks) для изменения содержимого, например, заголовка записи. Предположим, что мы хотим добавить что-то в заголовок поста, используя хук the_title
. Проблема в том, что хук, который мы добавили, будет срабатывать каждый раз, когда вызывается the_title()
, даже после изменения заголовка.
Чтобы решить эту проблему, нам нужно, чтобы наш хук сработал только один раз, после чего он должен удалиться. Однако WordPress не предоставляет функции, которая автоматически добавляет хук и удаляет его после первого запуска.
Я разработал две функции, которые решают эту задачу: add_filter_once()
и add_action_once()
. Давайте рассмотрим ��аждую из них подробнее.
Как работают функции add_filter_once()
и add_action_once()
Эти функции позволяют добавить хук, который будет срабатывать только один раз. Давайте посмотрим на их реализацию.
Код функций
if( ! function_exists( 'add_filter_once' ) ) :
function add_filter_once( $hook_name, $hook_callback, $hook_priority = 10, $accepted_args = 1 ) {
$cb = static function () use ( $hook_name, $hook_callback, $hook_priority, & $cb ) {
remove_filter( $hook_name, $cb, $hook_priority );
unset( $cb );
return $hook_callback( ...func_get_args() );
};
return add_filter( $hook_name, $cb, $hook_priority, $accepted_args );
}
function add_action_once( $hook_name, $hook_callback, $hook_priority = 10, $accepted_args = 1 ){
return add_filter_once( $hook_name, $hook_callback, $hook_priority, $accepted_args );
}
endif;
Объяснение кода
-
Проверка существования функции: Сначала мы проверяем, существует ли функция
add_filter_once
. Это нужно для того, чтобы избежать ошибок, если функция уже была объявлена. -
Функция
add_filter_once
: Она принимает название хука, колбэк (функцию, которую нужно выполнить), приоритет и количество аргументов. Внутри функции создается анонимная функция$cb
, которая будет добавлена в качестве хука. -
Удаление хука: После первого вызова колбэк
remove_filter
удаляет сам хук, чтобы он не сработал снова, а затем возвращает результат работы нашего колбэка. -
Функция
add_action_once
: Эта функция просто вызываетadd_filter_once
для работы с действиями.
Как использовать эти функции
Чтобы воспользоваться функциями, вставьте код в файл вашей темы или плагина functions.php
. После этого вы можете использовать их так же, как и стандартные функции add_filter()
и add_action()
.
Пример использования
add_filter_once( 'the_title', static function( $title ) {
if( my_condition ) { // Здесь вы можете задать ваше условие
return $title . ' (добавление)';
}
return $title;
} );
Объяснение примера
В этом примере мы добавляем текст "(добавление)" к заголовку поста только один раз, если выполняется условие my_condition
. После первого вызова этот хук автоматически удаляется.
Заключение
Функции add_filter_once()
и add_action_once()
упрощают работу с хуками в WordPress, позволяя вам добавлять одноразовые изменения. Это удобно, когда вам нужно внести изменения в содержимое, не беспокоясь о том, что ваш хук сработает повторно.
Теперь вы можете использовать эти функции, чтобы сделать ваши посты более динамичными и управляемыми!