В предыдущих частях этой серии мы прошли 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
вы можете изменить или отключить степень сжатия.
Пример: предотвращение сжатия и искажения WordPress ваших изображений
Сжатие изображений в 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 фильтров в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!
Я тоже хочу услышать ваши мысли. Что вы думаете об этих фильтрах? Оставьте свои комментарии ниже; и если вам понравилась статья, не забудьте поделиться ею!