При создании записей, страниц или пользовательских типов записей (custom post types) WordPress автоматически формирует слаг (slug) — часть URL, которая обычно генерируется на основе заголовка и преобразуется в нижний регистр с дефисами. Однако бывают ситуации, когда нужно изменить этот стандартный алгоритм генерации slug: например, использовать заглавные буквы, убрать дефисы, заменить символы, добавить префиксы или суффиксы. В этой статье мы подробно разберём, как изменить автоматический регистратор slug в WordPress, чтобы получить ЧПУ URL, соответствующие вашим требованиям.
Почему нужно менять автоматический слаг в WordPress
По умолчанию WordPress использует функцию sanitize_title() для генерации slug из заголовка. Она приводит строку к нижнему регистру, заменяет пробелы на дефисы и удаляет недопустимые символы. Это удобно для SEO и совместимости, но не всегда подходит, например:
- Необходимо сохранить заглавные буквы для брендинга или визуального восприятия.
- Нужно использовать подчеркивания вместо дефисов.
- Хотите добавить уникальный префикс или суффикс в slug.
- Требуется убрать или заменить символы, которые по умолчанию удаляются.
В таких случаях стандартного поведения WordPress недостаточно, и необходимо вмешиваться программно.
Как WordPress генерирует слаг: разбор по шагам
Функция wp_unique_post_slug() отвечает за проверку уникальности slug, а sanitize_title() — за очистку и форматирование. Когда вы создаёте новую запись, WordPress применяет фильтр wp_unique_post_slug для окончательной обработки слага.
Чтобы изменить генерацию slug, мы можем использовать фильтр wp_unique_post_slug или sanitize_title. Рассмотрим оба варианта.
Фильтр sanitize_title: изменение базового формата slug
Этот фильтр позволяет обработать заголовок перед тем, как он превратится в slug. Например, чтобы сохранить заглавные буквы, можно написать так:
add_filter('sanitize_title', 'wptour_sanitize_title_keep_case', 10, 3);
function wptour_sanitize_title_keep_case($title, $raw_title, $context) {
if ($context === 'save') {
// Заменяем пробелы на подчеркивания вместо дефисов
$title = str_replace(' ', '_', $raw_title);
// Убираем нежелательные символы, кроме букв, цифр, подчеркиваний
$title = preg_replace('/[^A-Za-z0-9_]/', '', $title);
return $title;
}
return $title;
}Этот код заменяет дефисы на подчеркивания, сохраняет регистр букв и удаляет все символы, кроме латиницы, цифр и подчеркивания. Так вы получаете slug, который будет выглядеть например как My_Custom_Post, а не my-custom-post.
Фильтр wp_unique_post_slug: добавление логики уникальности
Если требуется добавить префиксы или суффиксы к слагу, можно использовать фильтр wp_unique_post_slug. Этот фильтр применяется после того, как WordPress сформировал уникальный slug.
add_filter('wp_unique_post_slug', 'wptour_add_prefix_to_slug', 10, 6);
function wptour_add_prefix_to_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
// Добавим префикс 'wptour-'
$prefix = 'wptour-';
if (strpos($slug, $prefix) !== 0) {
$slug = $prefix . $slug;
}
return $slug;
}Теперь при сохранении записи slug будет начинаться с wptour-, например: wptour-my-post. Это удобно для группировки или выделения записей в URL.
Практические примеры и кейсы использования
1. Сохранение регистра в slug и замена дефисов на подчеркивания
Если вы хотите, чтобы ваши URL выглядели как My_Custom_Post, а не my-custom-post, используйте фильтр sanitize_title из примера выше. Это полезно, если ваш бренд использует капслок или camelCase.
2. Добавление даты или категории в slug
Для SEO и структурированности можно автоматически добавлять дату или категорию перед slug. Это делается через wp_unique_post_slug или при сохранении записи через хук save_post.
add_action('save_post', 'wptour_add_date_to_slug', 20, 3);
function wptour_add_date_to_slug($post_ID, $post, $update) {
if ($post->post_type !== 'post') return;
// Получаем дату публикации в формате YYYYMMDD
$date_prefix = date('Ymd', strtotime($post->post_date));
$slug = $post->post_name;
// Проверяем, что дата не добавлена
if (strpos($slug, $date_prefix) !== 0) {
$new_slug = $date_prefix . '-' . $slug;
// Обновляем слаг записи
wp_update_post(array(
'ID' => $post_ID,
'post_name' => $new_slug
));
}
}<После сохранения slug будет выглядеть как 20240602-my-post. Это упрощает сортировку и анализ URL.
3. Использование плагина Clearfy для тонкой настройки URL
Если не хочется писать код, можно использовать плагин Clearfy. Он позволяет управлять формированием URL, отключать автофикс слагов и многое другое через удобный интерфейс.
Рекомендации по безопасности и совместимости
Изменяя логику генерации slug, будьте осторожны, чтобы не создавать конфликтов с существующими URL. Уникальность slug должна сохраняться, иначе возможны ошибки 404 или проблемы с SEO. Всегда тестируйте изменения на тестовом сайте.
Также учтите, что некоторые плагины и темы могут полагаться на стандартный формат slug, поэтому перед внедрением изменений проверьте совместимость.
Выводы
Изменение автоматического регистратора slug в WordPress — мощный инструмент для настройки URL под конкретные задачи. Используя фильтры sanitize_title и wp_unique_post_slug, вы можете полностью контролировать формат ЧПУ ссылок. Для удобства можно применять плагины, например, Clearfy, которые дают готовые решения без написания кода.
Примеры кода в статье помогут быстро внедрить нужные изменения и сделать ваши URL уникальными, удобными и соответствующими брендингу или структуре сайта.