50 фильтров WordPress: фильтры с 11 по 20
В предыдущей статье этой серии мы рассмотрели первые десять фильтров WordPress, сопровождая их примерами. В этом уроке мы продолжим обзор 50 выбранных нами для изучения фильтров, сопровождая их пояснениями и примерами работы каждого фильтра.
Продолжим!
- Эксперимент с переводом данных в WordPress
- Подчищаем текст
- Устанавливаем исключения форматирования для шорткодов
- Встроенный фильтр проверки комментариев
- Настраиваем возможность "Публикация с помощью email"
- Фильтр заголовков страниц
- Обработка комментариев перед сохранением в базе данных
- Настраиваем переадресацию после входа
- Создание ссылок в настройках плагинов
- Фильтрация контента внутри редактора сообщений
- Конец второй части
Эксперимент с переводом данных в WordPress
Одна из самых привлекательных особенностей WordPress - каждый бит текста готов для перевода. Если язык вашего сайта английский, по всей видимости, вам не нужна эта функция - или все - таки потребуется?
Фильтр gettext может оказаться полезным в нескольких случаях. Давайте рассмотрим интересный пример.
Пример: поправим грамматические ошибки предыдущего разработчика!
Предположим, вы нашли хороший плагин для работы, но понимаете, что его разработчик говорит по-английски не очень хорошо и замечаете текст с ошибками внутри кода. К счастью, эти строки переводимые и их можно изменить с помощью gettext.
Смотрим как именно:
<?php
add_filter( 'gettext', 'gettext_example', 20, 3 );
function gettext_example( $translated_text, $text, $domain ) {
switch ( $translated_text ) {
case 'E-meil Adress' :
$translated_text = __( 'Email Address', 'plugin_text_domain' );
break;
}
return $translated_text
}
// Источник примера http://speakinginbytes.com/2013/10/gettext-filter-wordpress/
?>
Подчищаем текст
WordPress использует функцию с именем sanitize_title() чтобы подчищать заголовки, она заменяет пробелы дефисом и делает их готовыми для использования в качестве названия поста. С помощью фильтра sanitize_title (да, имя такое же) вы можете расширить функцию.
Пример: убираем артикль "The" из меток
Хотите избавиться от артикля «The» метках? Смотрите код ниже:
<?php
add_filter( 'sanitize_title', 'sanitize_title_example' );
function sanitize_title_example( $title ) {
$title = str_replace( '-the-', '-', $title );
$title = preg_replace( '/^the-/', '', $title );
return $title;
}
?>
Простое и элегантное решение.
Устанавливаем исключения форматирования для шорткодов
Этот полезный фильтр позволяет указать, какие шорткоды не будут подвержены форматированию функцией wptexturize()". Выдержка из Кодекса WordPress.
Пример: исключаем ваш шорткод из списка для форматирования
Если вы хотите избавить от форматирования шорткод, который написали, используйте код, приведенный ниже, чтобы добавить его к списку исключений:
<?php
add_filter( 'no_texturize_shortcodes', 'no_texturize_shortcodes_example' );
function no_texturize_shortcodes_example( $shortcodes ) {
$shortcodes[] = 'myshortcode';
return $shortcodes;
}
// Источник перевода: http://codex.wordpress.org/Plugin_API/Filter_Reference/no_texturize_shortcodes
?>
Легко? Проще простого!
Встроенный фильтр проверки комментариев
WordPress имеет свою собственную систему проверки комментариев (к примеру, для защиты от спама). Прежде, чем комментарий будет допущен к публикации, он должен пройти модерацию, и, если это не спам, быть утвержденным.
Фильтр pre_comment_approve может несколько облегчить предварительную модерацию.
Пример: помечаем комментарии с длинными именами авторов как спам
Спамеры обычно используют очень длинные имена, иногда в имя включают ссылку на сам ресурс.
С помощью фрагмента кода, приведенного ниже, вы сможете добиться автоматического исключения спамеров, которые используют такие имена, как "доставка внутри страны и заграницу по очень низким ценам (Нажмите для получения дополнительной информации)":
<?php
add_filter( 'pre_comment_approved', 'pre_comment_approved_example', 99, 2 );
function pre_comment_approved_example( $approved, $commentdata ) {
return ( strlen( $commentdata['comment_author'] ) > 75 ) ? 'spam' : $approved;
}
// Источник примера: https://gist.github.com/norcross/5468979
?>
Подсказка бонусом: Если вы хотите избавиться от спама, проверяя длину URL – адреса автора комментария, используйте 'comment_author_url' вместо 'comment_author’.
Настраиваем возможность "Публикация с помощью email"
Знаете ли вы, что вы можете публиковать записи в блоге WordPress с помощью электронной почты? Функция используется довольно редко и фильтр enable_post_by_email_configuration позволяет включить или выключить ее.
Пример: включаем и выключаем возможность "Публикация через Email"
По какой-то причине (безопасность сайта, как пример) вы можете отключить эту функцию. И можете сделать это с помощью всего одной строки кода:
<?php
add_filter( 'enable_post_by_email_configuration', '__return_false', 100 );
?>
Или же если у вас WordPress работает в режиме Multisite и вам нужно включить эту возможность (потому как в режиме Multisite по умолчанию она отключена), вы можете использовать функцию __return_true():
<?php
add_filter( 'enable_post_by_email_configuration', '__return_true', 100 );
?>
Фильтр заголовков страниц
Функция wp_title() выводит заголовки страниц, те, которые мы видим во вкладках браузера. И она же позволяет нам поработать с этими названиями.
Пример: переписываем заголовки страниц верным методом
Так как wp_title является фильтром, то у нас есть возможность сделать пользовательский хук, который будет определять схему отображения заголовков не только совершенно точно, но главное корректно:
<?php
add_filter( 'wp_title', 'wp_title_example', 10, 2 );
function wp_title_example( $title, $sep ) {
global $paged, $page;
if ( is_feed() )
return $title;
// Добавляем имя сайта
$title .= get_bloginfo( 'name' );
//. Добавляем описание для домашней/главной страниц
$site_description = get_bloginfo( 'description', 'display' );
if ( $site_description && ( is_home() || is_front_page() ) )
$title = "$title $sep $site_description";
// Добавляем номер страницы при необходимости
if ( $paged >= 2 || $page >= 2 )
$title = sprintf( __( 'Page %s', 'tuts_filter_example' ), max( $paged, $page ) ) . " $sep $title";
return $title;
}
// Источник примера: http://tommcfarlin.com/filter-wp-title/
?>
Обработка комментариев перед сохранением в базе данных
Если вам требуется изменить какие-либо данные комментария (ID публикации, имя автора, адрес электронной почты автора, веб-сайт автора, тип комментария, идентификатор пользователя, если комментатор является пользователем, тип комментария или же содержание комментария) – используйте фильтр preprocess_comment.
Пример: приводим в порядок комментарии
У ВАС В БЛОГЕ МНОГО КОММЕНТАРИЕВ ОСТАВЛЕНО ЗАГЛАВНЫМИ БУКВАМИ? Если так и есть, вы можете быстро сделать их строчными:
<?php
add_filter( 'preprocess_comment', 'preprocess_comment_example' );
function preprocess_comment_example( $commentdata ) {
if( $commentdata['comment_content'] == strtoupper( $commentdata['comment_content'] ))
$commentdata['comment_content'] = strtolower( $commentdata['comment_content'] );
return $commentdata;
}
// Источник примера: http://codex.wordpress.org/Plugin_API/Filter_Reference/preprocess_comment
?>
Великолепно, верно?
Настраиваем переадресацию после входа
Этот маленький фильтр позволяет нам установить и настроить переадресацию (за исключением страницы входа в панель администрирования) после процесса входа, которая может быть очень полезна в некоторых случаях.
Пример: переадресация пользователей на домашнюю страницу
Если вы не хотите, чтобы авторизовавшиеся пользователи (в нашем случае с ролью "Subscriber") видели панель администрирования после входа, вы можете перебросить их на главную страницу сайта:
<?php
add_filter( 'login_redirect', 'login_redirect_example', 10, 3 );
function login_redirect_example( $redirect_to, $request, $user ) {
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'subscriber', $user->roles ) ) {
return home_url();
} else {
return $redirect_to;
}
}
return;
}
?>
В Кодексе WordPress есть предупреждение об одной вещи: "Убедитесь, что вы используете add_filter, а не is_admin(), так как эта функция не доступна, когда используется фильтр".
Создание ссылок в настройках плагинов
Если вы разрабатываете плагин вы, должно быть, заинтересовались, как другим разработчикам удалось добавить ссылки под названиями своих плагинов на странице «Плагины» Они просто использовали этот фильтр.
Пример: добавляем ссылку «Настройки» для отображения на странице «Плагины»
Чтобы добавить пользовательскую ссылку под названием плагина в списке на странице «Плагины» используйте функцию, подключенную к фильтру:
<?php
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ),
'plugin_action_links_example' );
function plugin_action_links_example( $links ) {
$links[] = '<a href="' . get_admin_url( null,
'options-general.php?page=my_plugin_settings' ) . '">' .
__( 'Settings' ) . '</a>';
return $links;
}
// Источник примера:
https://codex.wordpress.org/Plugin_API/Filter_Reference/plugin_action_links_
(plugin_file_name)
?>
Заметьте, что мы используем константу __FILE__ для привязки функции к фильтру. Клево?
Используйте это решение осторожно: множество ссылок в настройках плагина не увеличат его функциональности.
Фильтрация контента внутри редактора сообщений
Вам когда-нибудь приходила идея предзаполненных постов в редакторе? Чтобы начинать публикацию с готового шаблона? Или оставлять заметки вашим авторам? Это можно сделать с помощью фильтра the_editor_content.
Пример: оставляем «напоминалки» авторам
Давайте попробуем сделать "заметки авторам": если у вас есть много напоминаний авторам вашего блога, вы можете заполнить начальное поле записи в HTML - редакторе используя код, приведенный ниже:
<?php
add_filter( 'the_editor_content', 'the_editor_content_example' );
function the_editor_content_example( $content ) {
//Возвращает фильтрованное содержимое, если пусто
if ( empty( $content ) ) {
$template = Не забудь ...' . "nn";
$template .= '<ul><li> Проставить нужные теги,</li>
<li> Время публикации установи на 8:00 завтрашнего утра</li>
<li> Метки сделай подходящими для СЕО-</li>
<li> И не забудь удалить этот текст.</li></ul>' . "nn";
$template .= 'Пока!';
return $template;
} else
return $content;
}
// Источник примера: http://wpfilte.rs/the_editor_content/
?>
Переменную $template меняйте под свои нужды и применяйте на своем ресурсе!
Конец второй части
Статья подошла к концу, и, я полагаю, вы нашли что-то полезное для себя, а примеры были интересны. Увидимся на следующем уроке!
Мне интересны ваши отзывы! Не стесняйтесь оставлять комментарии ниже и, если вам понравилась статья, не забудьте ей поделиться!