Как правильно настроить URL для кастомных типов записей в WordPress

В WordPress кастомные типы записей (Custom Post Types, CPT) позволяют расширять функциональность сайта, добавляя новые виды контента. Однако, неправильная настройка ЧПУ (человеко-понятных URL) для CPT может привести к проблемам с поисковой оптимизацией, конфликтам с другими URL и ошибкам 404. В этой статье мы разберём, как правильно настраивать URL для кастомных типов записей, учитывая особенности перезаписи ссылок, работу с таксономиями и примеры практического кода.

Что такое URL Rewrites и почему это важно для кастомных типов записей

WordPress использует механизм перезаписи URL (rewrite rules) для преобразования человеко-понятных адресов в запросы к базе данных. Для стандартных записей и страниц всё настроено по умолчанию, а для кастомных типов записей нужно вручную задавать правила, чтобы URL выглядел логично и SEO-дружественно.

Если не настроить URL правильно, у вас могут возникнуть проблемы:

  • Ошибки 404 при попытке перейти на страницу записи CPT.
  • Дублирующийся контент из-за неправильных URL.
  • Потеря трафика и ухудшение индексации в поисковиках.

Поэтому важно уделить время правильной конфигурации.

Настройка кастомного типа записи с SEO-дружественным URL

Рассмотрим пример создания кастомного типа записи «portfolio» с ЧПУ в виде site.ru/portfolio/project-name. Для этого используется функция register_post_type с правильными параметрами.

function wpinfo_register_post_type_portfolio() {
    $args = array(
        'label'               => 'Портфолио',
        'public'              => true,
        'has_archive'         => 'portfolio',
        'rewrite'             => array('slug' => 'portfolio', 'with_front' => false),
        'supports'            => array('title', 'editor', 'thumbnail'),
        'show_in_rest'        => true,
    );
    register_post_type('portfolio', $args);
}
add_action('init', 'wpinfo_register_post_type_portfolio');

Здесь ключевые моменты:

  • has_archive со значением 'portfolio' создаст архив CPT по адресу /portfolio/.
  • rewrite['slug'] задаёт базовый сегмент URL для записей.
  • with_front = false отключает добавление префикса (например, если у вас в permalink стоит /blog/).

Не забудьте после изменения правил перезаписей обновить настройки постоянных ссылок в админке WordPress (Настройки → Постоянные ссылки), чтобы новые правила заработали.

Работа с пользовательскими таксономиями и их URL

Часто кастомные типы записей дополняются своими таксономиями (категориями, тегами). Важно, чтобы URL таксономий тоже были SEO-оптимизированы и не конфликтовали с другими страницами.

Пример регистрации таксономии «portfolio_category» для CPT «portfolio» с ЧПУ site.ru/portfolio/category/design/:

function wpinfo_register_taxonomy_portfolio_category() {
    $args = array(
        'label'             => 'Категории портфолио',
        'hierarchical'      => true,
        'rewrite'           => array('slug' => 'portfolio/category', 'with_front' => false),
        'show_in_rest'      => true,
    );
    register_taxonomy('portfolio_category', array('portfolio'), $args);
}
add_action('init', 'wpinfo_register_taxonomy_portfolio_category');

Так мы чётко структурируем пространство URL, что положительно влияет на SEO и удобство пользователей.

Избегаем конфликтов URL с другими типами записей

Если у вас на сайте много кастомных типов и таксономий, важно следить, чтобы их слаги не пересекались. Например, одновременно использовать portfolio для типа записи и для страницы или другой таксономии — плохая практика, которая приведёт к ошибкам.

Используйте уникальные и логичные префиксы, например portfolio для CPT, portfolio_category с префиксом portfolio/category и т.д.

Обработка вложенных URL и дополнительные параметры

Иногда требуется более сложная структура URL с вложенными таксономиями или дополнительными параметрами. Рассмотрим, как добавить в URL подкатегории или фильтры.

Для этого нужно расширять правила перезаписи вручную с помощью фильтра rewrite_rules_array или использовать хуки при регистрации таксономий.

Например, для отображения фильтра по кастомному полю в URL:

function wpinfo_add_custom_rewrite_rules($rules) {
    $new_rules = array(
        'portfolio/filter/([^/]+)/?$' => 'index.php?post_type=portfolio&filter=$matches[1]',
    );
    return $new_rules + $rules;
}
add_filter('rewrite_rules_array', 'wpinfo_add_custom_rewrite_rules');

В этом примере мы добавляем правило, которое позволяет использовать URL вида /portfolio/filter/value/, где value — значение фильтра.

Как проверить и отладить правила перезаписи URL

Для проверки, какие правила перезаписи есть в WordPress, используйте функцию print_r($wp_rewrite->rules) или плагины, например, Rewrite Rules Inspector.

Если URL для кастомного типа записи не работает, проверьте:

  • Обновлены ли постоянные ссылки в настройках.
  • Нет ли конфликтов в слагах.
  • Правильно ли зарегистрирован CPT и таксономии.
  • Не перекрываются ли правила другими плагинами или темами.

Полезные плагины для работы с URL и CPT

Для упрощения работы с перезаписями и URL можно использовать плагины:

  • Clearfy Pro — для оптимизации и управления SEO-настройками, включая управление URL.
  • ABC Pagination — для гибкой пагинации, которая часто необходима при кастомных архивах.

Использование этих инструментов облегчает настройку URL и повышает стабильность сайта.

Пример полной регистрации CPT с таксономией и ЧПУ

function wpinfo_register_portfolio_cpt_and_tax() {
    // Регистрируем CPT
    register_post_type('portfolio', array(
        'labels'       => array('name' => 'Портфолио'),
        'public'       => true,
        'has_archive'  => 'portfolio',
        'rewrite'      => array('slug' => 'portfolio', 'with_front' => false),
        'supports'     => array('title', 'editor', 'thumbnail'),
        'show_in_rest' => true,
    ));

    // Регистрируем таксономию
    register_taxonomy('portfolio_category', 'portfolio', array(
        'label'        => 'Категории портфолио',
        'hierarchical' => true,
        'rewrite'      => array('slug' => 'portfolio/category', 'with_front' => false),
        'show_in_rest' => true,
    ));
}
add_action('init', 'wpinfo_register_portfolio_cpt_and_tax');

После добавления этого кода в functions.php вашей темы или в кастомный плагин, не забудьте обновить постоянные ссылки.

Заключение

Правильная настройка URL для кастомных типов записей — залог удобства пользователей и хорошего SEO. Используйте уникальные слаги, структурируйте URL с помощью таксономий, проверяйте конфликты и обновляйте правила перезаписи. Если нужно, расширяйте функционал с помощью фильтров и плагинов, чтобы обеспечить гибкость и масштабируемость.

Как использовать автоматическое удаление старых записей в WordPress с помощью WP-Cron
21.03.2026
Как добавить динамические поля в WordPress: практическое руководство
09.03.2026
WooCommerce: как сделать автоматическое изменение стоимости товара при определённых условиях
08.05.2026
WooCommerce: как автоматически исключать товары из определённых категорий из корзины
15.05.2026
Автоматическое удаление старого контента в WordPress: эффективные методы и примеры
11.01.2026