В WordPress слаги (slug) — это уникальные идентификаторы для постов, таксономий и пользовательских типов записей, которые используются в URL. По умолчанию WordPress преобразует слаги к нижнему регистру для обеспечения совместимости и единообразия URL. Однако иногда возникает необходимость сохранить или изменить регистр слагов — например, для SEO-стратегий, брендирования или интеграции с внешними системами.
Почему WordPress по умолчанию преобразует слаги к нижнему регистру
WordPress автоматически приводит слаги к нижнему регистру, чтобы избежать проблем с дублированием URL и обеспечить корректную работу на всех серверах, которые могут быть чувствительны к регистру. Это поведение встроено в ядро и влияет на создание постов, таксономий и пользовательских типов записей.
Тем не менее, бывают случаи, когда необходимо сохранить регистр слага или изменить его на верхний или смешанный. В стандартном функционале WordPress это сделать сложно, но с помощью фильтров и хука можно добиться желаемого результата.
Как изменить регистр слагов в WordPress с помощью фильтра wp_unique_post_slug
Для изменения регистра слагов при создании или обновлении постов можно использовать фильтр wp_unique_post_slug. Он позволяет модифицировать сгенерированный slug перед сохранением в базу данных.
Ниже пример функции, которая сохраняет слаг в верхнем регистре (например, для демонстрации, в реальности верхний регистр в URL — не лучший вариант):
function wp7_change_slug_case($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
// Преобразуем слаг в верхний регистр
$slug = strtoupper($slug);
return $slug;
}
add_filter('wp_unique_post_slug', 'wp7_change_slug_case', 10, 6);Обратите внимание, что такой подход может привести к проблемам с SEO и доступностью, так как большинство веб-серверов и браузеров воспринимают URL в нижнем регистре. Используйте с осторожностью.
Изменение регистра слагов для таксономий
Для таксономий WordPress жестко приводит слаги к нижнему регистру. Однако можно перехватить процесс сохранения термина с помощью хука pre_insert_term и изменить слаг до сохранения.
function wp7_preserve_taxonomy_slug_case($slug, $term, $taxonomy) {
// Пример: сохраняем слаг с заглавной первой буквой
$slug = ucfirst($slug);
return $slug;
}
add_filter('pre_insert_term', 'wp7_preserve_taxonomy_slug_case', 10, 3);Этот код позволяет сохранить первый символ слага с заглавной буквы, остальные символы останутся в нижнем регистре. Это компромисс между стандартом и индивидуальным стилем.
Использование плагинов для управления слагами и их регистром
Если вы не хотите писать код, существуют плагины, которые позволяют редактировать слаги более гибко:
- Permalink Manager Lite — позволяет настроить URL для постов и таксономий с удобным интерфейсом.
- Custom Permalinks — дает возможность вручную прописывать любые URL для записей и страниц.
- WP Slug Case — специализированный плагин для изменения регистра слагов (редко встречается, требует проверки совместимости).
Использование плагинов уменьшает риск ошибок и конфликтов, особенно если вы не уверены в коде.
Практические советы при изменении регистра слагов
Изменение регистра слагов может вызвать проблемы с SEO и работой сайта, если не соблюдать осторожность. Вот несколько рекомендаций:
- Проверьте, поддерживает ли ваш сервер регистрозависимые URL.
- Используйте постоянные редиректы 301 при изменении URL слагов, чтобы сохранить позиции в поисковиках.
- Тестируйте изменения на локальной копии сайта или staging-сервере.
- Избегайте смешанного регистра в URL, чтобы не создавать дубли и путаницу.
Пример редиректа после изменения слага
Если вы изменили регистр слага, добавьте в файл .htaccess правило для редиректа:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/old-slug/$ [NC]
RewriteRule ^ /New-Slug/ [R=301,L]Это обеспечит перенаправление со старого URL на новый с нужным регистром.
Как изменить регистр слагов у пользовательских типов записей (CPT)
При регистрации CPT через функцию register_post_type параметр rewrite позволяет указать slug, но регистр обычно приводит к нижнему. Чтобы изменить регистр динамически, можно использовать фильтр post_type_link для модификации ссылки.
function wp7_custom_cpt_slug_case($post_link, $post, $leavename, $sample) {
if ('your_cpt' == $post->post_type) {
// Изменяем регистр слага CPT в ссылке
$post_link = str_replace('/your_cpt/', '/Your_CPT/', $post_link);
}
return $post_link;
}
add_filter('post_type_link', 'wp7_custom_cpt_slug_case', 10, 4);Этот код меняет отображение слага в ссылке, но реальный слаг в БД останется в нижнем регистре. Для полного изменения регистра потребуется более глубокое вмешательство.
Итоги и рекомендации
Изменение регистра слагов в WordPress — задача нетривиальная, так как платформа изначально ориентирована на нижний регистр для URL. Тем не менее, с помощью фильтров и хуков можно реализовать сохранение или изменение регистра для постов, таксономий и пользовательских типов записей.
Используйте кодовые примеры из этой статьи как основу, адаптируя под свои задачи. Не забывайте про SEO и совместимость с сервером. При сомнениях лучше использовать проверенные плагины с возможностью ручного редактирования URL.