Привіт:) У цьому пості покажу як використовувати анонімні функції у хуках (фільтрах та екшенах) WordPress.
У WordPress для розширення функціоналу активно використовуються hooks — це механізм, який дозволяє змінювати або доповнювати роботу ядра, теми або плагінів без редагування їхнього коду.
- Стандартний спосіб підключення функції до хука
- Використання анонімних функцій у WordPress
- Коли варто використовувати анонімні функції
- Недоліки анонімних функцій у WordPress
- Як зробити анонімну функцію керованою
- Як змінити поведінку функції
- Використання змінних всередині анонімної функції
- Корисні патерни використання анонімних функцій у WordPress
- Передача параметрів у фільтр
- Використання пріоритету хуку
- Передача зовнішніх змінних через use
- Використання анонімних функцій у циклах
- Closure для швидких helper-функцій
- Коли краще НЕ використовувати анонімні функції
- Порада для WordPress-розробників
- Практичні приклади використання анонімних функцій у WordPress
- Зміна довжини excerpt
- Зміна тексту "Read more"
-
Додавання CSS або JS у
<head> - Додавання тексту у footer сайту
- Відключення WordPress Emoji
- Додавання класу до тегу body
- Відключення admin bar на фронтенді
- Додавання атрибута loading="lazy" до зображень
- Висновок
Хуки бувають двох типів:
- Actions (екшени) — виконують певний код у визначений момент;
- Filters (фільтри) — змінюють дані перед їх використанням.
Стандартний спосіб підключення функції до хука
Зазвичай щоб прикріпити користувацьку колбек-функцію до хука використовують наступний код
// Екшен
add_action( $hook_name, $callback, $priority, $accepted_args );
// Фільтр
add_filter( $hook_name, $callback, $priority, $accepted_args );
Наприклад:
add_action( 'wp_head', 'mp_add_to_header' );
if ( ! function_exists( 'mp_add_to_header' ) ) {
function mp_add_to_header() {
echo 'Hello, Wordl!';
}
}
У цьому прикладі функція mp_add_to_header() буде виконана всередині HTML-тегу <head> сторінки.
Використання анонімних функцій у WordPress
Починаючи з PHP 5.3, з'явилась можливість використовувати анонімні функції (closures).
Вони дозволяють передати функцію без створення окремого іменованого callback.
Приклад для фільтру:
add_filter( 'назва_фільтру', function() {
// тіло функції
} );
Приклад для екшену:
add_action( 'назва_екшену', function() {
// тіло функції
} );
Той самий приклад з wp_head можна переписати так:
add_action( 'wp_head', function() {
echo 'Hello, Wordl!';
} );
У цьому випадку окрема функція створюватися не буде, а код виконається безпосередньо в анонімній функції.
back to contents ↑Коли варто використовувати анонімні функції
Анонімні функції добре підходять коли:
- код невеликий,
- функція використовується лише в одному місці,
- її не потрібно перевизначати або відключати,
- це допоміжна логіка.
Наприклад:
add_filter( 'the_title', function( $title ) {
return '★ ' . $title;
} );
Тут перед кожним заголовком запису додається символ.
back to contents ↑Недоліки анонімних функцій у WordPress
Основна проблема анонімних функцій — їх складно відкріпити від хука.
Наприклад:
add_action( 'wp_head', function() {
echo '<style>
body {
background-color: red ! important;
}
</style>';
} );
Такий код неможливо відмінити через remove_action(), оскільки WordPress не має посилання на callback.
Щоб змінити поведінку доведеться:
- редагувати код,
- закоментувати його,
- або переписати логіку.
Як зробити анонімну функцію керованою
Якщо потрібно мати можливість вимикати анонімну функцію, її можна записати у змінну.
$adminInitCallback = '';
$adminInitCallback = function() {
echo '<style>
body {
background-color: red ! important;
}
</style>';
};
if ( $adminInitCallback ) {
add_action( 'wp_head', $adminInitCallback );
}
Тепер WordPress має посилання на callback, і його можна відкріпити.
Як змінити поведінку функції
Якщо потрібно змінити логіку функції, можна зробити так:
remove_action( 'wp_head', $adminInitCallback );
add_action( 'wp_head', 'mp_add_to_header' );
if ( ! function_exists( 'mp_add_to_header' ) ) {
function mp_add_to_header() {
echo '<style>
body {
background-color: green ! important;
}
</style>';
}
}
Або використати нову анонімну функцію:
remove_action( 'wp_head', $adminInitCallback );
add_action( 'wp_head', function() {
echo '<style>
body {
background-color: green ! important;
}
</style>';
} );
У цьому прикладі:
add_action()підключає нову,remove_action()відкріплює стару функцію.
Використання змінних всередині анонімної функції
Closure також дозволяють використовувати змінні із зовнішнього коду через use.
Наприклад:
$color = 'blue';
add_action( 'wp_head', function() use ( $color ) {
echo "<style>body { background-color: $color; }</style>";
} );
Це дозволяє передавати значення у функцію без глобальних змінних.
Корисні патерни використання анонімних функцій у WordPress
Нижче наведу декілька практичних способів використання анонімних функцій, які часто застосовують WordPress-розробники.
Передача параметрів у фільтр
Багато фільтрів WordPress передають параметри у callback-функцію.
Наприклад, фільтр the_content передає текст посту:
add_filter( 'the_content', function( $content ) {
return $content . '<p>Дякуємо за прочитання статті!</p>';
} );
У цьому прикладі:
$content— це контент посту;- функція змінює його та повертає нове значення.
Важливо пам'ятати: фільтри повинні повертати значення, інакше дані можуть зникнути.
back to contents ↑Використання пріоритету хуку
Іноді потрібно змінити порядок виконання функцій.
Для цього використовується параметр priority.
add_action( 'wp_footer', function() {
echo '<p>Footer message</p>';
}, 20 );
Пояснення параметрів:
add_action( $hook, $callback, $priority, $accepted_args );
priority— порядок виконання (за замовчуванням 10),- менше число → виконується раніше,
- більше число → виконується пізніше.
Передача зовнішніх змінних через use
Closure дозволяють передавати змінні із зовнішнього коду.
$message = 'Hello WordPress';
add_action( 'wp_footer', function() use ( $message ) {
echo "<p>$message</p>";
} );
Це зручно, коли потрібно використати значення змінної без створення глобальних змінних.
Використання анонімних функцій у циклах
Іноді потрібно динамічно створювати декілька хуків.
$hooks = array(
'wp_head',
'wp_footer'
);
foreach ( $hooks as $hook ) {
add_action( $hook, function() use ( $hook ) {
echo "<!-- Hook executed: $hook -->";
} );
}
Такий підхід дозволяє генерувати callback-функції динамічно.
Closure для швидких helper-функцій
Анонімні функції добре підходять для локальної логіки, яку не планується використовувати повторно.
Наприклад:
add_filter( 'excerpt_length', function() {
return 20;
} );
Цей код змінює довжину excerpt до 20 слів.
Коли краще НЕ використовувати анонімні функції
Навіть попри зручність closure, у WordPress є випадки, коли їх краще уникати.
Наприклад:
- у великих плагінах,
- у великих темах,
- коли функцію потрібно відключати через remove_action(),
- коли код має бути перевизначений у дочірній темі.
У таких ситуаціях краще використовувати іменовані функції або методи класів.
back to contents ↑Порада для WordPress-розробників
У файлі functions.php часто використовують анонімні функції для незначних змін поведінки теми.
Але якщо код:
- росте,
- використовується повторно,
- або стає складнішим,
— краще винести його у окрему функцію або клас.
Це зробить код:
- більш читабельним,
- легшим для підтримки,
- суміснішим із плагінами та дочірніми темами.
Практичні приклади використання анонімних функцій у WordPress
Нижче наведу декілька реальних прикладів використання анонімних функцій у хуках WordPress.
Зміна довжини excerpt
За замовчуванням WordPress обрізає анонс запису до 55 слів. Це можна легко змінити:
add_filter( 'excerpt_length', function() {
return 20;
} );
Тепер анонс постів буде складатися з 20 слів.
Зміна тексту "Read more"
WordPress додає після excerpt текст [...]. Його можна замінити на власний.
add_filter( 'excerpt_more', function() {
return '...';
} );
Або зробити посилання на запис:
add_filter( 'excerpt_more', function() {
return ' <a href="' . get_permalink() . '">Читати далі</a>';
} );
Додавання CSS або JS у <head>
Іноді потрібно швидко додати стилі або скрипт без створення окремого файлу.
add_action( 'wp_head', function() {
echo '<style>
.highlight {
background: yellow;
}
</style>';
} );
Такий підхід часто використовують для невеликих кастомних стилів.
Додавання тексту у footer сайту
Можна легко додати свій HTML у footer:
add_action( 'wp_footer', function() {
echo '<p style="text-align:center;">© ' . date( 'Y' ) . ' My Website</p>';
} );
Відключення WordPress Emoji
WordPress автоматично підключає скрипти для emoji, але на багатьох сайтах вони не потрібні.
add_action( 'init', function() {
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
} );
Це дозволяє трохи оптимізувати завантаження сайту.
Додавання класу до тегу body
Іноді потрібно додати власний CSS-клас до <body>.
add_filter( 'body_class', function( $classes ) {
$classes[] = 'my-custom-class';
return $classes;
} );
Відключення admin bar на фронтенді
Якщо потрібно приховати верхню адмін-панель WordPress:
add_filter( 'show_admin_bar', function() {
return false;
} );
Додавання атрибута loading="lazy" до зображень
Можна автоматично змінити HTML контенту постів. Це допоможе оптимізувати швидкість завантаження сторінки.
add_filter( 'the_content', function( $content ) {
$content = str_replace(
'<img',
'<img loading="lazy"',
$content
);
return $content;
} );
Висновок
Анонімні функції у WordPress — це зручний спосіб швидко додати просту логіку до actions та filters.
Їх переваги:
- короткий та чистий код
- не потрібно створювати окрему функцію
- зручно для невеликих задач
Недоліки:
- складно відкріпити від хука
- важче перевизначати у темах або плагінах
- можуть ускладнювати підтримку коду
Тому у великих проектах зазвичай рекомендується використовувати іменовані функції, а анонімні залишати лише для невеликих helper-рішень.
✅ Таким чином, анонімні функції можуть зробити код WordPress більш компактним, але використовувати їх вар
