Статьи

Пятьдесят действий WordPress — Введение

Причиной того, что WordPress является самой популярной системой управления контентом в мире, является ее гибкость. Прекрасно простая структура «крючков» дает WordPress эту возможность. Без хуков фильтров и хуков действий WordPress не был бы настолько расширяемым, и у нас не было бы такого большого спектра плагинов или тем WordPress.

В этой серии мы рассмотрим действия, один из двух видов хуков WordPress. В течение серии мы рассмотрим практически все, что нужно знать о действиях:

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

Это будет длинная, невероятная поездка. Пристегнитесь!

В Кодексе действия определяются следующим образом:

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

Таким образом, по сути, действия — это функции, запускаемые событием 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
}
 
?>

Почти слишком легко, правда?

У нас есть две функции для удаления функций из хуков действий: 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 , поскольку удаляет все функции, подключенные к действию.

Если вы разрабатываете плагины или темы 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() имеет только один параметр: имя хука действия.

Теперь мы рассмотрели почти все, что касается создания и использования действий, и мы можем продолжить путешествие из пяти статей. Мы рассмотрим только пятьдесят из них, но если вам интересно, вы можете найти еще сотни в ядре.

Я надеюсь, что вам понравится этот сериал так же, как и я, создавая все это. Если вы думаете, что можете помочь мне с учебниками, предложив больше действий и попросив больше примеров, не стесняйтесь рассказать мне и поделиться своими мыслями, комментируя ниже. И если вам понравилось то, что вы прочитали в этой серии, не забудьте поделиться статьями!

Увидимся в следующем уроке!