В WordPress слаг (slug) — это уникальный идентификатор записи в URL, который формируется из заголовка поста или страницы. По умолчанию WordPress генерирует слаг автоматически, приводя заголовок к удобному для URL виду. Но часто возникает задача кастомизации этого процесса: например, добавлять префиксы, менять формат, удалять стоп-слова, создавать уникальные слаги для кастомных типов записей. В этой статье мы подробно разберем, как создать собственные генераторы слагов в WordPress, чтобы полностью контролировать этот процесс.
Почему стоит создавать собственный генератор слагов в WordPress
Автоматическая генерация слагов в WordPress может не всегда подходить под конкретные требования проекта. Например:
- Необходимо добавлять к слагу дату или другие параметры.
- Требуется удалять или менять специальные символы и стоп-слова.
- Хотим создавать слаги с уникальными условиями для разных типов записей.
- Нужно интегрировать с генерацией слагов SEO-плагинов или кастомных функций.
В таких случаях стандартный фильтр sanitize_title или sanitize_title_with_dashes можно расширить или заменить своим кодом.
Как работает стандартная генерация слагов в WordPress
Стандартный процесс генерации слагов происходит через функцию sanitize_title_with_dashes(), которая приводится к нижнему регистру, заменяет пробелы на дефисы, удаляет спецсимволы. Затем WordPress проверяет уникальность слага в БД и при необходимости добавляет суффикс с числом.
Для вмешательства в этот процесс существует фильтр wp_unique_post_slug, который позволяет изменить конечный слаг перед сохранением. Также фильтр sanitize_title или sanitize_title_with_dashes позволяет изменить строку до проверки уникальности.
Создаем собственную функцию генерации слагов в WordPress
Рассмотрим пример, как добавить к слагу кастомный префикс, удалить стоп-слова и заменить пробелы на подчеркивания.
function wpgenerate_custom_sanitize_title( $title, $raw_title, $context ) {
// Массив стоп-слов для удаления
$stop_words = array('и', 'в', 'на', 'с', 'по', 'для');
// Приводим заголовок к нижнему регистру
$title = mb_strtolower( $raw_title, 'UTF-8' );
// Удаляем стоп-слова
foreach ( $stop_words as $word ) {
$title = str_replace( ' ' . $word . ' ', ' ', $title );
}
// Заменяем пробелы на подчеркивания
$title = str_replace( ' ', '_', trim( $title ) );
// Удаляем все символы кроме букв, цифр и подчеркиваний
$title = preg_replace( '/[^a-z0-9_]+/', '', $title );
// Добавляем префикс
$prefix = 'wpg_';
$title = $prefix . $title;
return $title;
}
add_filter( 'sanitize_title', 'wpgenerate_custom_sanitize_title', 10, 3 );
Такой фильтр изменит любой слаг, добавив префикс wpg_ и применив кастомную логику очистки. Это простой, но наглядный пример.
Генерация слагов для кастомных типов записей
Часто нужно иметь разный формат слагов для кастомных типов записей (CPT). Для этого можно использовать фильтр wp_unique_post_slug и проверять тип записи в параметрах функции.
function wpgenerate_custom_unique_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
if ( 'my_custom_post_type' === $post_type ) {
// Добавляем дату к слагу для CPT
$date_prefix = date( 'Ymd' );
$slug = $date_prefix . '-' . $original_slug;
}
return $slug;
}
add_filter( 'wp_unique_post_slug', 'wpgenerate_custom_unique_slug', 10, 6 );
Таким образом, слаг для вашего кастомного типа записи будет начинаться с даты в формате ГГГГММДД, что удобно для сортировки и SEO.
Пример плагина для генерации слагов с дополнительными возможностями
Чтобы не прописывать код в functions.php, можно оформить его как небольшой плагин. Вот пример минимального плагина, который добавляет префикс и убирает стоп-слова:
/*
Plugin Name: WPG Slug Generator
Description: Кастомный генератор слагов для WordPress
Version: 1.0
Author: WPG
*/
function wpgenerate_plugin_sanitize_title( $title, $raw_title, $context ) {
$stop_words = array('и', 'в', 'на', 'с', 'по', 'для');
$title = mb_strtolower( $raw_title, 'UTF-8' );
foreach ( $stop_words as $word ) {
$title = str_replace( ' ' . $word . ' ', ' ', $title );
}
$title = str_replace( ' ', '-', trim( $title ) );
$title = preg_replace( '/[^a-z0-9-]+/', '', $title );
$prefix = 'wpg-';
$title = $prefix . $title;
return $title;
}
add_filter( 'sanitize_title', 'wpgenerate_plugin_sanitize_title', 10, 3 );
Плагин можно загрузить и активировать в панели WordPress. Он автоматически применит кастомные правила ко всем новым слагам.
Как избежать конфликтов и ошибок при кастомизации слагов в WordPress
При создании собственных генераторов слагов важно учитывать несколько рекомендаций:
- Убедитесь, что слаг всегда уникален. WordPress добавляет суффиксы при необходимости, но если ваша функция ломает этот процесс, могут возникнуть конфликты.
- Не используйте в слагах кириллицу и спецсимволы, чтобы избежать проблем с URL.
- Проверяйте работу фильтров на тестовом сайте, чтобы не сломать функционал сохранения записей.
- Если используете SEO-плагины, проверьте, как они взаимодействуют с вашей логикой генерации слагов.
Полезные плагины для работы со слагами в WordPress
Если не хотите писать код, можно использовать готовые решения. Например:
- WP SEO Slug — позволяет редактировать и настраивать слаги для постов и страниц.
- Clearfy Pro — мощный оптимизатор, в том числе с опциями для SEO и генерации слагов.
Заключение
Автоматическая генерация слагов — важный этап в публикации контента на WordPress. Возможность кастомизировать этот процесс позволяет создавать более удобные, SEO-дружественные URL и удовлетворять специфические требования проекта. Используйте фильтры sanitize_title и wp_unique_post_slug для внедрения собственной логики, а также тестируйте изменения, чтобы избежать проблем.