В предыдущих частях этой серии мы рассмотрели 20 фильтров WordPress. В этом уроке мы продолжим тенденцию, рассмотрим еще одну серию и будем следовать примерам с каждым.
Давайте начнем!
Фильтрация стиля галереи по умолчанию
WordPress стилизует шорткод с помощью некоторого предопределенного CSS. Вы можете изменить это поведение с
use_default_gallery_style
фильтра use_default_gallery_style
.
Пример: отключить CSS по умолчанию
Если вы уже стилизовали свои галереи в файле style.css
своей темы и не нуждаетесь в CSS-правилах по умолчанию, вы можете отключить их с помощью приведенного ниже кода:
1
2
3
4
5
|
<?php
add_filter( ‘use_default_gallery_style’, ‘__return_false’ );
?>
|
Выполнено! Теперь WordPress не будет добавлять <style>
с кучей правил CSS перед вашими шорткодами .
Фильтрация URL-адресов вложений
Этот фильтр применяется к URL-адресу вложения, полученному функцией с тем же именем, wp_get_attachment_url()
.
Пример: избегать предупреждений «Смешанный контент»
Если вы используете шифрование SSL на своем веб-сайте, wp_get_attachment_url()
может возвращать URL-адрес с HTTP вместо HTTPS, что приводит к предупреждению о «смешанном контенте» для посетителей. С помощью функции ниже вы можете предотвратить отображение этого предупреждения:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<?php
add_filter( ‘wp_get_attachment_url’, ‘wp_get_attachment_url_example’ );
function wp_get_attachment_url_example( $url ) {
$http = site_url( false, ‘http’ );
$https = site_url( false, ‘https’ );
if ( $_SERVER[‘HTTPS’] == ‘on’ )
return str_replace( $http, $https, $url );
else
return $url;
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_get_attachment_url
?>
|
Установка типа контента по умолчанию для электронной почты
По умолчанию вы можете отправлять только текстовые электронные письма в WordPress, так как wp_mail()
использует text/plain
качестве типа контента. С wp_mail_content_type
фильтра wp_mail_content_type
вы можете изменить это.
Пример: отправка писем с помощью WordPress с использованием HTML
Если вы хотите иметь возможность отправлять электронные письма в формате HTML, используйте фрагмент кода ниже, чтобы изменить тип содержимого WordPress для электронных писем:
1
2
3
4
5
6
7
8
9
|
<?php
add_filter( ‘wp_mail_content_type’, ‘wp_mail_content_type_example’ );
function wp_mail_content_type_example( $content_type ) {
return ‘text/html’;
}
?>
|
Сохранение IP-адреса комментатора
WordPress сохраняет IP-адрес каждого комментатора в таблице комментариев вашей базы данных. Если вы хотите pre_comment_user_ip
их, вы можете использовать фильтр pre_comment_user_ip
.
Пример: сохранение реального IP-адреса комментатора
Если комментатор использует прокси-сервер для отправки комментария, WordPress запишет IP-адрес прокси-сервера вместо реального IP-адреса комментатора. Настоящий IP обслуживается другим HTTP-заголовком, X-Forwarded-For
. Приведенный ниже фрагмент кода имеет функцию для получения этой записи, извлечения реального IP-адреса и сохранения его в вашей базе данных:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php
add_filter( ‘pre_comment_user_ip’, ‘pre_comment_user_ip_example’ );
function pre_comment_user_ip_example() {
$REMOTE_ADDR = $_SERVER[‘REMOTE_ADDR’];
if ( !empty( $_SERVER[‘X_FORWARDED_FOR’] ) ) {
$X_FORWARDED_FOR = explode( ‘,’, $_SERVER[‘X_FORWARDED_FOR’] );
if ( !empty( $X_FORWARDED_FOR ) )
$REMOTE_ADDR = trim( $X_FORWARDED_FOR[0] );
} elseif( !empty( $_SERVER[‘HTTP_X_FORWARDED_FOR’] ) ) {
$HTTP_X_FORWARDED_FOR = explode( ‘,’, $_SERVER[‘HTTP_X_FORWARDED_FOR’] );
if ( !empty( $HTTP_X_FORWARDED_FOR ) )
$REMOTE_ADDR = trim( $HTTP_X_FORWARDED_FOR[0] );
}
return preg_replace( ‘/[^0-9a-f:\., ]/si’, », $REMOTE_ADDR );
}
// Example source: https://codex.wordpress.org/Plugin_API/Filter_Reference/pre_comment_user_ip
?>
|
Если вы когда-нибудь задумывались о HTTP-заголовке X-Forwarded-For
, посетите Википедию для получения дополнительной информации .
Изменение количества ревизий для сохранения сообщений
Возможно, вы знаете, что в WordPress есть функция, которая позволяет нам сохранять «ревизии» наших сообщений, и, возможно, вы также знаете, что вы можете изменить количество сохраняемых ревизий, добавив константу ( WP_POST_REVISIONS
) в файл wp-config.php
.
Но знаете ли вы, что вы можете изменить количество ревизий для разных типов постов, даже для разных постов? Да, это то, для чего wp_revisions_to_keep
фильтр wp_revisions_to_keep
.
Пример: отключение ревизий для определенного пользовательского типа публикации
По сути, вы можете изменить количество сохраняемых ревизий, играя с переменной $post
, но мы собираемся упростить ситуацию и ограничить количество ревизий для пользовательского типа записи с именем «event» в этом примере:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
<?php
add_filter( ‘wp_revisions_to_keep’, ‘wp_revisions_to_keep_example’, 10, 2 );
function wp_revisions_to_keep_example( $num, $post ) {
if ( ‘event’ == $post->post_type ) {
return 0;
}
return $num;
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_revisions_to_keep
?>
|
Вы можете найти краткий справочник по переменной $post
в Кодексе, чтобы найти новые способы использования этого фильтра. Не забудьте прокомментировать и поделиться с нами своей идеей, если она у вас есть!
Переписываем шорткод
Шорткод просто позволяет вам обернуть ваши изображения с подписями. Если вам когда-либо понадобится изменить вывод шорткода, вы можете использовать этот фильтр.
Пример: подписи к изображениям с разметкой HTML5
HTML5 знакомит нас с двумя новыми тегами, связанными с изображениями: <figure>
и <figcaption>
. В этом примере мы собираемся переписать разметку следующими тегами:
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
29
30
31
32
33
34
35
36
|
<?php
add_filter( ‘img_caption_shortcode’, ‘img_caption_shortcode_example’, 10, 3 );
function img_caption_shortcode_example( $empty, $attr, $content ) {
$attr = shortcode_atts( array(
‘id’ => »,
‘align’ => ‘alignnone’,
‘width’ => »,
‘caption’ => »
), $attr );
if ( 1 > (int) $attr[‘width’] || empty( $attr[‘caption’] ) ) {
return »;
}
if ( $attr[‘id’] ) {
$attr[‘id’] = ‘id=»‘ . esc_attr( $attr[‘id’] ) . ‘» ‘;
}
$figure_atts = $attr[‘id’]
.
.
$output = ‘<figure ‘ .
$output .= do_shortcode( $content );
$output .= ‘<figcaption>’ .
$output .= ‘</figure>’;
return $output;
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/img_caption_shortcode
?>
|
Поиграйте с кодом так, как вам нравится — например, вам может не понравиться использование идентификаторов для <figure>
. Кроме этого, это работает из коробки!
Добавление почтовых классов
Фильтр body_class
(и функция) узнаваем среди разработчиков WordPress. Как насчет post_class
, вы знали, что существует фильтр (и функция) для добавления классов в почтовые контейнеры?
Пример: добавление специального класса для первого сообщения в цикле
Прекрасным примером будет добавление пользовательского класса только для первого сообщения в цикле. Посмотрим как:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<?php
add_filter( ‘post_class’, ‘post_class_example’ );
function post_class_example( $classes ) {
global $wp_query;
if ( 0 == $wp_query->current_post ) {
$classes[] = ‘first-post’;
}
return $classes;
}
// Example source: http://www.billerickson.net/code/first-post-class/
?>
|
Отныне вам не нужно использовать псевдокласс :first
в CSS и беспокоиться о кросс-браузерной совместимости — просто используйте .first-post
!
Добавление пользовательских полей для вложений
В WordPress вложения очень похожи на пользовательские типы записей, которые могут быть расширены, как и любой другой тип записей, только немного по-другому. Фильтр attachment_fields_to_edit
позволяет нам играть с полями, когда мы загружаем или редактируем вложения.
Пример: добавление информации о лицензии к загруженным изображениям
Допустим, у вас есть блог, посвященный фотографии, и вам нужно установить лицензии для каждой фотографии, которую вы загружаете в виде вложения. На этот раз с помощью «действий» мы можем добавить поле «Лицензия» для ваших вложений:
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
|
<?php
add_filter( ‘attachment_fields_to_edit’, ‘attachment_fields_to_edit_example’, 10, 2 );
function attachment_fields_to_edit_example( $form_fields, $post ) {
$field_value = get_post_meta( $post->ID, ‘license’, true );
$form_fields[‘license’] = array(
‘value’ => $field_value ?
‘label’ => __( ‘License’ ),
‘helps’ => __( ‘Specify the license type used for this image’ )
);
return $form_fields;
}
add_action( ‘edit_attachment’, ‘save_new_attachment_field’ );
function save_new_attachment_field( $attachment_id ) {
$license = $_REQUEST[‘attachments’][$attachment_id][‘license’];
if ( isset( $license ) ) {
update_post_meta( $attachment_id, ‘license’, $license );
}
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/attachment_fields_to_edit
?>
|
Удивительный пример того, как мы можем расширить основные функции WordPress, не редактируя код в ядре.
Изменение длины автоматической выдержки
По умолчанию автоматические выдержки составляются путем вырезания 55 слов каждого поста и удаления их форматирования. Нечетное число, если вы спросите меня. Если вы хотите изменить это, фильтр excerpt_length
позволяет вам это сделать.
Пример: изменение длины автоматической выдержки
Допустим, мне нужно всего 15 слов, потому что я делаю макет в стиле Pinterest и у меня мало места для резюме. Все, что мне нужно сделать, это вернуть число в функции и подключить функцию к этому крошечному фильтру:
1
2
3
4
5
6
7
8
9
|
<?php
add_filter( ‘excerpt_length’, ‘excerpt_length_example’ );
function excerpt_length_example( $words ) {
return 15;
}
?>
|
Легко, правда?
Игра с массовыми действиями на экранах администратора
Прямо над списками элементов на страницах администрирования WordPress (например, «Сообщения», «Страницы», «Пользователи», «Мультимедиа» и т. Д.) Есть несколько «массовых действий», когда вы выбираете несколько элементов и делаете что-то. Этот удобный фильтр позволяет нам работать с этим небольшим выпадающим меню.
Пример: отключение массовой отправки сообщений
У вас есть новостной сайт, и вы устали от того, что ваш редактор случайно удаляет сообщения, которые ему нужно обновить. Если вам даже не нужна функция массового хранения, вы можете отключить ее:
01
02
03
04
05
06
07
08
09
10
|
<?php
add_filter( ‘bulk_actions-edit-post’, ‘bulk_actions_edit_post_example’ );
function bulk_actions_edit_post_example( $actions ) {
unset( $actions[‘trash’] );
return $actions;
}
?>
|
$screenid
в имени фильтра — это имя страницы администратора, которую вы хотите изменить. Вы можете найти список этих экранных имен на странице Codex: ссылка на экран администратора @ API плагинов .
Конец четвертой части
Мы прошли третью серию из 50 фильтров в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!
Я тоже хочу услышать ваши мысли. Что вы думаете об этих фильтрах? Оставьте свои комментарии ниже; и если вам понравилась статья, не забудьте поделиться ею!