В процессе разработки сайтов на WordPress часто возникает необходимость изменить или удалить slug (человекочитаемый идентификатор в URL) для кастомного типа записи (Custom Post Type, CPT). Это может быть связано с изменением структуры сайта, улучшением SEO или исправлением ошибок. Однако прямое изменение slug без правильных действий может привести к потере данных, проблемам с отображением записей и ошибкам 404. В этой статье подробно разберём, как безопасно удалить или изменить slug у CPT, сохранив все данные и корректную работу сайта.
Что такое slug кастомного типа записи и зачем его менять?
Slug для CPT — это часть URL, которая указывает на тип записи, например, https://site.ru/portfolio/project1, где portfolio — slug CPT. Он задаётся при регистрации типа записи через параметр rewrite.
Причины изменения slug могут быть разные:
- Изменение структуры URL для улучшения SEO.
- Упрощение или стандартизация адресов.
- Удаление лишнего уровня вложенности.
- Исправление ошибки в названии slug.
При этом важно сохранить старые URL или настроить редиректы, чтобы не потерять трафик и не ухудшить позиции сайта.
Регистрация CPT с изменяемым slug: базовый пример
Рассмотрим пример регистрации CPT с функцией, у которой префикс wpdevelop_. Для изменения slug достаточно изменить параметр rewrite['slug']:
function wpdevelop_register_portfolio_cpt() {
$args = [
'labels' => [
'name' => 'Портфолио',
'singular_name' => 'Проект',
],
'public' => true,
'has_archive' => true,
'rewrite' => ['slug' => 'my-portfolio'], // измененный slug
'supports' => ['title', 'editor', 'thumbnail'],
];
register_post_type('portfolio', $args);
}
add_action('init', 'wpdevelop_register_portfolio_cpt');
После изменения slug необходимо сбросить правила перезаписи (permalinks), иначе новые URL не будут работать. Для этого достаточно в админке перейти в Настройки → Постоянные ссылки и просто сохранить настройки.
Как удалить slug CPT из URL и показывать записи на корне сайта
Иногда хочется убрать slug CPT из URL, чтобы записи отображались как https://site.ru/project1. Это можно сделать, но с осторожностью, чтобы не конфликтовать с другими типами контента.
Для этого в аргументах CPT укажем 'rewrite' => ['slug' => '', 'with_front' => false] и добавим фильтр на перезапись:
function wpdevelop_register_portfolio_cpt_root() {
$args = [
'labels' => [
'name' => 'Портфолио',
'singular_name' => 'Проект',
],
'public' => true,
'has_archive' => false, // архив отключаем, чтобы не было конфликта
'rewrite' => [
'slug' => '',
'with_front' => false,
],
'supports' => ['title', 'editor', 'thumbnail'],
];
register_post_type('portfolio', $args);
}
add_action('init', 'wpdevelop_register_portfolio_cpt_root', 0);
Далее нужно добавить фильтр для поддержки правильного поиска и запросов:
function wpdevelop_portfolio_post_link($post_link, $post) {
if ('portfolio' === $post->post_type && 'publish' === $post->post_status) {
$post_link = home_url('/' . $post->post_name . '/');
}
return $post_link;
}
add_filter('post_type_link', 'wpdevelop_portfolio_post_link', 10, 2);
Не забудьте после изменений сбросить правила перезаписи.
Этот способ подходит, если на сайте нет конфликтов с другими URL, например, страницами или записями с таким же slug.
Как сохранить SEO и данные при смене slug CPT
Изменение slug меняет URL, что может привести к ошибкам 404 и потере посетителей. Чтобы этого избежать, рекомендуем добавить 301 редиректы со старых адресов на новые. Например, если старый slug был portfolio, а новый my-portfolio, добавьте в .htaccess или через плагин редиректов правило:
Redirect 301 /portfolio/ /my-portfolio/
Также можно использовать плагин Clearfy Pro, который позволяет централизованно управлять редиректами и оптимизацией URL, что упростит задачу.
Практические советы и рекомендации
1. Всегда делайте бэкап перед изменениями
Перед изменением slug CPT создайте полную резервную копию базы данных и файлов сайта. Это позволит быстро восстановиться в случае ошибок.
2. Тестируйте изменения на локальном или тестовом сервере
Не вносите изменения напрямую на живом сайте. Проверяйте работу новых URL и редиректов в тестовой среде.
3. Учитывайте возможные конфликты URL
Если убираете slug CPT, убедитесь, что названия записей не пересекаются с другими типами контента, иначе WordPress не сможет корректно определить, какую запись показывать.
4. Используйте SEO-плагины для управления редиректами
Плагины вроде Clearfy Pro или SEOPress помогут настроить 301 редиректы без ручного редактирования .htaccess.
Заключение
Изменение или удаление slug кастомного типа записи в WordPress — задача, требующая аккуратности и понимания работы системы перезаписи URL. Следуя описанным рекомендациям и используя приведённые примеры кода, вы сможете безопасно обновить структуру URL, сохранив данные и SEO-позиции вашего сайта. Не забывайте всегда тестировать изменения и создавать резервные копии.