Статьи

50 фильтров WordPress: первые 10 фильтров

В первом посте серии мы представили идею мира фильтров в контексте WordPress. В этом уроке мы начнем рассмотрение 50 выбранных фильтров, объяснив, что они делают, и увидим пример для каждого фильтра.

Итак, без лишних слов, вот первая партия из 50 наших фильтров!

WordPress выдает слишком много информации при отображении ошибки входа в систему: «Пароль, введенный вами для имени пользователя barisunver , неверен». Это означает, что хакеры могут попробовать разные имена пользователей, чтобы выяснить, какое имя пользователя мы используем. Вы можете отключить такого рода сообщения благодаря этому фильтру.

Давайте просто изменим все сообщения об ошибках на пустую строку, чтобы хакеры не узнали о наших учетных данных:

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() разрешает только перенаправления в пределах вашей установки 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_class() просто великолепна . Он предоставляет разные классы для тега body на разных страницах, чтобы вы могли более эффективно использовать ваши CSS-файлы. А с тем же фильтром body_class вы можете добавлять или удалять классы.

Если вам нужны разные стили для каждой из ваших категорий, фильтр 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, как показано ниже:

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 позволяет нам вмешиваться в содержание публикации.

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 .

Несколько лет назад мне нужно было иметь возможность иметь теги моих сообщений в виде простого текста. Я потратил много- много часов, чтобы найти решение — оказалось, что оно было чрезвычайно простым:

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 фильтров в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!

Я тоже хочу услышать ваши мысли. Что вы думаете об этих фильтрах? Оставьте свои комментарии ниже; и если вам понравилась статья, не забудьте поделиться ею!