50 фильтров WordPress: фильтры с 41 по 50
В предыдущих частях этой серии статей мы изучили 40 WordPress фильтров. В этом уроке мы рассмотрим последние десять фильтров и приведем примеры их практического применения.
Приступим!
- Настраиваем загрузчик скриптов
- Добавляем HTML в мета – бокс к заглавным изображениям в публикации
- Защищаем блог от флуда в комментариях comment_flood_filter
- Меняем элементы раздела «Краткая информация»
- Меняем приветствие на форме входа
- Редактируем текст сообщений о результатах действий
- Настраиваем виджет категорий по умолчанию
- Перенаправление пользователя после успешной регистрации
- Изменяем поля формы для ввода комментария
- Вносим изменения в список допустимых типов файлов
- Конец пятой части
Настраиваем загрузчик скриптов
В WordPress есть свой загрузчик скриптов wp_enqueue_script(), который позволяет поочередно обрабатывать файлы с JavaScript и не нагружать систему. Фильтр script_loader_src дает возможность настроить загрузку скриптов и их вывод.
Пример: убираем параметр «Версия» из скрипта
Google Page Speed, Yahoo YSlow и другие сервисы для измерения быстродействия сайтов обычно не очень хорошо относятся к наличию URL – параметров в файлах JavaScript. В этом есть своя доля истины.
Скрипты с параметрами в конце URL – строки не кэшируются прокси-серверами (дополнительная информация по этой теме).
К сожалению, в WordPress параметр «Version» для скриптов (и для стилей) по умолчанию активирован. Но, к счастью, с помощью кода, приведенного ниже, мы можем отключить параметр ver:
<?php
function script_loader_src_example( $src ) {
return remove_query_arg( 'ver', $src );
}
add_filter( 'script_loader_src', 'script_loader_src_example' );
// маленький бонус: использовать можно в том числе и для стилей
add_filter( 'style_loader_src', 'script_loader_src_example' );
// Источник примера: http://www.wpmayor.com/15-practical-ways-boost-wordpress-speed/
?>
Готово! Файлы ваших Java – скриптов (и CSS – стилей) более не имеют такого параметра, как «Version».
Хорошая статья на тему использования языка JavaScript в WordPress.
Добавляем HTML в мета – бокс к заглавным изображениям в публикации
Фильтр admin_post_thumbnail_html, как предполагает его название, позволяет добавлять HTML – содержимое в мета – бокс заглавного изображения публикации. HTML – код будет отображен сразу после ссылки «Установить изображение как картинку поста».
Пример: как облегчить пользователям процесс добавления изображений к публикации
Представьте, что вы делаете блог для клиента. Вести блог он собирается самостоятельно и к сторонней помощи прибегать не намерен. Но он постоянно забывает добавлять изображения к публикации и вам нужно прибавить напоминание на страницу добавления новой публикации. Ниже приведен пример кода, с помощью которого можно это реализовать:
<?php
add_filter( 'admin_post_thumbnail_html', 'admin_post_thumbnail_html_example' );
function admin_post_thumbnail_html_example( $html ) {
return $html .= '<p> Уважаемый пользователь! Нажмите выше, чтобы добавить изображение, которое будет отображаться в верхней части вашей публикации. Помните: <strong> Ширина изображения должна быть не менее 900 пикселей </strong>!</p>';
}
?>
С помощью такого напоминания ваш клиент не забудет установить «верхнее изображение» с минимальной шириной 900 пикселей.
Защищаем блог от флуда в комментариях comment_flood_filter
По умолчанию, WordPress предотвращает действия "флудеров", которые неоднократно оставляют комментарии к вашим публикациям.
Например, если посетитель отправляет комментарий к записи, то после этого действия должно пройти 15 секунд (значение по умолчанию), прежде чем он сможет оставить еще один комментарий. Этот фильтр позволяет изменять настройки времени или отключить проверку вообще.
Пример: увеличиваем задержку между комментариями
Как было сказано, WordPress устанавливает промежуток в 15 секунд для комментирующего. В некоторых случаях вам может понадобиться увеличить эту паузу. Приведенный ниже код показывает, как это сделать:
<?php
add_filter( 'comment_flood_filter', 'comment_flood_filter_example', 10, 3 );
function comment_flood_filter_example( $flood_control, $time_last, $time_new ) {
$seconds = 60;
if ( ( $time_new - $time_last ) < $seconds )
return true;
return false;
}
// Исходный пример: http://codex.wordpress.org/FAQ_Working_with_WordPress#How_do_I_prevent_comment_flooding.3F
?>
Значение "60" меняйте на необходимое в вашем случае.
Бонусный пример: отключаем проверку на флуд в комментариях
Если вам не нужно регулировать скорость комментирования публикаций, вы можете отключить проверку на флуд с помощью двух простых строчек кода:
<?php
remove_all_filters( 'comment_flood_filter' );
add_filter( 'comment_flood_filter', '__return_false', 10, 3 );
?>
Имейте в виду, что remove_all_filters() является функцией. Как и предполагает ее название, она убирает все возможные проверки из фильтра.
Меняем элементы раздела «Краткая информация»
Раздел «Краткая информация» (ранее он назывался «Прямо сейчас») держит нас в курсе того, как много записей страниц и комментариев размещено в базе данных сайта.
Фильтр dashboard_glance_items поможет отобразить дополнительную информацию, такую как число публикаций в определенной категории.
Пример: отображаем публикации рубрики «Events» в разделе «Краткая информация»
Представим, что вы ведете "событийный блог" где знакомите ваших посетителей с интересными событиями, а категория публикаций имеет пользовательский тип «Events» (и id равно event). Для того чтобы у вас была возможность видеть общее количество событий в блоге – используйте функцию из кода, приведенного ниже и прикрепляйте ее к фильтру dashboard_glance_items:
<?php
add_filter( 'dashboard_glance_items', 'dashboard_glance_items_example' );
function dashboard_glance_items_example( $items = array() ) {
$post_types = array( 'event' );
foreach( $post_types as $type ) {
if( ! post_type_exists( $type ) ) continue;
$num_posts = wp_count_posts( $type );
if( $num_posts ) {
$published = intval( $num_posts->publish );
$post_type = get_post_type_object( $type );
$text = _n( '%s ' . $post_type->labels->singular_name, '%s ' . $post_type->labels->name, $published, 'your_textdomain' );
$text = sprintf( $text, number_format_i18n( $published ) );
if ( current_user_can( $post_type->cap->edit_posts ) ) {
$output = '<a href="edit.php?post_type=' . $post_type->name . '">' . $text . '</a>';
echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
} else {
$output = '<span>' . $text . '</span>';
echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
}
}
}
return $items;
}
// Источник примера: http://www.trickspanda.com/2014/03/add-custom-post-types-glance-dashboard-widget-wordpress/
?>
Довольно просто, верно? Значение переменной $post_types меняйте в соответствии со своими требованиями.
Меняем приветствие на форме входа
Фильтр login_message позволяет менять сообщение на форме входа, установленное по умолчанию. Это сообщение выводится над формой для ввода данных для авторизации. Это не сообщение об ошибках, оно несет в себе информационные данные.
Пример: меняем сообщение "Забыли пароль?"
Если вам когда-нибудь понадобится упростить инструкцию по восстановлению пароля («Пожалуйста, введите ваш логин или адрес электронной почты, и Вы получите ссылку для создания нового пароля»), то ее можно изменить следующим образом:
<?php
add_filter( 'login_message', 'login_message_example' );
function login_message_example( $message ) {
$action = $_REQUEST['action'];
if( $action == 'lostpassword' ) {
$message = '<p class="message">
Введите адрес вашей электронной почты, и мы отправим вам письмо
cо ссылкой для сброса пароля</p>';
return $message;
}
return;
}
// Источник примера: http://www.pypelineweb.com/blog/change-wordpress-login-message-filter-it-out/
?>
В файле wp-login.php мы видим следующие элементы:
- logout;
- lostpassword и retreivepassword (алиас);
- resetpass и rp (алиас);
- register;
- login.
По аналогии с примером, приведенным выше, можете написать сообщение для любого action.
Редактируем текст сообщений о результатах действий
Есть сообщения, которые отображаются при обновлении, удалении в корзину, восстановлении или удалении записей. Если вам нужно изменить эти сообщения – используйте фильтр bulk_post_updated_messages.
Пример: редактируем сообщения для публикаций пользовательского типа
Скажем, вам не нравится текст сообщений, которые пользователь видит после публикации «событий», и, вы хотите изменить их. Вот как это делается:
<?php
add_filter( 'bulk_post_updated_messages', 'bulk_post_updated_messages_example', 10, 2 );
function bulk_post_updated_messages_example( $bulk_messages, $bulk_counts ) {
$bulk_messages['event'] = array(
'updated' => _n( '%s событие обновлено.', '%s события обновлены.', $bulk_counts['updated'] ),
'locked' => _n( '%s событие не обновлено, его кто-то редактирует.',
'%s события не обновлены, их кто-то редактирует.', $bulk_counts['locked'] ),
'deleted' => _n( '%s событие навсегда удалено.', '%s события навсегда удалены.', $bulk_counts['deleted'] ),
'trashed' => _n( '%s событие перенесено в Корзину.', '%s события перенесены в Корзину.', $bulk_counts['trashed'] ),
'untrashed' => _n( '%s событие восстановлено из Корзины.', '%s события восстановлены из Корзины. ', $bulk_counts['untrashed'] ),
);
return $bulk_messages;
}
// Источник примера: http://codex.wordpress.org/Plugin_API/Filter_Reference/bulk_post_updated_messages
?>
Просто? Довольно легко! Помните, что можно перевести строки сообщений, если вы используете несколько языков.
Настраиваем виджет категорий по умолчанию
В некоторых случаях вам потребуется внести изменения в ядро виджета категорий. Используйте для этого фильтр widget_categories_args.
Пример: исключаем некоторые категории из виджета
Если требуется «скрыть» некоторые категории из виджета «Категории», примените код, приведенный ниже:
<?php
add_filter( 'widget_categories_args', 'widget_categories_args_example' );
function widget_categories_args_example( $cat_args ) {
$exclude_arr = array( 4, 10 );
if( isset( $cat_args['exclude'] ) && !empty( $cat_args['exclude'] ) )
$exclude_arr = array_unique( array_merge( explode( ',', $cat_args['exclude'] ), $exclude_arr ) );
$cat_args['exclude'] = implode( ',', $exclude_arr );
return $cat_args;
}
// Источник примера: http://codex.wordpress.org/Plugin_API/Filter_Reference/widget_categories_args
?>
Значения массива $exclude_arr содержат в себе ID "ненужных" категорий. Меняйте их соответственно вашей необходимости.
Перенаправление пользователя после успешной регистрации
По умолчанию, после регистрации, WordPress просто напоминает о необходимости проверить ваш электронный почтовый ящик, но при этом блокирует переход на другие страницы. С помощью фильтра registration_redirect вы можете установить пользовательский безопасный адрес для перенаправления после успешной регистрации.
Пример: позволим новым пользователям скачать вашу удивительную электронную книгу
Если вы предлагаете бесплатную электронную книгу вашим посетителям, когда они регистрируются у вас на сайте, вы можете перенаправить их на страницу со ссылкой для загрузки электронной книги с помощью этого простого кода:
<?php
add_filter( 'registration_redirect', 'registration_redirect_example' );
function registration_redirect_example() {
return home_url('/your-free-ebook/');
}
// Источник примера: http://wpsnipp.com/index.php/functions-php/redirect-a-successful-registration-page/
?>
Напомню, что редирект, настроенный с помощью функции wp_safe_redirect() позволит перенаправить пользователя только на внутренние страницы сайта, пока вы с помощью фильтра allowed_redirect_hosts не определите "безопасные" хосты. Мы рассмотрели этот фильтр в первой статье. Прочитайте ее, если еще не сделали этого.
Изменяем поля формы для ввода комментария
В WordPress есть функция comment_form(), которая отображает форму для комментирования, и, поля этой формы можно настраивать, используя аргументы функции.
Если вы разрабатываете плагин, то не сможете менять ее параметры. Фильтр, пример использования которого приведен ниже, позволяет редактировать или вовсе удалить HTML – код полей формы комментариев.
Пример: убираем поле URL из формы комментирования
Допустим, вы, как внештатный веб-дизайнер, делаете "плагин настроек по умолчанию", чтобы использовать его на сайтах ваших клиентов и хотите, чтобы полей с вводом URL не было в формах комментариев. Для этого используйте функцию из примера, приведенного ниже, и подключайте ее к фильтру:
<?php
add_filter( 'comment_form_default_fields', 'comment_form_default_fields_example' );
function comment_form_default_fields_example( $fields ) {
unset( $fields['url'] );
return $fields;
}
// Источник примера: http://wpsnipp.com/index.php/comment/remove-unset-url-field-from-comment-form/
?>
Добавляйте этот код в файл плагина и цель достигнута!
Вносим изменения в список допустимых типов файлов
По умолчанию в WordPress установлен определенный набор типов файлов, которые можно загружать в медиа - библиотеку. С помощью фильтра upload_mime вы можете вносить изменения в этот список.
Пример: запрещаем загружать GIF - файлы
Да, да, GIF. Этот формат стал популярен в 1999 году и остается популярным по сей день. Знаете ли вы, что одним из первых мемов был GIF с танцующим ребенком?
Старые добрые временя, когда мы делали «домашние страницы» в Yahoo! Geocities и наслаждались раздражающим звуком обезьяны из ICQ каждый раз когда друг приглашал нас на встречу IMed.
Хорошо, но, так или иначе, если вам понадобится запретить закачку GIF – файлов в медиа - библиотеку вашего сайта, делайте это с помощью кода, приведенного ниже:
<?php
add_filter( 'upload_mimes', 'upload_mimes_example' );
function upload_mimes_example( $existing_mimes = array() ) {
unset( $existing_mimes['gif'] );
return $existing_mimes;
}
// Источник примера: http://codex.wordpress.org/Plugin_API/Filter_Reference/upload_mimes
?>
Пока-пока, четырех секундный видеоклип, который не стоит смотреть более чем один раз, но он не устает повторяться бесконечно!
Конец пятой части
Мы подошли к концу последнего десятка фильтров. Надеюсь, вам понравилось, и вы узнали что-то новое. В следующей, заключительной статье, мы вкратце просмотрим все то, что изучили. Увидимся!
Мне интересны ваши мысли по поводу того, что нового вы узнали. Оставляйте ваши комментарии, если вам действительно понравилась статья и, не стесняйтесь поделиться ею!