Пишем Вордпрес плагин. часть 3. Фильтры

  • 21 Апр 2011
thumbnail_plugin3

Из Кодекса:

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

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

add_filter( 'action_name', 'your_filter', [priority], [accepted_args] );

action_name
название события, результат которого (данные, текст) мы сможем обработать нашей функцией
your_filter
функция-обработчик которая принимает данные от ‘action_name’, и возвращает эти данные в измененном виде
priority
необязательный параметр, приоритет выполнения, по умолчанию 10, так как на одно событие может быть привязано несколько функций (например, в разных плагинах) то раньше выполнится тот в которого значения приоритет меньше, если значения одинаковы то тот кто раньше был привязан к событию (раньше выполнена функция add_filters() )
accepted_args
необязательный параметр, количество принимаемых аргументов для вашей функции, по умолчанию 1, но некоторые события могут передавать больше аргументов

Список событий (action_name): http://codex.wordpress.org/Plugin_API/Filter_Reference

Примеры фильтров

Создадим функцию-фильтр которая заменяет в комментариях запрещенные слова на {censored}.

<?php
function filter_profanity($content) {
  $profanities = array('badword','alsobad','...');
  $content = str_ireplace($profanities,'{censored}',$content);
  return $content;
}
add_filter('comment_text','filter_profanity');
?>

Функция удаляющая текст футера в админке

<?php
function remove_footer_admin() {
  return '';
}
add_filter('admin_footer_text', 'remove_footer_admin');
?>

Подключаем свои стили к редактору Вордпрес

<?php
function my_editor_style($url) {
  if ( !empty($url) )
    $url .= ',';
  $url .= get_bloginfo('url').'/wp-plugins/plugindir/editor-style.css';
  return $url;
}
add_filter('mce_css', 'my_editor_style');
?>

Функции для работы с фильтрами:

has_filter( 'action_name', 'function_to_check' );
- возвращает приоритет выполнения функции 'function_to_check'
для события 'action_name', либо false если такая функция не назначена
apply_filters(  'action_name', 'value' );
- выполнит функции-фильтры над данными 'value' назначенные
событию 'action_name', событие может быть стандартное из Вордпрес,
так и придуманное нами
current_filter();
- возвращает имя текущего события;
merge_filters( 'action_name' );
- так и не понял для чего нужна
remove_filter( 'action_name', 'function_name' );
- удалить функцию-фильтр 'function_name' для события 'action_name'
remove_all_filters( 'action_name', 'priority' );
- удалить все функции-фильтры с приоритетом $priority для события

Что вы думаете?

Имя обязательно

Сайт