WordPress: хуки действий (actions)

· WordPress, Разработка плагинов и Хуки · 2 мин чтения

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

Добавление действия

Процесс добавления действия состоит из двух этапов.

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

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

Пример ниже вызовет функцию bologer_custom() при запуске хука init:

<?php
function bologer_custom()
{
    // какой-то код
}
add_action('init', 'bologer_custom');

Если вам интересуют другие хуки, то вы можете пройтись по полному списку всех доступных хуков.

Как у вас будет появляться больше опыта в разработке под WordPress, смотря код WordPress вы сможете сами находить подходящие вам хуки.

Дополнительные параметры

Функция add_action() может принимать дополнительные параметры — $priority (приоритет) и $accepted_args для указания количества аргументов, которое может пускаться в callback функцию.

Приоритетность

Приоритетность определяет порядок вызова callback функций, которые связаны с хуком.

Функцию с приоритетом 11, будет вызвана после функции, у которой приоритет стоит 10; и функция с приоритетом 9 будет вызвана до 10-й. Вы можете написать любое число выше нуля, по умолчанию стоит 10.

Если зарегистрированы две callback функции с одинаковыми приоритетами, тогда они будут запускаться в порядке самого ближнего к хуку.

Например, следующие callback функции зарегистрированы к одному и тому же хуку, но с разными приоритетами:

<?php
add_action('init', 'zapuskay_menya_rano', 9);
add_action('init', 'zapuskay_menya_kak_obichno');    // по умолчанию стоит 10 и тем самым указывать это не нужно
add_action('init', 'zapuskay_menya_poslednim', 11);

Функция zapuskay_menya_rano() будет вызвана самой первой, далее zapuskay_menya_kak_obichno() и в самом конце zapuskay_menya_poslednim().

Количество аргументов

Иногда требуется отправить дополнительную информацию в callback функцию.

Например, когда WordPress сохраняет запись, то запускается хук save_post. Сам по себе, он отправляет два аргумента в callback функцию: ID сохраняемой записи и её объект:

do_action('save_post', $post->ID, $post);

Тем самым, когда вы вызываете callback функцию для хука save_post, вам нужно указать, что она будет принимать два аргумента:

add_action('save_post', 'bologer_custom', 10, 2);

И затем вы можете дописать эти аргументы для функции:

function bologer_custom($post_id, $post)
{
    // ваш код функции
}

Пример

Если вам нужно изменить поисковый запрос до вывода записей в цикл, вы можете это сделать используя хук pre_get_posts.

<?php
function bologer_search($query)
{
    if (!is_admin() && $query->is_main_query() && $query->is_search) {
        $query->set('post_type', ['post', 'movie']);
    }
}
add_action('pre_get_posts', 'bologer_search');