В WordPress URL типа записей (post type slug) напрямую влияет на структуру ссылок и SEO вашего сайта. Иногда возникает необходимость удалить или изменить этот slug для стандартных или пользовательских типов записей. В этой статье подробно разберём, как это сделать правильно, избегая ошибок, которые могут привести к 404-страницам или конфликтам с другими URL.
Что такое URL типа записей (post type slug) в WordPress
Каждый тип записи в WordPress имеет уникальный slug, который формирует часть URL. Например, для стандартного типа записи «post» это обычно site.ru/post/post-name/. Для пользовательских типов записей (custom post types) slug задаётся при регистрации типа записи и обычно выглядит как site.ru/custom-slug/post-name/.
Этот slug важен, так как он влияет на удобство навигации, SEO-оптимизацию и структуру ссылок. Однако бывает, что по разным причинам нужно изменить или вообще убрать этот slug из URL.
Почему может понадобиться изменить или удалить slug типа записи
- Упрощение URL: чтобы сделать ссылки короче и понятнее.
- SEO-оптимизация: минимизация вложенности в URL может положительно влиять на ранжирование.
- Избежание конфликтов: при совпадении slug с другими страницами или типами записей.
- Редизайн структуры сайта: изменение логики URL без изменения контента.
Как изменить slug пользовательского типа записи
Если вы создаете пользовательский тип записи с помощью функции register_post_type, то slug задаётся в параметре rewrite['slug']. Чтобы изменить slug, достаточно изменить этот параметр и обновить правила перезаписи (перегенерировать rewrite rules).
Пример: изменение slug для типа записи «book»
function wptricks_register_post_type_book() {
$args = array(
'label' => 'Книги',
'public' => true,
'rewrite' => array('slug' => 'literatura'), // Новый slug
'has_archive' => true,
);
register_post_type('book', $args);
}
add_action('init', 'wptricks_register_post_type_book');После изменения slug необходимо перейти в Настройки > Постоянные ссылки и нажать «Сохранить изменения» — это обновит правила перезаписи и сделает ссылки работоспособными.
Как убрать slug полностью (удалить из URL)
Удаление slug из URL — более сложная задача и в WordPress не предусмотрена из коробки. Для этого нужно использовать фильтры rewrite и обработку запросов.
Убирая slug, вы фактически выводите записи типа «book» как будто они обычные записи или страницы, что может вызвать конфликты с другими URL. Поэтому важно обеспечивать уникальность имён записей.
Пример удаления slug для типа записи «book»
function wptricks_remove_cpt_slug($post_link, $post) {
if ('book' === $post->post_type && 'publish' === $post->post_status) {
$post_link = str_replace('/book/', '/', $post_link);
}
return $post_link;
}
add_filter('post_type_link', 'wptricks_remove_cpt_slug', 10, 2);
function wptricks_parse_request($query) {
if (! $query->is_main_query() || 2 !== count($query->query) || ! isset($query->query['page'])) {
return;
}
// Проверяем по слагу записи
$query->set('post_type', array('post', 'book', 'page'));
}
add_action('pre_get_posts', 'wptricks_parse_request');Этот код убирает slug book из ссылок и перенаправляет запросы на соответствующие записи. Однако для корректной работы нужно внимательно тестировать и избегать дублирования URL.
Плагины для управления slug и URL типов записей
Если вы не хотите писать код, есть плагины, которые могут помочь:
- Clearfy Pro — включает опции для управления URL и оптимизации структуры ссылок.
- Custom Post Type Permalinks — позволяет настраивать слуги для типов записей без кода.
- Remove CPT Base — плагин для удаления slug пользовательских типов записей.
Использование плагинов удобно, но всегда проверяйте совместимость с вашей темой и другими плагинами.
Как безопасно изменить slug стандартных типов записей
Для стандартных типов записей, таких как «post» или «page», изменить slug сложнее — WordPress жестко привязывает их к структуре.
Однако можно изменить базовый префикс записей, изменив базу для таксономий или используя фильтр post_type_link для формирования ссылок.
Пример изменения базового префикса для записей (post)
function wptricks_change_post_slug($post_link, $post) {
if ('post' === $post->post_type && 'publish' === $post->post_status) {
$post_link = str_replace('/blog/', '/', $post_link); // Убираем /blog/ или меняем на другой
}
return $post_link;
}
add_filter('post_type_link', 'wptricks_change_post_slug', 10, 2);Для этого также нужно обновить правила перезаписи, чтобы WordPress правильно обрабатывал новые URL.
Советы и рекомендации
- Всегда делайте бэкап базы данных перед изменениями в URL.
- После изменения slug обновляйте правила перезаписи через настройки постоянных ссылок.
- Проверяйте на наличие конфликтов URL и избегайте одинаковых слагов для разных типов записей.
- Используйте редиректы 301 при изменении URL, чтобы сохранить позиции в поисковых системах.
- Тестируйте изменения на тестовом сайте перед внедрением на живом.
Вывод
Изменение или удаление slug типа записей в WordPress — задача техническая, требующая аккуратности и понимания внутренней работы системы. С помощью правильных хуков и фильтров можно гибко настраивать структуру URL под свои задачи. Если вы не хотите заниматься кодом, плагины из раздела SEO и оптимизации помогут реализовать необходимые изменения.