В предыдущей части этой серии мы рассмотрели 50 фильтров WordPress. Выбранный среди сотен, мы начали с рассмотрения 10 из них.
В этом уроке мы рассмотрим еще один пакет и рассмотрим несколько примеров каждого.
Давайте начнем!
Игра с переводимыми данными в WordPress
Одна из самых крутых возможностей WordPress — готовность к переводу каждого текста. Однако, если язык вашего сайта английский, вам не нужна эта функция — или нет?
Фильтр gettext
может работать для вас по-другому. Давайте посмотрим интересный пример.
Пример: исправьте грамматику другого разработчика!
Предположим, вы нашли хороший плагин для работы, но понимаете, что его владелец не очень хорошо говорит по-английски, и вы видите некачественно написанный текст внутри кода. К счастью, строки могут быть переведены, поэтому вы сможете изменить эти строки с помощью фильтра gettext
.
Посмотрим как:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
<?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
}
// Example source: http://speakinginbytes.com/2013/10/gettext-filter-wordpress/
?>
|
Очистка пули
WordPress использует функцию с именем sanitize_title()
для очистки заголовков, заменяет пробелы дефисами и делает их готовыми к сохранению как слагов. С помощью фильтра sanitize_title
(да, то же имя) вы можете расширить эту функцию.
Пример: удаление слов «The» из слизняка
Если вам не нужно слово «the» в ваших слагах, вы можете удалить их с помощью фрагмента кода ниже:
01
02
03
04
05
06
07
08
09
10
11
|
<?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()
», как сказано в Кодексе .
Пример: исключить ваш шорткод из текстурирования
Если вы хотите, чтобы созданный вами шорткод освободил от текстурирования, используйте этот код, чтобы добавить свое шорткод в список «не текстурировать»:
01
02
03
04
05
06
07
08
09
10
11
12
|
<?php
add_filter( ‘no_texturize_shortcodes’, ‘no_texturize_shortcodes_example’ );
function no_texturize_shortcodes_example( $shortcodes ) {
$shortcodes[] = ‘myshortcode’;
return $shortcodes;
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/no_texturize_shortcodes
?>
|
Довольно легко, правда?
Фильтрация статуса одобрения комментария
В WordPress есть свои собственные проверки комментариев (которые могут быть слишком просты для спамеров), прежде чем решить, следует ли комментировать комментарий как спам, отправить в очередь на модерацию или одобрить. Фильтр pre_comment_approve
позволяет плагинам помочь с этим решением.
Пример: пометка комментариев с длинными именами авторов как спама
В моей стране, Турции, спамеры комментариев WordPress обычно используют длинные имена, иногда сам URL.
С помощью приведенного ниже фрагмента кода вы можете автоматически исключать спамеров, использующих такие имена, как «Внутренние и международные перевозки по чрезвычайно низким ценам (нажмите здесь для получения дополнительной информации)»:
01
02
03
04
05
06
07
08
09
10
11
|
<?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 ) ?
}
// Example source: https://gist.github.com/norcross/5468979
?>
|
Отдельное спасибо Эндрю Норкроссу за идею!
Бонусный совет: если вы хотите устранить спам, проверив длину URL автора комментария, используйте «comment_author_url» вместо «comment_author». Эндрю Норкросс, кстати, использовал URL в своем первоначальном отзыве.
Настройка функции «Отправить по электронной почте»
Знаете ли вы, что вы можете опубликовать в своем блоге WordPress по электронной почте? WordPress предлагает эту редко используемую функцию и позволяет включать и выключать ее с enable_post_by_email_configuration
фильтра enable_post_by_email_configuration
.
Пример: включение и выключение функции «Отправить по электронной почте»
По какой-то причине (например, безопасности) вы можете отключить эту функцию. И вы можете сделать это всего одной строкой кода:
1
2
3
4
5
|
<?php
add_filter( ‘enable_post_by_email_configuration’, ‘__return_false’, 100 );
?>
|
Или, если вы находитесь на WordPress Multisite и вам нужно включить эту функцию (поскольку она отключена по умолчанию на Multisite), вы можете использовать __return_true()
:
1
2
3
4
5
|
<?php
add_filter( ‘enable_post_by_email_configuration’, ‘__return_true’, 100 );
?>
|
Фильтрация заголовков вашей страницы
Функция wp_title()
выводит заголовки страниц, которые мы видим на наших вкладках в браузерах. И функция wp_title позволяет нам вмешиваться в эти заголовки.
Пример: перезапись заголовков вашей страницы — правильный путь
Уважаемый «гуру» WordPress (и редактор Tuts + Code) Том Макфарлин объясняет нам в своем блоге, как правильно переписывать заголовки наших страниц с помощью функции wp_title()
и фильтра с тем же именем:
Поскольку wp_title является отфильтрованной функцией, это означает, что мы можем предоставить пользовательский хук, который позволяет нам определять схему для отображения наших заголовков не только более точно, но и правильно.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<?php
add_filter( ‘wp_title’, ‘wp_title_example’, 10, 2 );
function wp_title_example( $title, $sep ) {
global $paged, $page;
if ( is_feed() )
return $title;
// Add the site name.
$title .= get_bloginfo( ‘name’ );
// Add the site description for the home/front page.
$site_description = get_bloginfo( ‘description’, ‘display’ );
if ( $site_description && ( is_home() || is_front_page() ) )
$title = «$title $sep $site_description»;
// Add a page number if necessary.
if ( $paged >= 2 || $page >= 2 )
$title = sprintf( __( ‘Page %s’, ‘tuts_filter_example’ ), max( $paged, $page ) ) .
return $title;
}
// Example source: http://tommcfarlin.com/filter-wp-title/
?>
|
Обязательно ознакомьтесь с его статьей. Спасибо, Том!
Обработка комментариев до их сохранения в базе данных
Если вам нужна помощь в изменении данных комментариев (идентификатор публикации комментария, имя автора, адрес электронной почты автора, веб-сайт автора, тип комментария, идентификатор пользователя, если комментатор является пользователем, тип комментария и содержание комментария) , preprocess_comment
может вам помочь.
Пример: уменьшите громкость криков
ВЫ ПОЛУЧАЕТЕ МНОГИЕ КОММЕНТАРИИ, КАКИЕ КАЖДЫЕ ЕДИНСТВЕННЫЕ СЛОВА ЯВЛЯЮТСЯ ВЕРХНИМИ Если вы это сделаете, вы можете автоматически сделать эти буквы строчными с помощью фрагмента кода ниже:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<?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;
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/preprocess_comment
?>
|
Круто, да?
Управление перенаправлением после входа в систему
Этот небольшой фильтр позволяет нам устанавливать перенаправления (кроме панели администрирования) после процесса входа в систему, что может быть довольно полезно в некоторых случаях.
Пример: перенаправление подписчиков на домашний сайт
Если вы не хотите, чтобы ваши пользователи (с ролью «Подписчик») видели вашу админ-панель после входа в систему, вы можете перенаправить их на домашнюю страницу вашего сайта:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<?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;
}
?>
|
Кодекс предупреждает нас об одном: «Убедитесь, что вы используете add_filter
вне is_admin()
, поскольку эта функция недоступна при вызове фильтра».
Создание ссылок действий для вашего плагина
Если вы разрабатываете плагин, вам может быть интересно, как другим разработчикам удалось добавить ссылки под названиями своих плагинов на странице плагинов. Ну, они используют этот фильтр.
Пример: добавление ссылки «Настройки» для отображения на странице плагинов
Чтобы добавить ссылки пользовательских действий под именем вашего плагина в список на странице плагина, вы можете использовать эту функцию и подключить ее к фильтру:
01
02
03
04
05
06
07
08
09
10
11
12
|
<?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’ ) . ‘»>’ .
return $links;
}
// Example source: https://codex.wordpress.org/Plugin_API/Filter_Reference/plugin_action_links_(plugin_file_name)
?>
|
Обратите внимание, что мы используем константу __FILE__
чтобы __FILE__
нашу функцию к фильтру с именем вашего плагина. Аккуратно, а?
Используйте это с осторожностью: если вы злоупотребите этой областью, чтобы заполнить ее ссылками, люди будут помнить вас как спамера.
Фильтрация содержимого внутри редактора сообщений
Вы когда-нибудь хотели предварительно заполнить редактор постов, чтобы начать писать шаблон постов, или оставить заметки для своих авторов? Вы можете, благодаря фильтру the_editor_content
.
Пример: оставление напоминаний для ваших авторов
Давайте сделаем пример «оставления заметок для авторов»: если у вас есть что-то, что напоминает авторам вашего блога, вы можете заполнить редактор постов HTML, используя этот код:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
<?php
add_filter( ‘the_editor_content’, ‘the_editor_content_example’ );
function the_editor_content_example( $content ) {
// Only return the filtered content if it’s empty
if ( empty( $content ) ) {
$template = ‘Hey!
$template .= ‘<ul><li>Come up with good tags for the post,</li><li>Set the publish time to 08:00 tomorrow morning,</li><li>Change the slug to a SEO-friendly slug,</li><li>And delete this text, hehe.</li></ul>’ .
$template .= ‘Bye!’;
return $template;
} else
return $content;
}
// Example source: http://wpfilte.rs/the_editor_content/
?>
|
Измените переменную $template
на что угодно, и все готово!
Конец второй части
Мы прошли вторую партию из 50 фильтров в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!
Я тоже хочу услышать ваши мысли. Что вы думаете об этих фильтрах? Оставьте свои комментарии ниже; и если вам понравилась статья, не забудьте поделиться ею!