Здесь я расскажу про само понятие хуки в 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 на новую версию.
Про хаки напишу в следующей статье.
День добрый! Спасибо за статью. Но подскажите ,не могу понять . К примеру в header вставляю хук зацепку в месте вывода
Х в продолжение ) А при обновлении темы теряется.Как быть