В первом посте серии мы представили идею мира фильтров в контексте WordPress. В этом уроке мы начнем рассмотрение 50 выбранных фильтров, объяснив, что они делают, и увидим пример для каждого фильтра.
Итак, без лишних слов, вот первая партия из 50 наших фильтров!
Изменение сообщений об ошибках входа в систему по умолчанию
WordPress выдает слишком много информации при отображении ошибки входа в систему: «Пароль, введенный вами для имени пользователя barisunver , неверен». Это означает, что хакеры могут попробовать разные имена пользователей, чтобы выяснить, какое имя пользователя мы используем. Вы можете отключить такого рода сообщения благодаря этому фильтру.
Пример: устранение проблемы с TMI
Давайте просто изменим все сообщения об ошибках на пустую строку, чтобы хакеры не узнали о наших учетных данных:
01
02
03
04
05
06
07
08
09
10
|
<?php
add_filter( ‘login_errors’, ‘login_errors_example’ );
function login_errors_example( $error ) {
$error = »;
return $error;
}
?>
|
Там. Намного лучше.
Перенаправление комментаторов на другую страницу
После публикации комментария на WordPress, вы остаетесь на той же странице. Да, это логично, но знаете ли вы, что после удачного комментария вы можете перенаправить ваши комментарии на другую страницу? Фильтр comment_post_redirect
позволяет нам сделать это, и я думаю, что нашел идеальный пример для этого фильтра!
Пример: перенаправление пользователя на страницу подписки после успешного комментария
Комментаторы с большей вероятностью будут «следить» за вашими постами в блоге, верно? Так что, если мы перенаправим их на страницу с надписью «Спасибо за ваш комментарий! Хотите подписаться на мой блог?», Мы могли бы превратить эти комментарии в подписчики! И это тоже легко сделать с помощью нашего прекрасного фильтра comment_post_redirect
:
1
2
3
4
5
6
7
8
9
|
<?php
add_filter( ‘comment_post_redirect’, ‘comment_post_redirect_example’ );
function comment_post_redirect_example( $location ) {
return ‘/thanks-for-your-comment/’;
}
?>
|
Обратите внимание, что WordPress использует функцию wp_safe_redirect()
которая означает, что вы должны использовать локальную страницу или страницу в разрешенных хостах (см. Фильтр allowed_redirect_hosts
ниже).
Разрешение внешнего перенаправления для функции wp_safe_redirect()
По умолчанию wp_safe_redirect()
не разрешает внешние перенаправления. Однако, используя этот фильтр, мы можем изменить это поведение и указать внешние хосты.
Пример: разрешение перенаправления субдоменов
Поскольку wp_safe_redirect()
разрешает только перенаправления в пределах вашей установки WordPress, дочерние домены вашего домена также не допускаются.
Давайте сделаем так, чтобы WordPress позволял им:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
<?php
add_filter( ‘allowed_redirect_hosts’, ‘allowed_redirect_hosts_example’ );
function allowed_redirect_hosts_example( $content ) {
$content[] = ‘forum.mywebsite.com’;
$content[] = ‘welcome.mywebsite.com’;
$content[] = ‘help.mywebsite.com’;
return $content;
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/allowed_redirect_hosts
?>
|
Добавление классов в <body>
Функция body_class()
просто великолепна . Он предоставляет разные классы для тега body
на разных страницах, чтобы вы могли более эффективно использовать ваши CSS-файлы. А с тем же фильтром body_class
вы можете добавлять или удалять классы.
Пример: добавление категорий категорий в теги <body>
страниц сообщений
Если вам нужны разные стили для каждой из ваших категорий, фильтр body_class
может помочь вам в этом, добавив классы с именами категорий в теги body
на страницах вашего отдельного сообщения.
Вот как:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<?php
add_filter( ‘body_class’, ‘body_class_example’ );
function body_class_example( $classes ) {
if( is_single() ) {
foreach( get_the_category( get_the_ID() ) as $category )
$classes[] = ‘cat-‘ .
}
return $classes;
}
// Example source: https://codex.wordpress.org/Function_Reference/body_class#Add_Classes_By_Filters
?>
|
Если у вас есть категория с именем «Мир», вы можете использовать класс .cat-world
для стилизации сообщений в категории «Мир».
Смена локали
WordPress — это система управления контентом № 1 в мире, потому что она позволяет нам переводить почти каждый текст в ней. И фильтр locale
позволяет нам установить локаль для наших установок WordPress.
Пример: изменение языка сайта с помощью параметра URL
Если у вас есть многоязычный веб-сайт, простое решение для быстрого переключения языка будет через параметр URL, как показано ниже:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<?php
add_filter( ‘locale’, ‘locale_example’ );
function locale_example( $lang ) {
if ( ‘tr’ == $_GET[‘language’] ) {
return ‘tr_TR’;
} else {
return $lang;
}
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/locale
?>
|
Теперь, когда вы установите параметр url, например mywebsite.com/?language=tr
, язык вашего веб-сайта будет изменен на турецкий. Не содержание поста, конечно, но это начало.
Фильтрация санации имен пользователей
WordPress очищает имена пользователей с помощью функции очистки с именем sanitize_user()
. Используя фильтр с тем же именем, вы можете настроить эту функцию.
Пример: принимать имена пользователей только в нижнем регистре
Если вы не хотите принимать имена пользователей с заглавными буквами (будь то «SHOUTINGBOY88» или «CrazyGirl92»), вы можете использовать PHP-функцию strtolower
и подключить ее к фильтру sanitize_user
как strtolower
ниже:
1
2
3
4
5
6
7
|
<?php
add_filter( ‘sanitize_user’, ‘strtolower’ );
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/sanitize_user
?>
|
Это, наверное, один из самых простых примеров фильтров в этой серии.
Фильтрация содержимого сообщения
Этот не нуждается в большом представлении: фильтр the_content
позволяет нам вмешиваться в содержание публикации.
Пример: удаление тегов <p>
оборачивающих изображения
WordPress не позволяет нам отображать изображения вне абзаца — он автоматически оборачивает их <p>
, что меня раздражает. Если вас это тоже раздражает, вы можете удалить теги <p>
с помощью этого небольшого фрагмента кода:
01
02
03
04
05
06
07
08
09
10
11
|
<?php
add_filter( ‘the_content’, ‘the_content_example’ );
function the_content_example( $content ) {
return preg_replace(‘/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU’, ‘\1\2\3’, $content);
}
// Example source: http://wpsnipp.com/index.php/functions-php/remove-p-tag-from-around-images-in-the_content/
?>
|
Фильтрация форм для защищенных паролем сообщений
Для сообщений, защищенных паролем, WordPress автоматически заменяет содержимое сообщения формой пароля. С the_password_form
фильтра the_password_form
вы можете редактировать эту форму.
Пример: упрощение формы пароля
Если сообщения, защищенные паролем, являются обычным делом для вашего веб-сайта WordPress, и вам не нужно «Этот контент защищен паролем.
Чтобы просмотреть его, пожалуйста, введите ваш пароль ниже: «Текст поверх контура снова, вы можете очистить и упростить форму пароля с помощью этого фрагмента кода:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
<?php
add_filter( ‘the_password_form’, ‘the_password_form_example’ );
function the_password_form_example() {
$output = ‘<form action=»‘ . esc_url( site_url( ‘wp-login.php?action=postpass’, ‘login_post’ ) ) . ‘» method=»post»>’;
$output .= ‘<span>’ .
$output .= ‘<input name=»post_password» type=»password» size=»20″ />’;
$output .= ‘<input type=»submit» name=»Submit» value=»‘ . esc_attr__( «Go» ) . ‘» />’;
$output .= ‘</form>’;
return $output;
}
// Example source: http://codex.wordpress.org/Using_Password_Protection#Password_Form_Text
?>
|
Вот, пожалуйста. теперь у вас есть только три слова, поле ввода пароля и кнопка отправки — все в одной строке.
Фильтрация функции the_terms()
Если вас не устраивает вывод функции the_terms()
или вы просто хотите использовать ее с другой целью, вы можете использовать фильтр с тем же именем: the_terms
.
Пример: the_terms()
тегов HTML из функции the_terms()
Несколько лет назад мне нужно было иметь возможность иметь теги моих сообщений в виде простого текста. Я потратил много- много часов, чтобы найти решение — оказалось, что оно было чрезвычайно простым:
1
2
3
4
5
|
<?php
add_filter( ‘the_terms’, ‘strip_tags’ );
?>
|
Вы не можете себе представить выражение моего лица, когда я узнал, что я могу просто подключить основную функцию PHP к фильтру the_terms
.
Изменение адреса электронной почты для отправки с
Когда WordPress отправляет электронные письма вам или членам вашего веб-сайта, он использует адрес электронной почты, такой как [email protected]
. С помощью этого фильтра вы можете изменить это.
Пример: установка собственного адреса электронной почты как «с адреса электронной почты»
С помощью функции, просто возвращающей другой адрес электронной почты, вы можете изменить адрес электронной почты отправителя:
1
2
3
4
5
6
7
8
9
|
<?php
add_filter( ‘wp_mail_from’, ‘wp_mail_from_example’ );
function wp_mail_from_example( $email ) {
return ‘[email protected]’;
}
?>
|
Вы можете использовать его вместе с фильтром wp_mail_from_name
: та же логика, просто напишите функцию, которая возвращает другую строку пользовательского имени, и подключите ее к фильтру wp_mail_from_name
.
Подведение итогов на сегодня
Мы прошли 10 из 50 фильтров в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!
Я тоже хочу услышать ваши мысли. Что вы думаете об этих фильтрах? Оставьте свои комментарии ниже; и если вам понравилась статья, не забудьте поделиться ею!