Slug WordPress
Оригинальное название: WordPress slug
Коротко
Короткое машинное имя объекта WordPress — записи, рубрики, метки, автора, типа записи — из латиницы, цифр и дефисов, по которому объект ищут в адресах и коде.
Что такое «Slug WordPress»
Слово пришло из газетного жаргона: так называли рабочее название материала в редакции. В WordPress slug есть почти у всего, что попадает в адрес или к чему обращаются из кода. У записи и страницы он хранится в поле post_name, у рубрики и метки — в таблице терминов, у пользователя — в поле user_nicename и превращается в адрес архива автора. Свой slug есть и у зарегистрированных типов записей и таксономий: от него зависят адреса вида /catalog/….
Практическую сторону — как подобрать и поменять адрес конкретной публикации — разбирает страница slug записи. Здесь — об общих правилах.
Как WordPress формирует slug
Из названия функция sanitize_title() делает безопасную строку: переводит в нижний регистр, убирает знаки препинания и HTML, заменяет пробелы дефисами. Из «Hello World!» получится hello-world. Кириллицу ядро по умолчанию оставляет как есть, и в адресе она кодируется в длинную цепочку вида %d0%bf%d1%80…. Поэтому на русскоязычных сайтах почти всегда ставят плагин транслитерации, например Cyr-To-Lat, — до наполнения сайта, а не после.
Slug не должен повторяться в своих рамках. Если такой уже занят, WordPress добавит к новому суффикс -2, -3. У рубрик повторы проверяются внутри одной таксономии.
Пример: поиск объекта по slug
В коде темы slug надёжнее ID: на тестовой и боевой копиях ID могут не совпадать, а slug одинаковый.
$term = get_term_by( 'slug', 'novosti', 'category' );
$page = get_page_by_path( 'o-kompanii/kontakty' );
$news = get_posts( [
'category_name' => 'novosti', // тоже slug
'posts_per_page' => 5,
] );
Конфликты адресов
Поскольку разные объекты делят одно пространство адресов, бывают пересечения: страница /news/ и рубрика со slug news при некоторых настройках постоянных ссылок спорят за один адрес, и открывается не то. Похожая ловушка — slug типа записи, совпадающий с существующей страницей. Такие конфликты лучше разводить на этапе проектирования структуры.

