Статьи

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

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

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

WordPress имеет свой собственный загрузчик скриптов wp_enqueue_script() , который позволяет нам «ставить в очередь» файлы JavaScript, а не жестко их кодировать. И этот маленький фильтр, называемый script_loader_src позволяет нам узнать, как сценарии будут поставлены в очередь и выведены.

Google Page Speed, Yahoo YSlow и другие инструменты измерения производительности веб-сайтов обычно ненавидят параметры URL в файлах JavaScript. И они тоже правы: скрипты с параметрами в конце их URL-адресов не кэшируются «прокси-серверами» ( больше информации по этой теме здесь ), и, к сожалению, WordPress включает параметры «версии» для скриптов (и стилей, тоже) по умолчанию. К счастью, мы можем просто удалить эти ver параметры с помощью нескольких строк кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
<?php
 
function script_loader_src_example( $src ) {
    return remove_query_arg( ‘ver’, $src );
}
 
add_filter( ‘script_loader_src’, ‘script_loader_src_example’ );
// Tiny bonus: You can do it with styles, too!
add_filter( ‘style_loader_src’, ‘script_loader_src_example’ );
 
// Example source: http://www.wpmayor.com/15-practical-ways-boost-wordpress-speed/
 
?>

Выполнено! Ваши файлы JavaScript (и CSS) больше не будут иметь никаких параметров версии.

Если вы хотите узнать больше о правильном использовании JavaScript с WordPress, обязательно ознакомьтесь с моей статьей на эту тему .

Фильтр admin_post_thumbnail_html , как следует из его названия, позволяет добавлять содержимое HTML в метаблок «Featured Image». HTML-код появится прямо под ссылкой «Установить рекомендуемое изображение».

Представьте, что вы создаете личный блог для своего клиента, но он настаивал на том, чтобы вести блог самостоятельно, а не нанимать помощника. Он всегда забывает, как добавить избранное изображение (он называет это «верхним изображением».), И вам нужно оставить напоминание на странице «Новое сообщение». Вот как вы это делаете:

01
02
03
04
05
06
07
08
09
10
<?php
 
add_filter( ‘admin_post_thumbnail_html’, ‘admin_post_thumbnail_html_example’ );
 
function admin_post_thumbnail_html_example( $html ) {
    return $html .= ‘<p>Hi Mr. Smith!
 
}
 
?>

С вашим полезным напоминанием ваш клиент никогда не забудет установить «верхнее изображение» с минимальной шириной 900 пикселей.

По умолчанию WordPress запрещает «комментаторы», которые постоянно комментируют ваши сообщения. Например, если посетитель публикует комментарий к сообщению на вашем веб-сайте, он должен подождать 15 секунд (значение по умолчанию), прежде чем опубликовать другой комментарий. Этот фильтр позволяет изменить настройку времени на другое значение или вообще отключить проверку наводнения.

Как я уже сказал, WordPress заставляет посетителей ждать 15 секунд, прежде чем отправлять еще один комментарий. В некоторых случаях вам может потребоваться увеличить этот временной предел, скажем, до 60 секунд. Вот как вы это делаете:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<?php
 
add_filter( ‘comment_flood_filter’, ‘comment_flood_filter_example’, 10, 3 );
 
function comment_flood_filter_example( $flood_control, $time_last, $time_new ) {
    $seconds = 60;
    if ( ( $time_new — $time_last ) < $seconds )
        return true;
    return false;
}
 
// Example source: http://codex.wordpress.org/FAQ_Working_with_WordPress#How_do_I_prevent_comment_flooding.3F
 
?>

Измените значение «60» выше на что угодно.

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

1
2
3
4
5
6
<?php
 
remove_all_filters( ‘comment_flood_filter’ );
add_filter( ‘comment_flood_filter’, ‘__return_false’, 10, 3 );
 
?>

Обратите внимание на remove_all_filters() ? Как следует из его названия, он удаляет все функции фильтрации из ловушки фильтра.

Раздел «Краткий обзор» (ранее назывался «Прямо сейчас») позволяет нам быть в курсе того, сколько постов, страниц и комментариев имеется в базе данных вашего сайта. Фильтр dashboard_glance_items помогает нам показывать там дополнительную информацию, такую ​​как количество сообщений пользовательского типа.

Давайте представим, что у вас есть «блог событий», где вы информируете своих посетителей о новых локальных событиях, которые вы публикуете как пользовательский тип сообщений с именем «События» (и вместе с event id). Чтобы увидеть количество событий в вашем блоге, вы можете использовать функцию ниже и подключить ее к фильтру dashboard_glance_items следующим образом:

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
<?php
 
add_filter( ‘dashboard_glance_items’, ‘dashboard_glance_items_example’ );
 
function dashboard_glance_items_example( $items = array() ) {
    $post_types = array( ‘event’ );
    foreach( $post_types as $type ) {
        if( ! post_type_exists( $type ) ) continue;
        $num_posts = wp_count_posts( $type );
        if( $num_posts ) {
            $published = intval( $num_posts->publish );
            $post_type = get_post_type_object( $type );
            $text = _n( ‘%s ‘ . $post_type->labels->singular_name, ‘%s ‘ . $post_type->labels->name, $published, ‘your_textdomain’ );
            $text = sprintf( $text, number_format_i18n( $published ) );
            if ( current_user_can( $post_type->cap->edit_posts ) ) {
            $output = ‘<a href=»edit.php?post_type=’ . $post_type->name . ‘»>’ .
                echo ‘<li class=»post-count ‘ . $post_type->name . ‘-count»>’ .
            } else {
            $output = ‘<span>’ .
                echo ‘<li class=»post-count ‘ . $post_type->name . ‘-count»>’ .
            }
        }
    }
    return $items;
}
 
// Example source: http://www.trickspanda.com/2014/03/add-custom-post-types-glance-dashboard-widget-wordpress/
 
?>

Легко, правда? Измените значение переменной $post_types (массив) в соответствии с вашими потребностями.

Фильтр login_message позволяет нам редактировать сообщения по умолчанию, которые выводятся прямо над формами входа в наши установки WordPress. (Не «ошибки», просто нейтральные сообщения.)

Если вам когда-нибудь понадобится упростить инструкции по умолчанию «утерянный пароль» («Пожалуйста, введите ваше имя пользователя или адрес электронной почты. Вы получите ссылку для создания нового пароля по электронной почте.»), Вы можете изменить его следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?php
 
add_filter( ‘login_message’, ‘login_message_example’ );
 
function login_message_example( $message ) {
    $action = $_REQUEST[‘action’];
    if( $action == ‘lostpassword’ ) {
        $message = ‘<p class=»message»>Enter your email address, then check your inbox for the «reset password» link!</p>’;
        return $message;
    }
    return;
}
 
// Example source: http://www.pypelineweb.com/blog/change-wordpress-login-message-filter-it-out/
 
?>

Существует ряд action которые можно найти в файле wp-login.php :

  • logout
  • lostpassword и lostpassword (псевдоним)
  • resetpass и rp (псевдоним)
  • register
  • login

Как и в примере, вы можете написать разные сообщения для разных action .

При обновлении, удалении, удалении или удалении сообщений отображаются сообщения. Если вы хотите редактировать эти сообщения, то bulk_post_updated_messages — ваш парень.

Допустим, вам не нравится, как эти сообщения отображаются для массовых действий вашего пользовательского типа записи «событие», и вы хотите изменить их. Вот как вы это делаете:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<?php
 
add_filter( ‘bulk_post_updated_messages’, ‘bulk_post_updated_messages_example’, 10, 2 );
 
function bulk_post_updated_messages_example( $bulk_messages, $bulk_counts ) {
    $bulk_messages[‘event’] = array(
        ‘updated’ => _n( ‘%s event updated.’, ‘%s events updated.’, $bulk_counts[‘updated’] ),
        ‘locked’ => _n( ‘%s event not updated, somebody is editing it.’, ‘%s events not updated, somebody is editing them.’, $bulk_counts[‘locked’] ),
        ‘deleted’ => _n( ‘%s event permanently deleted.’, ‘%s events permanently deleted.’, $bulk_counts[‘deleted’] ),
        ‘trashed’ => _n( ‘%s event moved to the Trash.’, ‘%s events moved to the Trash.’, $bulk_counts[‘trashed’] ),
        ‘untrashed’ => _n( ‘%s event restored from the Trash.’, ‘%s events restored from the Trash.’, $bulk_counts[‘untrashed’] ),
    );
 
    return $bulk_messages;
}
 
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/bulk_post_updated_messages
 
?>

Легко, правда? Не забывайте переводить строки, если вы не единственный, кто использует плагин или тему.

В некоторых случаях вам может понадобиться вмешаться в основной виджет «Категории». С фильтром widget_categories_args вы можете сделать это.

Если вам когда-нибудь нужно «спрятать» некоторые категории в виджете «Категории», используйте этот фрагмент кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?php
 
add_filter( ‘widget_categories_args’, ‘widget_categories_args_example’ );
 
function widget_categories_args_example( $cat_args ) {
    $exclude_arr = array( 4, 10 );
 
    if( isset( $cat_args[‘exclude’] ) && !empty( $cat_args[‘exclude’] ) )
        $exclude_arr = array_unique( array_merge( explode( ‘,’, $cat_args[‘exclude’] ), $exclude_arr ) );
    $cat_args[‘exclude’] = implode( ‘,’, $exclude_arr );
    return $cat_args;
}
 
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/widget_categories_args
 
?>

Измените элементы массива $exclude_arr на идентификаторы ваших «нежелательных» категорий, и все готово.

По умолчанию WordPress просто напоминает вам проверить вашу электронную почту после регистрации и никуда вас не перенаправляет. Однако с помощью фильтра registration_redirect вы можете установить собственный безопасный адрес для перенаправления при успешной регистрации.

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

01
02
03
04
05
06
07
08
09
10
11
<?php
 
add_filter( ‘registration_redirect’, ‘registration_redirect_example’ );
 
function registration_redirect_example() {
    return home_url( ‘/your-free-ebook/’ );
}
 
// Example source: http://wpsnipp.com/index.php/functions-php/redirect-a-successful-registration-page/
 
?>

Помните, что перенаправление выполняется с помощью функции wp_safe_redirect() которая означает, что вы не можете перенаправить на внешний сайт, если не используете фильтр allowed_redirect_hosts для указания внешних и «безопасных» хостов. Мы прошли этот фильтр в первом пакете этих примеров, обязательно прочитайте этот учебник, если вы еще этого не сделали.

WordPress имеет функцию comment_form() для отображения формы комментария, и вы можете изменить ее поле, используя аргументы функции . Однако, если вы разрабатываете плагин, вы не сможете изменить какие-либо параметры функции. Этот небольшой фильтр позволяет нам изменять HTML-код полей формы по умолчанию или удалять их.

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

01
02
03
04
05
06
07
08
09
10
11
12
<?php
 
add_filter( ‘comment_form_default_fields’, ‘comment_form_default_fields_example’ );
 
function comment_form_default_fields_example( $fields ) {
    unset( $fields[‘url’] );
    return $fields;
}
 
// Example source: http://wpsnipp.com/index.php/comment/remove-unset-url-field-from-comment-form/
 
?>

Вставьте эти строки в файл плагина, и все готово!

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

Ах, GIF-ы … Они были популярны в 1999 году, и они все еще популярны в 2014 году. Знаете ли вы, что одним из первых мемов был GIF танцующего ребенка ? Это были более простые времена, когда мы создавали «домашние страницы» в Yahoo! Geocities и наслаждайтесь надоедливым звуком обезьяны в ICQ каждый раз, когда друг отправлял нам сообщения …

В любом случае … Если вы хотите положить конец этой чепухе и запретить пользователям загружать GIF-файлы в медиатеку вашего веб-сайта, вы можете отключить загрузку GIF с помощью простого фрагмента кода, как показано ниже:

01
02
03
04
05
06
07
08
09
10
11
12
<?php
 
add_filter( ‘upload_mimes’, ‘upload_mimes_example’ );
 
function upload_mimes_example( $existing_mimes = array() ) {
    unset( $existing_mimes[‘gif’] );
    return $existing_mimes;
}
 
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/upload_mimes
 
?>

Пока-пока, четырехсекундные видеоклипы, которые не нужно смотреть более одного раза, но постоянно повторяются!

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

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