add_action()

Добавляет функцию обратного вызова к хуку действия
Функция WordPress
INT 1.2.0
WordPress Icon

Описание функции

Функция add_action() добавляет обратный вызов (callback) функции к указанному хуку (hook) действия (action).

Хуки (hooks) в WordPress представляют собой места в коде, где можно вставить свой собственный код или функцию для выполнения определенных действий. Хуки используются для расширения функциональности WordPress и позволяют разработчикам вмешиваться в процесс обработки запросов и вывода контента.

Функция add_action() позволяет добавить свою функцию обратного вызова к определенному хуку действия. Когда хук действия срабатывает, все функции обратного вызова, добавленные к этому хуку, будут выполнены в указанном порядке.

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

add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 ): true;

В данном примере кода используется функция add_action() с указанными параметрами. Она добавляет функцию обратного вызова $callback к хуку действия $hook_name с заданным приоритетом $priority и количеством принимаемых аргументов $accepted_args. Функция всегда возвращает значение true.

  • $hook_name (string) — Обязательный. Название хука действия, к которому нужно добавить функцию обратного вызова.
  • $callback (callable) — Обязательный. Функция обратного вызова, которая будет выполнена при срабатывании хука действия.
  • $priority (int) — Необязательный. Используется для указания порядка выполнения функций, связанных с определенным хуком. Чем меньше число, тем раньше будет выполнена функция. Функции с одинаковым приоритетом выполняются в порядке их добавления к хуку. По умолчанию: 10.
  • $accepted_args (int) — Необязательный. Количество аргументов, которые принимает функция обратного вызова. По умолчанию: 1.

Функция всегда возвращает значение true.

<?php
/**
 * Функция обратного вызова для хука 'wp_footer'
 *
 * @param int $arg1 Первый аргумент.
 * @param string $arg2 Второй аргумент.
 */
function my_custom_function( $arg1, $arg2 ) {
    // Выполнение пользовательского кода
    // ...
}
add_action( 'wp_footer', 'my_custom_function', 10, 2 );
?>

В данном примере кода используется функция add_action() для добавления функции обратного вызова my_custom_function() к хуку действия wp_footer с приоритетом 10 и двумя аргументами. Когда хук wp_footer срабатывает, функция my_custom_function() будет выполнена, принимая два аргумента.

Примеры использования

Добавление действия при загрузке страницы


/**
 * Функция, которая будет вызвана при загрузке страницы
 */
function my_custom_function() {
    // Ваш код
}
// Добавление функции в качестве действия при загрузке страницы
add_action( 'init', 'my_custom_function' );

В данном примере функция my_custom_function() будет вызвана при загрузке страницы. Для этого используется хук init, который срабатывает на этапе инициализации WordPress.

Изменение порядка выполнения функций


/**
 * Функция, которая будет вызвана первой
 */
function my_custom_function_1() {
    // Ваш код
}
/**
 * Функция, которая будет вызвана второй
 */
function my_custom_function_2() {
    // Ваш код
}
// Добавление функций в качестве действия с разными приоритетами
add_action( 'init', 'my_custom_function_1', 5 );
add_action( 'init', 'my_custom_function_2', 10 );

В данном примере функции my_custom_function_1() и my_custom_function_2() будут вызваны при загрузке страницы, но с разными приоритетами. Функция с меньшим числовым значением приоритета будет вызвана раньше.

Передача дополнительных аргументов в функцию


/**
 * Функция, которая принимает дополнительные аргументы
 */
function my_custom_function( $arg1, $arg2 ) {
    // Ваш код
}
// Добавление функции с передачей дополнительных аргументов
add_action( 'init', 'my_custom_function', 10, 2 );

В данном примере функция my_custom_function() принимает два дополнительных аргумента $arg1 и $arg2. При добавлении функции в качестве действия, указывается третий параметр 2, который указывает, что функция ожидает два аргумента.

Создание действия с высоким приоритетом


/**
 * Функция, которая будет вызвана с высоким приоритетом
 */
function my_custom_function() {
    // Ваш код
}
// Добавление функции с высоким приоритетом
add_action( 'init', 'my_custom_function', 1 );

В данном примере функция my_custom_function() будет вызвана при загрузке страницы с высоким приоритетом. Приоритет 1 гарантирует, что функция будет вызвана одной из первых.

Использование функции add_action() в плагинах


/**
 * Функция, которая будет вызвана при активации плагина
 */
function my_custom_function() {
    // Ваш код
}
// Добавление функции в качестве действия при активации плагина
register_activation_hook( __FILE__, 'my_custom_function' );

В данном примере функция my_custom_function() будет вызвана при активации плагина. Для этого используется функция register_activation_hook(), которая регистрирует функцию в качестве действия при активации плагина.

Вопросы и ответы

Как добавить функцию в хук?

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

Пример использования:


function my_custom_function() {
    // код функции
}
add_action( 'my_custom_hook', 'my_custom_function' );

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

Для изменения порядка выполнения функций, связанных с хуком, используется параметр $priority функции add_action(). Чем меньше значение приоритета, тем раньше будет выполнена функция.

Пример использования:


function my_custom_function1() {
    // код функции 1
}
function my_custom_function2() {
    // код функции 2
}
add_action( 'my_custom_hook', 'my_custom_function1', 20 );
add_action( 'my_custom_hook', 'my_custom_function2', 10 );

Как указать количество аргументов, принимаемых функцией?

Для указания количества аргументов, принимаемых функцией, используется параметр $accepted_args функции add_action(). По умолчанию функция принимает один аргумент.

Пример использования:


function my_custom_function( $arg1, $arg2 ) {
    // код функции
}
add_action( 'my_custom_hook', 'my_custom_function', 10, 2 );

Как удалить функцию из хука?

Для удаления функции из хука используется функция remove_action(). Она принимает те же параметры, что и функция add_action().

Пример использования:


function my_custom_function() {
    // код функции
}
add_action( 'my_custom_hook', 'my_custom_function' );
// Удаление функции из хука
remove_action( 'my_custom_hook', 'my_custom_function' );

Как проверить, существует ли функция в хуке?

Для проверки существования функции в хуке можно использовать функцию has_action(). Она принимает два параметра: название хука и название функции. Если функция зарегистрирована для данного хука, то функция вернет true, в противном случае — false.


if ( has_action( 'my_custom_hook', 'my_custom_function' ) ) {
    echo 'Функция my_custom_function зарегистрирована для хука my_custom_hook';
} else {
    echo 'Функция my_custom_function не зарегистрирована для хука my_custom_hook';
}

Как использовать приоритет для выполнения функций в хуке?

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


add_action( 'my_custom_hook', 'my_custom_function', 5 );

В данном примере функция my_custom_function будет выполнена раньше, чем другие функции, зарегистрированные для хука my_custom_hook.

Как использовать хук только на определенных страницах или шаблонах?

Для использования хука только на определенных страницах или шаблонах можно использовать функцию is_page() или is_page_template(). Функция is_page() принимает параметр — идентификатор страницы или массив идентификаторов. Функция is_page_template() принимает параметр — название шаблона страницы.


if ( is_page( 42 ) ) {
    add_action( 'my_custom_hook', 'my_custom_function' );
}

В данном примере функция my_custom_function будет выполнена только на странице с идентификатором 42.

Как использовать хук только для определенных пользовательских ролей?

Для использования хука только для определенных пользовательских ролей можно использовать функцию current_user_can(). Она принимает параметр — название роли и возвращает true, если текущий пользователь имеет указанную роль, и false в противном случае.


if ( current_user_can( 'editor' ) ) {
    add_action( 'my_custom_hook', 'my_custom_function' );
}

В данном примере функция my_custom_function будет выполнена только для пользователей с ролью «Редактор».

Функция add_action() является одной из основных функций WordPress для регистрации функций, которые должны быть выполнены при определенных событиях. Она позволяет добавлять функции в хуки, управлять их порядком выполнения с помощью приоритета, а также использовать хуки только на определенных страницах, шаблонах или для определенных пользовательских ролей. Это мощный инструмент, который позволяет разработчикам создавать гибкие и расширяемые темы и плагины для WordPress.

Связанные элементы

  • Функция do_action(): вызывает все функции, привязанные к указанному хуку.
  • Функция has_action(): проверяет, есть ли функции, привязанные к указанному хуку.
  • Функция remove_action(): удаляет функцию из указанного хука.
  • Функция did_action(): проверяет, был ли вызван указанный хук.
  • Хук init: вызывается при инициализации WordPress и используется для регистрации функций и хуков.
  • Хук wp_head: вызывается внутри тега <head> на каждой странице и позволяет добавлять дополнительные элементы в заголовок страницы.
  • Хук wp_footer: вызывается перед закрывающим тегом </body> на каждой странице и позволяет добавлять дополнительные элементы в конец страницы.
  • Хук admin_init: вызывается при инициализации административной части WordPress и используется для регистрации функций и хуков, специфичных для административной части.
  • Хук wp_enqueue_scripts: вызывается при загрузке скриптов и стилей на фронтенде WordPress и позволяет добавлять или изменять загружаемые ресурсы.
  • Класс WP_Hook: представляет собой контейнер для хуков и функций, привязанных к ним.
Обсуждение