Статьи

50 фильтров WordPress: фильтры 21-30

В предыдущих частях этой серии мы прошли 30 фильтров WordPress. В этом уроке мы увидим еще одну их часть и сделаем примеры с каждой.

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

Поиск — одна из самых важных функций WordPress (и почему-то она осталась примитивной). С posts_search фильтра posts_search вы можете использовать поисковый SQL.

Допустим, вы используете сообщения для информации своих клиентов, устанавливаете пароли для каждого сообщения и отправляете пароль для своего клиента.

Чтобы клиенты могли выполнять поиск среди сообщений и находить свою собственную страницу, вы можете использовать приведенный ниже фрагмент кода, чтобы посетители могли находить защищенные паролем сообщения в результатах поиска:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?php
 
add_filter( ‘posts_search’, ‘posts_search_example’ );
 
function posts_search_example( $search ) {
    global $wpdb;
    if( !is_user_logged_in() ) {
        $pattern = » AND ({$wpdb->prefix}posts.post_password = »)»;
        $search = str_replace( $pattern, », $search );
    }
    return $search;
}
 
// Example source: http://wpsnipp.com/index.php/functions-php/include-password-protected-posts-in-search-results/
 
?>

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

По умолчанию WordPress пытается сжать ваши изображения при изменении размера для определенных размеров изображения. С wp_editor_set_quality фильтра wp_editor_set_quality вы можете изменить или отключить степень сжатия.

Сжатие изображений в PHP приводит к незначительным искажениям, которые могут быть замечены только острыми глазами для деталей. Если у вашего сайта острая аудитория (возможно, дизайнеры?) И вы не хотите, чтобы WordPress использовал этот алгоритм сжатия, вы можете использовать приведенный ниже код, чтобы отключить сжатие и избежать искажения:

1
2
3
4
5
6
7
8
9
<?php
 
add_filter( ‘wp_editor_set_quality’, ‘wp_editor_set_quality_example’ );
 
function wp_editor_set_quality_example( $quality ) {
    return 100;
}
 
?>

Стандартные виджеты в WordPress имеют свои собственные фильтры. Фильтр widget_text — это фильтр, как вы уже догадались, текстового виджета.

Досадно, что WordPress по умолчанию не позволяет нам использовать шорткоды в текстовом виджете. Спасибо за его фильтр, хотя мы можем включить шорткоды в виджете:

1
2
3
4
5
<?php
 
add_filter( ‘widget_text’, ‘do_shortcode’ );
 
?>

… подождите, нет функции, чтобы зацепить? На самом деле, есть: это основная функция с именем do_shortcode() которой вы, возможно, слышали. Поскольку уже есть функция для подключения к фильтру, нам не нужно писать еще одну.

Поскольку вы можете фильтровать содержимое the_content с помощью the_content , вы также можете the_content элементы ленты с the_content_feed фильтра the_content_feed .

Этот пример является одним из моих любимых среди всех примеров в этой серии: добавление столь необходимого миниатюра поста к вашим фидам!

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<?php
 
add_filter( ‘the_content_feed’, ‘the_content_feed_example’ );
 
function the_content_feed_example( $content ) {
    $featured_image = »;
    $featured_image = get_the_post_thumbnail( get_the_ID(), ‘thumbnail’, array( ‘style’ => ‘float:left;margin-right:.75em;’ ) );
    $content = get_the_excerpt() .
    if( » != $featured_image )
        $content = ‘<div>’ .
    return $content;
}
 
?>

Если вы хотите, чтобы миниатюры отображались справа от выдержки, просто измените 'float:left;margin-right:.75em;' с 'float:right;margin-left:.75em;' ,

WordPress поставляется с TinyMCE, продвинутым WYSIWYG-редактором, который мы используем во время написания наших постов. С mce_buttons фильтра mce_buttons мы можем изменить первую строку кнопок в этом редакторе.

Если вы ведете блог с несколькими авторами и не хотите, чтобы ваши авторы использовали определенные кнопки в визуальном редакторе, вы можете удалить некоторые кнопки (или все) с помощью приведенного ниже кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?php
 
add_filter( ‘mce_buttons’, ‘mce_buttons_example’ );
 
function mce_buttons_example( $buttons ) {
    $remove_array = array( ‘strikethrough’, ‘blockquote’, ‘hr’, ‘alignleft’, ‘aligncenter’, ‘alignright’, ‘wp_more’, ‘wp_adv’ );
    // full list (WP version 3.9)
    // ‘bold’, ‘italic’, ‘strikethrough’, ‘bullist’, ‘numlist’, ‘blockquote’, ‘hr’, ‘alignleft’, ‘aligncenter’, ‘alignright’, ‘link’, ‘unlink’, ‘wp_more’, ‘spellchecker’, ‘fullscreen’, ‘wp_adv’
    foreach( $remove_array as $remove ) {
        if ( ( $key = array_search( $remove, $buttons ) ) !== false )
            unset( $buttons[ $key ] );
    }
    return $buttons;
}
 
?>

Обратите внимание, что он не отключает использование того, что вы удаляете — он просто удаляет кнопки.

Как я уже сказал, этот фильтр работает с первой строкой кнопок в визуальном редакторе. Для второй строки («дополнительные кнопки») есть еще один фильтр с именем mce_buttons_2 и два дополнительных фильтра для двух строк mce_buttons_3 : mce_buttons_3 и mce_buttons_4 .

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

Представьте, что вы создали плагин, который должен создать две категории с именами «Favorited-MyPlugin» и «Hated-MyPlugin». Было бы некрасиво выглядеть, если бы теги были перечислены в списках категорий, поэтому вам нужно их скрыть из списков. Вот как вы это делаете:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
add_filter( ‘list_terms_exclusions’, ‘list_terms_exclusions_example’, 10, 2 );
 
function list_terms_exclusions_example( $exclusions, $args ) {
    // IDs of terms to be excluded
    $exclude = «42,132»;
    $exterms = wp_parse_id_list( $exclude );
    foreach ( $exterms as $exterm ) {
        if ( empty( $exclusions ) )
            $exclusions = ‘ AND ( t.term_id <> ‘ . intval( $exterm ) . ‘ ‘;
        else
            $exclusions .= ‘ AND t.term_id <> ‘ .
    }
    if ( !empty( $exclusions ) )
        $exclusions .= ‘)’;
    return $exclusions;
}
 
// Example source: http://shailan.com/2598/how-to-exclude-categories-and-tags-from-your-widgets/
 
?>

Вот интересная особенность: этот фильтр также скрывает термины из ваших внутренних списков. Круто … и жутко .

Если вы выберете изображение для использования в своих сообщениях, вы сможете выбрать размер, прежде чем добавлять его в содержимое сообщения. Этот удобный фильтр позволяет нам добавлять нестандартные размеры изображений (предварительно созданные с помощью функции add_image_size() ) в выпадающее меню, где мы выбираем размеры.

Предположим, вы уже создали собственное изображение с именем «golden-ratio-thumb», и вам нужно, чтобы ваши авторы добавляли изображения с таким размером в свои посты, когда это необходимо. Вот как вы добавляете нестандартный размер изображения в меню <select> :

01
02
03
04
05
06
07
08
09
10
11
12
13
<?php
 
add_filter( ‘image_size_names_choose’, ‘image_size_names_choose_example’ );
 
function image_size_names_choose_example( $sizes ) {
    return array_merge( $sizes, array(
        ‘golden-ratio-thumb’ => __( ‘Golden Ratio Thumbnail’ )
    ) );
}
 
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/image_size_names_choose
 
?>

Это почти слишком просто, верно?

WordPress обрезает первые 55 слов ваших постов, убирает форматирование и называет их «выдержками», краткими описаниями постов. В конце выдержки есть строка [...] которая меня немного раздражает. К счастью, фильтр excerpt_more позволяет нам изменить его.

Допустим, вы хотите изменить этот текст и превратить его в ссылку на пост. Вот как вы это делаете:

01
02
03
04
05
06
07
08
09
10
<?php
 
add_filter( ‘excerpt_more’, ‘excerpt_more_example’ );
 
function excerpt_more_example( $text ) {
    global $post;
    return ‘… <a class=»read-more-link» href=»‘ . get_permalink( $post->ID ) . ‘»>Read more</a>’;
}
 
?>

Так что теперь этот раздражающий кусочек текста нашел хорошее применение.

На странице сообщений в вашей панели администратора вы можете видеть список ваших сообщений в виде таблицы с дополнительной информацией, такой как авторы, категории, теги сообщений.

manage_posts_columns позволяет нам скрывать их или добавлять новые (используя действия и функции действий).

Если вы единственный автор на своем сайте, вам не нужно видеть автора каждого поста; так что вы можете удалить этот столбец, чтобы сэкономить место. Вот как вы это делаете:

01
02
03
04
05
06
07
08
09
10
<?php
 
add_filter( ‘manage_posts_columns’, ‘manage_posts_columns_example’ );
 
function manage_posts_columns_example( $columns ) {
    unset( $columns[‘author’] );
    return $columns;
}
 
?>

Вот и вы! По умолчанию есть семь столбцов, которые вы можете скрыть:

  • cb (флажки)
  • title
  • author
  • categories
  • tags
  • comments
  • date

Чтобы заставить его работать в пользовательских типах manage_$post_type_posts_columns , вы можете использовать manage_$post_type_posts_columns где $post_type — это идентификационное имя вашего пользовательского типа $post_type .

Знаете ли вы, что вы можете добавлять (или удалять) поля в профилях пользователей? Да, это то, для чего user_contactmethods фильтр user_contactmethods .

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<?php
 
add_filter( ‘user_contactmethods’, ‘user_contactmethods_example’ );
 
function user_contactmethods_example( $contactmethods ) {
    unset( $contactmethods[‘yim’] );
    unset( $contactmethods[‘aim’] );
    unset( $contactmethods[‘jabber’] );
    $contactmethods[‘facebook’] = ‘Facebook’;
    $contactmethods[‘twitter’] = ‘Twitter’;
    $contactmethods[‘gplus’] = ‘Google+’;
    $contactmethods[‘linkedin’] = ‘LinkedIn’;
    $contactmethods[‘instagram’] = ‘Instagram’;
    return $contactmethods;
}
 
?>

Поля профиля больше похожи на 2014, а не на 2002, верно?

Мы прошли вторую партию из 50 фильтров в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!

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