На сьогоднішній день WordPress – одна з найбільш популярних систем управління контентом у світі. Одна з причин, завдяки яким вона заслужила таку популярність, є можливість швидкого розширення функціоналу. У цій серії статей ми розповімо про фільтрах – одним з кращих способів точного налаштування WordPress.

В основі цього методу лежать хуки — фільтри і дії WordPress. Без них ми не зможемо скористатися розширюваністю WordPress повною мірою. У цій серії статей ми зупинимося на фільтрах для WP — одному з кращих методів налаштування для цієї CMS. Серія складається з семи частин. У них все наше увагу ми зосередимо на наступному:

  • визначимо поняття WordPress-фільтра;
  • розглянемо методи їх впровадження в систему;
  • наведемо приклади використання (у статті, яку ви зараз читаєте);
  • вивчимо 50 WordPress – фільтрів (по десять у кожній статті) з прикладами;
  • і напишемо підсумкову статтю, в якій резюмуємо проведену роботу.

Є буквально сотні WordPress-фільтрів в ядрі і ці 50 прикладів лише мала частина з них (близько 10%), так що ви самі можете додати щось з того списку і запропонувати приклади використання нових фільтрів.

У будь-якому випадку, час для введення в WordPress-фільтри настав. Давайте почнемо!

Що таке WordPress — фільтр

У Кодексі WordPress фільтрів дано наступне визначення:

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

Отже, фільтр це функція на php, яка записується в стек викликів вбудованої системи фільтрів WordPress. Але в собі вона може містити сторонні функції та інші конструкції. Фільтр є одним із двох видів хуків (hooks) у WordPress. Другий — дія (action), але це предмет для іншої серії статей.

Можливо, ця тема здасться вам складною, але фільтри (як і дії) дуже легко зрозуміти. На початку мого знайомства з цими поняттями мені самому здалося все досить складним і заплутаним, але, побачивши, наскільки вони прості, я познайомився з сотнями фільтрів і дій, просто вивчаючи кодекс WordPress або копаючись у вихідному коді. Безумовно, вам також варто дізнатися про сотні фільтрів. Але для початку ви повинні навчитися їх використовувати.

Використовуємо фільтри в WordPress

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

У цій статті ми збираємося зробити чотири речі:

  • Створимо функцію фільтра;
  • Зробити з неї хук;
  • Прибрати функцію фільтра;
  • Створити свій власний фільтр.

Створюємо функцію і прикріплюємо її до фільтру

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

Давайте припустимо, що ми будемо писати плагін для видалення голосних у заголовках публікацій. Замість того щоб писати «видалити голосні в моїх постах», ми пишемо «підключити функцію видалення голосних із заголовків моїх публікацій до фільтру».

Складно? Насправді, немає. У наведеному нижче прикладі, ми напишемо код функції, яка видаляє голосні у всьому тексті:

Функція бере рядок заголовка $title, видаляє голосні і повертає рядок. Досить просто, вірно? Тепер стрибнемо на рівень вище, зробимо хук, і причепимо його до фільтру:

Помітили нову функцію? Поглянемо на add_filter():

  • $tag (обов’язковий параметр) – ім’я фільтра;
  • $function_to_add (обов’язковий параметр) – ім’я функції для хука;
  • $priority (опція) – Ціле число для визначення моменту виконання функції. За замовчуванням дорівнює 10: Функція спрацює раніше, якщо ви зменшите значення, і пізніше, якщо ви підвищите його;
  • $accepted_args (опція) — Значення, що потрібне щоб визначити кількість аргументів, які пропускає фільтр. Значення за замовчуванням равно1.

Видаляємо фільтр

Звичайно ж, ми також можемо прибрати функцію, прикріплену до фільтру. Для цього використовуємо функцію remove_filter(). І дивимося, як вона працює:

Параметри такі ж, як і у випадку з add_filter():

  • $tag (обов’язковий параметр) – ім’я фільтра;
  • $function_to_remove (обов’язковий параметр) – ім’я функції для видалення;
  • $priority (опція) — пріоритет функції (визначено при першому підключенні функції).

Ще одна функція, remove_all_filters(), у якої всього лише два параметри ($tag і $priority), в яких зазначаються ім’я функції і пріоритет. Ім’я функції говорить сама за себе. Вона відключає всі функції, причеплені до фільтру.

Створюємо свій власний фільтр

Хочете знати, як створюються фільтри? Для цього існує спеціальна функція apply_filters(), що знаходиться в ядрі. Звичайно ж, її можна використовувати і поза ядра, і це означає те, що ми можемо створювати фільтри всередині наших плагінів.
Подивимося, як це працює на практиці:

  • $tag (обов’язковий параметр) – ім’я привязываемой функції;
  • $value (обов’язковий параметр) — значення, яке буде змінюватися функцією, підключених до фільтру через add_filter();
  • $var1, $var2 і так далі (опціонально) – параметри фільтра (стільки, скільки буде потрібно). Функція фільтра може використовувати ці параметри, але вони не зможуть бути повернуті функціями.

Подумаємо над таким прикладом: Уявіть, що ви пишете функцію, яка повертає лише відому цитату Пітера Гріффіна:

Якщо ви хочете дати можливість користувачеві відфільтрувати цю цитату (не чіпаючи код плагіна), вам потрібно використовувати функцію apply_filters() наступним чином:

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

Тепер, кожен раз, коли буде викликана функція peter_griffin_quote(), цитата Пітера буде дещо видозмінюватися, при цьому код плагіна залишиться незмінним. Відмінно!

Висновок

Чим більше ви працюєте з фільтрами, тим веселіше йдуть справи. Є сотні фільтрів, і, вивчаючи їх, ви кожен раз підходите на один крок ближче до того, щоб стати WordPress — гуру. У наступній частині цієї серії статей ми збираємося розповісти про 10 WordPress — фільтрах:

  • login_errors;
  • comment_post_redirect;
  • allowed_redirect_hosts;
  • body_class;
  • locale;
  • sanitize_user;
  • the_content;
  • the_password_form;
  • the_terms;
  • wp_mail_from.

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

І якщо вам сподобалося те, що ви читаєте в цій статті, не забудьте поділитися нею!

Побачимося на наступному уроці!

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