Статьи

50 фильтров WordPress: фильтры 31-40

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

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

WordPress стилизует шорткод с помощью некоторого предопределенного CSS. Вы можете изменить это поведение с use_default_gallery_style фильтра use_default_gallery_style .

Если вы уже стилизовали свои галереи в файле style.css своей темы и не нуждаетесь в CSS-правилах по умолчанию, вы можете отключить их с помощью приведенного ниже кода:

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

Выполнено! Теперь WordPress не будет добавлять <style> с кучей правил CSS перед вашими шорткодами .

Этот фильтр применяется к 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 вы можете изменить это.

Если вы хотите иметь возможность отправлять электронные письма в формате 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’;
}
 
?>

WordPress сохраняет IP-адрес каждого комментатора в таблице комментариев вашей базы данных. Если вы хотите pre_comment_user_ip их, вы можете использовать фильтр pre_comment_user_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 знакомит нас с двумя новыми тегами, связанными с изображениями: <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 фильтров в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!

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