Статьи

50 фильтров WordPress: фильтры 11-20

В предыдущей части этой серии мы рассмотрели 50 фильтров WordPress. Выбранный среди сотен, мы начали с рассмотрения 10 из них.

В этом уроке мы рассмотрим еще один пакет и рассмотрим несколько примеров каждого.

Давайте начнем!

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

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

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