Як видалити спеціальні символи з постійних посилань
Щоразу, коли ви працюєте з WordPress і сторонніми API, завжди є шанс, що ви зіткнетеся з проблемами, коли сторонній API не готовий обробляти певні символи, які існують у постійному посиланні.
Однак, залежно від налаштувань постійного посилання, це може бути чи ні. Наприклад, ви можете встановити постійні посилання на щось на зразок ?p=123 для кожної публікації. У такому випадку це не велика проблема.
Але якщо ви використовуєте «красиві постійні посилання», і ваше постійне посилання містить щось на кшталт символу торгової марки чи авторського права, це може спричинити проблеми щоразу, коли ви спілкуєтесь із зазначеним стороннім API.
По-перше, якщо ви використовуєте красиві постійні посилання, вони зазвичай створюються з заголовка публікації. Отже, якщо ви використовуєте щось на зразок All About The Acme Machine™, буде створено постійне посилання, яке містить щось подібне.
Наприклад, WordPress може автоматично генерувати щось на зразок цього: https://acme.com/all-about-the-acme®-machine/
І коли прийде час надіслати цю інформацію до стороннього API (або спробувати обробити її за допомогою чогось, що не підготовлено для таких символів), тоді ви зіткнетеся з проблемами.
На щастя, WordPress надає хук, який дозволяє нам обробляти постійні посилання до того, як вони будуть серіалізовані в базу даних. А саме, це хук wp_insert_post_data.
І в цьому випадку це працює так:
- Налаштуйте підключення на пізній етап процесу серіалізації,
- Шукайте символів, які можуть бути проблемними,
- Замініть їх порожнім рядком,
- Поверніть оновлену інформацію до WordPress для серіалізації.
Ось приклад видалення різних символів, таких як символи авторського права, символи торгових марок, символи реєстрації та інші їх варіанти як у закодованих форматах, так і в закодованих еквівалентах:
Зауважте, що функція приймає дані допису як аргумент, перевіряє, чи ви не працюєте з чернеткою, статтею, що очікує на розгляд, або автоматичною чернеткою, а потім видаляє вміст у назві допису за допомогою
Це може бути тонка проблема. Тобто, можливо, ви не зустрінете його у своїх зусиллях щодо розробки. З іншого боку, якщо ви це зробите, це надасть рішення, яке не тільки дозволить вам видалити певні символи з URL-адреси, але й дозволить вам зробити це в масштабованій.
Отже, коли ваші потреби зміняться, ви можете просто оновити виклик preg_replace символами, які потрібно видалити з вашої URL-адреси.