У попередніх частинах цієї серії ми вивчили 30 WordPress фільтрів. У цьому уроці ми розглянемо чергові десять фільтрів і наведемо приклади їх практичного застосування.

Приступимо!

Фільтр для стилю галереї за замовчуванням

WordPress застосовує стилі до галереї з допомогою шорткода на основі якихось визначених CSS — стилів. Ви можете змінити їх вигляд, використовуючи фільтр use_default_gallery_style.

Приклад: відключаємо CSS – правила

Припустимо, ви вже прописали набір правил для теми у файлі style.css і не потребуєте правила CSS за замовчуванням. Використовуйте код, наведений нижче, щоб відключити їх:

Готово! Тепер WordPress не буде додавати тег з набором CSS – правил перед шорткодом .

Фільтрація вкладених URL-адрес

Цей фільтр працює з вкладеним URL – адресами, отриманими за допомогою функції з тією ж назвою wp_get_attachment_url().

Приклад: як уникнути повідомлень «Змішаний контент»

У разі використання шифрування на вашому сайті методом SSL, функція wp_get_attachment_url()може повернути URL з заголовком HTTP замість HTTPS, і результатом стане повідомлення «mixed content«. За допомогою коду, наведеного нижче, можна уникнути подібної ситуації:

Установка типу контенту для електронної пошти за промовчанням

За замовчуванням ви можете надсилати текстові листи в WordPress, поки функція wp_mail() використовує параметр text/plain в якості типу вмісту. З допомогою фільтра wp_mail_content_type можна це змінити.

Приклад: розсилаємо листи з WordPress в HTML — форматі

Якщо ви хочете відправляти електронну пошту в HTML-форматі, цей фрагмент коду, щоб змінити параметр «тип вмісту для листів»:

Зберігаємо IP — адреса коментатора

WordPress зберігає IP-адреса кожного коментатора в таблиці бази даних. Якщо вам необхідно використовувати ці дані – застосовуйте фільтр pre_comment_user_ip.

Приклад: зберігаємо дійсний IP – адреса коментатора

У випадку, коли користувач, коментує ваш пост, використовує проксі, WordPress зафіксує IP — адресу проксі, але не реальний адресу користувача. Справжній IP – адреса містить в HTTP – заголовку X-Forwarded-For. Код, наведений нижче, використовує функцію, яка бере потрібну адресу з заголовка і поміщає його в базу даних:

Якщо вам цікаво вивчити HTTP — заголовок X-Forwarded-For, відвідайте Wikipedia для додаткової інформації.

Зміна кількості резервних копій для збережених записів

Можливо, вам відомо, що WordPress має можливість зберігати версії публікацій, а також, бути може, ви знаєте, що існує можливість встановлювати кількість резервних копій постів шляхом додавання константи (WP_POST_REVISIONS) в файл wp-config.php.

А чи знаєте ви про те, що можна змінювати кількість версій не тільки для різних типів публікацій, але і в тому числі для окремих публікацій? Можна. Для цього призначений фільтр wp_revisions_to_keep.

Приклад: відключаємо можливість редагування певних типів публікацій

Можна змінювати кількість можливих поправок за допомогою змінної $post, але ми йдемо красивим та простим шляхом, тому обмежимо кількість можливих ревізій публікації для користувацького типу публікацій «event«:

post_type ) {
return 0;
}
return $num;
}
// Джерело прикладу: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_revisions_to_keep
?>

У Кодексі WordPress можете знайти опис змінної $post і самостійно придумати нові способи застосування цього фільтра. Не забувайте ділитися вашими ідеями!

Перезапис шорткода

Шорткод дозволяє додавати текст до виведеної картинці. Якщо потрібно змінити вид, в якому виводиться цей шорткод – використовуйте приклад, який ми розберемо нижче.

Приклад: підписи до зображень з допомогою HTML5 — розмітки

В HTML5 з’явилися два нових тегів для роботи з зображеннями: і . У цьому прикладі ми перепишемо розмітку шорткодом з допомогою цих тегів:

»,
‘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’]
. ‘ class=»caption’ . esc_attr( $attr[‘align’] )
. ‘»‘ . ‘style=»max-width:’ . ( 10 + (int) $attr[‘width’] ) . ‘px;» ‘;
$output = «;
$output .= do_shortcode( $content );
$output .= «. $attr[‘caption’] . «;
$output .= «;
return $output;
}
// Джерело прикладу: http://codex.wordpress.org/Plugin_API/Filter_Reference/img_caption_shortcode
?>

Поекспериментуйте з цим кодом. Можливо, ви знайдете спосіб не використовувати ID для тега .

Додаємо класи публікацій

Фільтр і однойменна функція body_class популярна серед WordPress розробників. А як щодо post_class? Чи знаєте ви про те, що є і фільтр, і функція для додавання css класів до виведеним постам?

Приклад: Додаємо css клас для першого поста в циклі

Прекрасним прикладом буде користувальницький клас, який буде працювати тільки для першого поста в циклі публікацій. Розберемо, як це працює:

current_post ) {
$classes[] = ‘first-post’;
}
return $classes;
}
// Джерело прикладу: http://www.billerickson.net/code/first-post-class/
?>

Відтепер вам не потрібно використовувати псевдоклас :first в CSS і турбуватися про кросбраузерною сумісності – просто застосовуйте клас .first-post!

Додаємо користувальницькі поля для вкладень

В WordPress вкладення по суті дуже схожі на користувацькі типи публікацій, які можуть бути розширені так само, як і будь-які інші типи публікацій – просто трохи по-іншому. Фільтр attachment_fields_to_edit дозволить налаштувати поля для процесу завантаження або редагування вкладень.

Приклад: додавання ліцензійної інформації до завантажуваних зображень

Припустимо, у вас є блог, орієнтований на публікацію фотографій і вам необхідно встановлювати ліцензію на кожну завантажену фотографію. В цей раз ми скористаємося дією і додамо поле «License» для вкладень:

ID ‘license’, true );
$form_fields[‘license’] = array(
‘value’ => $field_value ? $field_value : »,
‘label’ => __( ‘Ліцензія’ ),
‘helps’ => __( ‘Визначає тип ліцензії для фотографії’ )
);
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 );
}
}
// Джерело прикладу: http://codex.wordpress.org/Plugin_API/Filter_Reference/attachment_fields_to_edit
?>

Дивовижний приклад того, як можна розширити основні функції WordPress не вдаючись до редагування коду в ядрі.

Змінюємо довжину тексту витягу з публікації

За замовчуванням, витримка складається з перших 55 слів кожної публікації. Форматування до них не застосовується. Непарне число слів. Якщо виникає бажання змінити це число – використовуйте фільтр excerpt_length.

Приклад: змінюємо кількість слів у витягах з публікацій

Припустимо, я хочу залишити тільки 15 слів, тому що роблю сайт в стилі Pinterest і у мене є зовсім небагато місця для резюме публікацій. Все що мені потрібно для цього – взяти функцію, яка повертає число, і прив’язати її до крихітному фільтру:

Простіше простого!

Налаштовуємо меню в панелі адміністрування

На сторінках панелі адміністрування WordPress, безпосередньо під списком елементів (таких як «Публікації», «Сторінки», «Користувачі», «Медіа-файли і так далі), є кілька розділів, де ви можете обрати елементи та провести з ними потрібні дії. Фільтр, який описаний нижче, дозволить нам налаштувати їх під себе.

Приклад: відключаємо кошик

Уявіть, що у вас є новинний сайт, і ваш редактор тільки що відправив у кошик безліч статей. Якщо вам не потрібна функція кошика, просто відключіть її:

Змінна $screenid фільтра відповідає за ім’я розділу в панелі адміністрування, в який ви збираєтеся внести зміни. Список імен знаходиться на сторінці Довідник панелі адміністрування @ API Кодексу WordPress.

Кінець четвертої частини

Ми підійшли до кінця четвертої десятки з 50 фільтрів. Сподіваюся, вам сподобалася стаття, і ви почерпнули щось нове для себе. Побачимося на наступному уроці!

Мені цікаві ваші думки з приводу того, що нового ви дізналися. Залишайте ваші коментарі, якщо вам сподобалася стаття, не соромтеся поділитися нею!

Переклад статті «50 Filters of WordPress: Filters 31-40» був підготовлений дружною командою проекту Сайтостроение від А до Я.