Хуки в WordPress

WordPress предлагает хуки фильтров и действий, позволяющие плагинам изменять различные типы внутренних данных во время выполнения.

С помощью хуков мы можем как бы цепляться за определенные события происходящие во время загрузки сайта. Цеплять можно собственные функции совершать как бы (перехват). Таким образом добавлять или удалять какие то элементы дизайна сайта, делать проверку и возвращать данные обратно, добавлять дополнительный функционал сайту и многое другое.

Функции, используемые для изменения действий/фильтров в WordPress, могут быть подключены к WordPress. Однако важно отметить, что действия и фильтры — это не одно и то же. 

Действия — это функции, выполняемые, когда в WordPress происходит определенное событие. Фильтры позволяют изменять определенные функции. Аргументы, используемые для перехвата фильтров и действий, выглядят одинаково. Но они отличаются функциональностью и поведением.

Хуки событий и действий

Использование метода add_action()

Делает данная функция очень простую вещь — добавляет функцию обратного вызова в хук действия, с возможностью задания приоритета.

Зачастую, функции do_action уже добавлены в тему WordPress и будут запускаться всякий раз, когда к ним что-то подключается через add_action. Таким образом, вы, как пользователь, будете использовать функции add_action и remove_action только для внесения своих изменений.

Общий вид хука

/**
* Принимаемые параметры
* $hook_name — имя хука
* $callback — функция обратного вызова для обработки
* $priority — используется для указания порядка, в котором выполняются функции, связанные с конкретным действием. Меньшие числа соответствуют более раннему выполнению, а функции с таким же приоритетом выполняются в том порядке, в котором они были добавлены в действие.
* $accepted_args — количество аргументов, принимаемых событием
*/
add_action( $hook, $function_to_add, $priority, $accepted_args );

Есть три основные функции, которые вам нужно знать, чтобы понять, как работают хуки:

  1. do_action() –  место хука, где запускаются «зацепленные» функции
  2. add_action() – прикрепляет функцию к хуку, как определено в do_action
  3. remove_action() – удаляет функцию, прикрепленную к указанному хуку действия

Хуки фильтров

Следует отметить две основные функции работы с хуками фильтров в WordPress — это add_filter и apply_filter. В отличие от действий, фильтры предназначены для изолированной работы и никогда не должны иметь побочных эффектов, таких как влияние на глобальные переменные и выходные данные. Фильтры ожидают, что им что-то вернут.

Использование метода add_filter()

Общий вид хука

/**
* Принимаемые параметры
* $hook_name — указывает имя действия, к которому привязан $callback.
* $callback — указывает обратный вызов, который будет выполняться при применении фильтра.
* $priority — указывает порядок, в котором выполняются функции, связанные с конкретным действием.
* $accepted_args — указывает количество аргументов, которые принимает функция.
*/
add_filter( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 )

Использование

add_filter( 'hook_name', 'custom_hook_name' );
function custom_hook_name( $num_sections ){
    return $num_sections;
}

На самом деле, тип значения аргумента может быть любой и есть и другие способы передачи аргументов

// Передача статического класса:
add_filter( 'media_upload_newtab', array( 'My_Class', 'media_upload_callback' ) );
// Передача сущности
add_filter( 'media_upload_newtab', array( $this, 'media_upload_callback' ) );
// Передача анонимной функции:
add_filter( 'the_title', function( $title ) { return '<strong>' . $title . '</strong>'; } );

Использование метода apply_filter()

Эта функция вызывает все функции, прикрепленные к хуку фильтра $hook_name. Можно создать новые хуки-фильтры, просто вызвав эту функцию, указав имя нового хука с помощью параметра $hook_name

Общий вид

/**
* Принимаемые параметры
* $hook_name — название хука фильтра.
* $value — значение хука фильтра.
* $args — дополнительные параметры для передачи в функцию обратного вызова.
*/
apply_filters( string $hook_name, mixed $value [$args, ...] )

Пожалуйста, оцените материал

Хуки в WordPress