Хуки (hook) в WordPress и все о них

Здесь я расскажу про само понятие хуки в 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 на новую версию.

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

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

Хуки (hook) в WordPress и все о них: 2 комментария

Добавить комментарий для Юрий Отменить ответ