Всякий раз, когда вы работаете с 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-адреса.