Если вы являетесь давним разработчиком 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 г.