Причиной того, что 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()
имеет только один параметр: имя хука действия.
Вывод
Теперь мы рассмотрели почти все, что касается создания и использования действий, и мы можем продолжить путешествие из пяти статей. Мы рассмотрим только пятьдесят из них, но если вам интересно, вы можете найти еще сотни в ядре.
Я надеюсь, что вам понравится этот сериал так же, как и я, создавая все это. Если вы думаете, что можете помочь мне с учебниками, предложив больше действий и попросив больше примеров, не стесняйтесь рассказать мне и поделиться своими мыслями, комментируя ниже. И если вам понравилось то, что вы прочитали в этой серии, не забудьте поделиться статьями!
Увидимся в следующем уроке!