Хуки: понятие, виды, примеры

Опубликовано: 01.09.2018

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

Скачать исходники для статьи можно ниже

Понятие хуки.

Хуки (от анг. слова hook — крючок, зацепка)  — это созданные пользователями функции (то есть нами) , которые привязываются к функциям WordPress (заложены в самом коде движка WordPress) . То есть при каждом выполнении функции движка будет проверяться — не привязана ли к этой функции какая-нибудь пользовательская функция и если таковая есть, то одновременно с функцией движка будет выполнена пользовательская функция.

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

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

Хуки записываются в файл functions.php . Этот файл находится в директории wp-content/themes/yourtheme (где /yourtheme – директория, в которой находится текущая тема).

Пример хука:

Вы наверное замечали, что редактор записей (или редактор страничек) WordPress при вставке в него текста делает мелкие изменения в форматировании поста, вставляет в него теги, изменяет кавочки «прямые» на «кривые» и прочее.

Чтобы устранить данную проблему иногда пользуются хуком. Для этого в файл functions.php прописывают код:

function my_formatter($content) { $new_content = ''; $pattern_full = '{(\[raw\].*?\[/raw\])}is'; $pattern_contents = '{\[raw\](.*?)\[/raw\]}is'; $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);foreach ($pieces as $piece) { if (preg_match($pattern_contents, $piece, $matches)) { $new_content .= $matches[1]; } else { $new_content .= wptexturize(wpautop($piece)); } } return $new_content; } remove_filter('the_content', 'wpautop'); remove_filter('the_content', 'wptexturize'); add_filter('the_content', 'my_formatter', 99);

Этим кодом мы создаем некую новую пользовательскую функцию my_formatter().

Далее, мы привязываем нашу пользовательскую функцию my_formatter() к функции ядра WordPress, а именно к функции  the_content(), что означает выполнение нашей функции всякий раз, когда вызывается функция the_content().

Так же в этом коде мы создали тег [raw], для того, чтобы выделить текст поста, который не нужно форматировать автоматически.

Соответственно использовать вышеуказанный хука нужно следующим образом (в ниже приведенном коде в слове raw буква «а» русская, так как мой плагин вывода кода не отобразит тег raw, поэтому не копируйте данный код, а пишите его ручками):

[rаw] Этот текст не отформатирован [/rаw]

Виды хуков.

Все хуки в WordPress делятся на две категории — Фильтры и Действия. (filters и actions соответственно).

Фильтры (filters) предназначены для «фильтрования» (изменения) любых данных перед тем как они будут выведены на странице или добавлены для хранения в базу данных. Это фильтрация спама, ошибок или просто ошибочного ввода в формах, откуда собственно и произошло английское название.

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

Лучшие хуки.

Не забываем, что Хуки записываются в файл functions.php . Для того, чтобы открыть данный файл необходимо в панели управления вашим сайтом в левом меню выбрать пункт «Внешний вид», далее подпункт «Редактор», далее справа в шаблонах находим данный файл «Функции темы» ( functions.php) и нажимаем на него. Желательно в открывшемся файле переходить в его конец, где мы увидим тег ?>, вот перед ним и вставляйте код вашего хука.

http://codex.wordpress.org/Plugin_API/Action_Reference — здесь вы можете найти описание всех существующих хуков. [spoiler title=»1.Хук преобразования ссылки в текст в комментариях.» open=»0″ style=»1″]

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

Для этого добавляем в function.php следующий код.

function strip_tags_filter($text) { return strip_tags($text); } add_filter('pre_comment_content','strip_tags_filter'); add_filter('comment_excerpt','strip_tags_filter'); add_filter('comment_text','strip_tags_filter'); add_filter('comment_text_rss','strip_tags_filter'); [/spoiler] [spoiler title=»2. Хук отключения использование HTML тегов в комментариях» open=»0″ style=»1″]

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

После использования данного хука в комментариях на сайте останется только текст.

function strip_tags_filter($text) { return strip_tags($text); } add_filter('pre_comment_content','strip_tags_filter'); add_filter('comment_excerpt','strip_tags_filter'); add_filter('comment_text','strip_tags_filter'); add_filter('comment_text_rss','strip_tags_filter'); [/spoiler] [spoiler title=»3. Хук отключения автосохранения поста» open=»0″ style=»1″] function disableAutoSave(){ wp_deregister_script('autosave'); } add_action( 'wp_print_scripts', 'disableAutoSave' ); [/spoiler] [spoiler title=»4. Добавляем ссылкам rel=nofollow» open=»0″ style=»1″] function nofollowlinks( $links ) { foreach($links as $link) { $link->link_rel .= ' nofollow'; $link->link_rel = trim($link->link_rel); } return $links; } add_filter('get_bookmarks', 'nofollowlinks'); [/spoiler] [spoiler title=»5. Запрещаем деактивацию и изменение плагинов» open=»0″ style=»1″] add_filter( 'plugin_action_links', 'slt_lock_plugins', 10, 4 ); function slt_lock_plugins( $actions, $plugin_file, $plugin_data, $context ) { // Удаляем "Изменить" if ( array_key_exists( 'edit', $actions ) ) unset( $actions['edit'] ); // Удаляем деактивацию if ( array_key_exists( 'deactivate', $actions ) && in_array( $plugin_file, array( 'slt-custom-fields/slt-custom-fields.php', 'slt-file-select/slt-file-select.php', 'slt-simple-events/slt-simple-events.php', 'slt-widgets/slt-widgets.php' ))) unset( $actions['deactivate'] ); return $actions; } [/spoiler]

Ссылки с полезными хуками:

http://blog.aaa-nan.info/2009/08/10-wordpress.html?m=1

http://gering111.com/15-hakov-wordpress/

PS:Хуки в отличие от хаков, хранятся в файле functions.php вашего шаблона и сохраняются при апдейте WordPress на новую версию.

Про хаки напишу в следующей статье.

rss