


Блог IT-шника
Блог IT-шника
Привіт:) У цьому пості покажу як використовувати анонімні функції у хуках (фільтрах та екшенах) WordPress.
Зазвичай щоб прикріпити користувацьку колбек-функцію до хука використовують наступний код
// Екшен
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!';
}
}
З використанням анонімних функцій код виглядатиме інакше:
add_filter( 'назва_фільтру', function() {
// тіло функції
} );
add_action( 'назва_екшену', function() {
// тіло функції
} );
Приклад вище можна переписати так:
add_action( 'wp_head', function() {
echo 'Hello, Wordl!';
} );
Використання анонімних функцій оправдане лише якщо у них міститься невеликий код та такий, який не потрібно забороняти на виконання чи перевизначати в інших розділах сайту, темах чи плагінах.
Якщо у файлі functions.php прописати
add_action( 'wp_head', function() {
echo '<style>
body {
background-color: red ! important;
}
</style>';
} );
то дії із цієї функції неможливо буде відмінити чи перевизначити своїм кодом десь в іншому місці. Доведеться код цієї функції просто видалити, закоментувати або переписати її логіку.
Якщо все ж потрібно використати анонімну функцію, то код вище можна переписати так:
$adminInitCallback = '';
$adminInitCallback = function() {
echo '<style>
body {
background-color: red ! important;
}
</style>';
};
if ( $adminInitCallback ) {
add_action( 'wp_head', $adminInitCallback );
}
Тепер якщо десь у коді потрібно змінити поведінку цієї функції та додати свою логіку:
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>';
} );
Тут директива remove_action()
відкріплює від хука користувацьку функцію, а кодом нижче до нього прикріплюється вже нова.