Причиной того, что WordPress является самой популярной системой управления контентом в мире, является ее гибкость. Прекрасно простая структура «крючков» дает WordPress эту возможность. Без хуков фильтров и хуков действий WordPress не был бы настолько расширяемым, и у нас не было бы такого большого спектра плагинов или тем WordPress.
В этой серии мы рассмотрим действия, один из двух видов хуков WordPress. В течение серии мы рассмотрим практически все, что нужно знать о действиях:
- В первой части которая также является этой статьей, мы узнаем, что такое действия WordPress и как использовать действия с семью основными функциями.
 - В следующих пяти частях мы увидим колоссальный набор примеров действий WordPress. В каждой части мы собираемся выполнить 10 действий, изучая, для чего они хороши, и делая один пример для каждого действия.
 - В финале серии мы подведем итоги того, что мы узнали, и 50 примеров действий, которые мы сделали.
 
Это будет длинная, невероятная поездка. Пристегнитесь!
Что такое действие WordPress?
В Кодексе действия определяются следующим образом:
Действия инициируются определенными событиями, происходящими в WordPress, такими как публикация сообщения, смена тем или отображение экрана администрирования . Действие — это пользовательская функция PHP, определенная в вашем плагине (или теме) и подключенная , то есть настроенная реагировать на некоторые из этих событий.
Таким образом, по сути, действия — это функции, запускаемые событием WordPress и выполняемые до или после события. Действия — это один из двух видов «хуков» в WordPress — другой называется «фильтры», которые мы рассмотрели некоторое время назад, — посмотрите «Пятьдесят фильтров WordPress», если вы хотите узнать больше о фильтрах WordPress.
Использование действий в WordPress
Определение действий — это самая простая вещь, которую мы сделаем в этой серии. К счастью, научиться создавать и использовать действия почти так же просто. Давайте посмотрим, как мы привязываем функции к действиям, создаем новые действия, удаляем существующие и другие связанные с действиями функции в ядре WordPress.
Привязывание функции к действию
Вероятно, самая простая функция среди них — эта: она используется для привязки нашей функции к ловушке действия, которую мы собираемся использовать:
| 
 1 
2 
3 
4 
5 
 | 
 <?php 
add_action( $hook_name, $function_name, $priority, $arguments ); 
?> 
 | 
Давайте посмотрим, что означают эти параметры:
- 
 
$hook_name— это имя ловушки действий, которую мы будем использовать -   
$function_name— это имя нашей функции -   
$priority— целое число, которое мы указываем, чтобы указать, как рано функция будет запущена в хуке действия. -   
$arguments— это число аргументов, которые использует наша функция, а ловушка действия позволяет 
Давайте посмотрим на быстрый пример:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
 | 
 <?php 
add_action( ‘add_meta_boxes’, ‘my_function’, 10, 2 ); 
function my_function( $post_type, $post ) { 
    // do stuff with $post_type and $post 
} 
?> 
 | 
Почти слишком легко, правда?
Удаление функций из Action Hook
  У нас есть две функции для удаления функций из хуков действий: remove_action() и remove_all_actions() .  Давайте посмотрим, как мы их используем: 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
 | 
 <?php 
// remove_action( $hook_name, $function_name, $priority ); 
remove_action( ‘login_enqueue_scripts’, ‘some_function’, 10 ); 
// remove_all_actions( $hook_name, $priority 
remove_all_actions( ‘wp_enqueue_scripts’, 10 ); 
?> 
 | 
  Функция remove_action() имеет три параметра: имя ловушки, имя функции, которую мы собираемся удалить из ловушки, и приоритет, который был установлен при использовании add_action() .  Функция remove_all_actions() не имеет параметра $function_name , поскольку удаляет все функции, подключенные к действию. 
Создание Action Hook
  Если вы разрабатываете плагины или темы WordPress, рекомендуется создать некоторые хуки в вашем коде, чтобы другие разработчики могли расширить ваш плагин или тему.  Для этого у нас снова есть две функции: do_action() и do_action_ref_array() .  Давайте посмотрим, как работает первый: 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
 | 
 <?php 
do_action( $hook_name, $arg1, $arg2, /* … */ $argN ); 
/* 
 * Usage: 
 * 
 * add_action( hook_name, my_function ) 
 * 
 * function my_function( $arg1, $arg2 ) { 
 * // do stuff with $arg1, $arg2 and so on 
 * } 
 * 
 */ 
?> 
 | 
Как видите, функция имеет практически бесконечное количество параметров, поскольку вы можете определить столько аргументов, сколько вам нужно. Если вам нужно сохранить ваши аргументы в массиве, вам нужно использовать вторую функцию:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
 <?php 
$args = array( $arg1, $arg2, /* … */ $argN ); 
do_action_ref_array( $hook_name, $args ); 
/* 
 * Usage: 
 * 
 * add_action( hook_name, my_function ) 
 * 
 * function my_function( $args ) { 
 * // do stuff with $args[0], $args[1] and so on 
 * } 
 * 
 */ 
?> 
 | 
Получение количества срабатываний действия
Если вам когда-нибудь понадобится узнать, сколько раз вызывается действие, вы можете использовать эту удобную функцию для подсчета вызовов действия:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
 | 
 <?php 
function tuts_foo() { 
    $action_count = did_action( ‘some_action_name’ ); 
    if ( 1 === $action_count ) { 
        // run code if ‘some_action_name’ has been fired only once 
    } 
} 
?> 
 | 
Как видите, единственным параметром, который имеет функция, является имя хука действия.
Проверка, что-нибудь подключено к действию
Представьте, что вы разрабатываете расширение для популярного плагина WordPress, и вам нужно проверить, установил ли пользователь плагин или нет. (В конце концов, ваш плагин не будет работать, если другой не установлен и не активирован.)
  Чтобы проверить это, вы можете использовать has_action() чтобы убедиться, что действие популярного плагина доступно: 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
 | 
 <?php 
if( has_action( ‘some_popular_plugin_action’ ) { 
    add_action( ‘some_popular_plugin_action’, ‘extension_to_the_some_popular_plugin’ ); 
} else { 
    wp_die( ‘Sorry to kill your website but I need «Some Popular Plugin» to work with.’ ); 
    // CAUTION: This is a joke. 
} 
?> 
 | 
  Как и did_action() функция has_action() имеет только один параметр: имя хука действия. 
Вывод
Теперь мы рассмотрели почти все, что касается создания и использования действий, и мы можем продолжить путешествие из пяти статей. Мы рассмотрим только пятьдесят из них, но если вам интересно, вы можете найти еще сотни в ядре.
Я надеюсь, что вам понравится этот сериал так же, как и я, создавая все это. Если вы думаете, что можете помочь мне с учебниками, предложив больше действий и попросив больше примеров, не стесняйтесь рассказать мне и поделиться своими мыслями, комментируя ниже. И если вам понравилось то, что вы прочитали в этой серии, не забудьте поделиться статьями!
Увидимся в следующем уроке!