Хуки WordPress та анонімні функції

Привіт:) У цьому пості покажу як використовувати анонімні функції у хуках (фільтрах та екшенах) 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() відкріплює від хука користувацьку функцію, а кодом нижче до нього прикріплюється вже нова.

Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, блоги на WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *