Если вы являетесь давним разработчиком WordPress, вы наверняка уже сталкивались с этими двумя инструментами (иногда, я бы сказал, незаменимыми).

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

В этом посте я постараюсь как можно яснее объяснить, что это за два инструмента и в чем разница между ними.

Что такое действия и фильтры в WordPress?

Action и Filter - это два так называемых «крючка».

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

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

Не рекомендуется по двум основным причинам:

  • Безопасность: напрямую изменяя файлы, которые поддерживают работу WordPress, мы неизбежно повлияем на безопасность всей системы, сделав ее нестабильной и небезопасной.
  • Обновления: WordPress регулярно обновляется. Если мы изменим файлы ядра, после обновления наши изменения будут перезаписаны самим обновлением.

По этим причинам WordPress сам дает нам возможность изменять и / или добавлять функциональные возможности в ядро, но без нашего вмешательства. И это возможно с помощью действия и фильтра Хуки.

Хуки обычно добавляются в файл functions.php, но также могут использоваться, например, в подключаемом модуле.

Разница между действием и фильтром

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

Давайте углубимся в детали и приведем несколько примеров:

Действие

Действие - это ловушка, которую вы должны использовать, если хотите запустить какой-то код в определенное время.

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

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

add_action('publish_post','send_email_new_post'); function send_email_new_post() { $to = '[email protected]'; $subject = 'New Post!'; $message = 'A post was published!'; mail($to, $subject, $message); }

add_action позволяет нам указывать WordPress, что мы хотим сделать, в этом случае просто используйте действие перехвата. publish_post - это когда, то есть когда мы хотим, чтобы WordPress выполнял наш код, а send_email_new_post - это имя нашей функции для отправки почты.

Мы можем немного расширить add_action, добавив приоритет, который должна иметь функция, и количество аргументов, которые вы можете передать функции.

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

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

add_action('publish_post','send_email_new_post',5,1); function send_email_new_post($post_ID) { $to = '[email protected]'; $subject = get_post_field('post_title',$post_ID); $message = 'A post was published!'; mail($to, $subject, $message); }

Фильтр

Фильтр, с другой стороны, позволяет нам изменять переменные.

Допустим, вы хотите изменить содержание своих сообщений, добавив в конце текста что-то вроде «написано мной!».
(зачем вам вообще, но это всего лишь пример: D)

В этом случае нам не нужно выполнять какую-либо функцию, но мы должны изменить переменную, которой в данном случае является содержание сообщения.

Вот почему нам помогает фильтр-крючок. Что касается действий, давайте посмотрим на них на практике.

add_filter('the_content','add_my_string_to_content'); function 'add_my_string_to_content($content) { $content .= 'written by me!'; return $content; }

Как видите, в отличие от add_action, с add_filter мы сообщаем WordPress что изменить, а не когда выполнять функцию.

В этом случае мы говорим WordPress изменить содержимое сообщения, добавив нашу строку.

Так же, как add_action, вы можете добавить приоритет и количество аргументов к add_filter.

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

Фото Samuel Zeller на Unsplash

Первоначально опубликовано на https://dannyspina.com 6 сентября 2019 г.