Пишем Вордпрес плагин. часть 3. Фильтры
- 21 Апр 2011
Из Кодекса:
Фильтры – это функции, через которые 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 для события