Как изменить permalink для типа записи в WordPress без плагинов

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

Почему нужно менять permalink для типа записи

Стандартный permalink для пользовательского типа записи может выглядеть так: site.ru/post-type/post-name. Но бывают ситуации, когда:

  • Требуется добавить в URL дополнительный сегмент (например, категорию или тег).
  • Нужно убрать базу типа записи, чтобы сделать URL короче.
  • Хотим сделать URL более читаемым и SEO-оптимизированным.
  • Нужно изменить структуру permalink без установки лишних плагинов.

Изменение permalink влияет не только на внешний вид URL, но и на работу маршрутизации запросов WordPress. Поэтому важно правильно настроить правила перезаписи (rewrite rules).

Как работает параметр rewrite при регистрации типа записи

При регистрации пользовательского типа записи через функцию register_post_type() одним из ключевых параметров является rewrite. Он может принимать булево значение или массив с параметрами:

register_post_type('book', array(
    'rewrite' => array(
        'slug' => 'library',
        'with_front' => false,
        'feeds' => true,
        'pages' => true
    ),
    // другие параметры
));

Здесь параметр slug задаёт базу URL для типа записи, with_front отвечает за добавление префикса из настроек постоянных ссылок, а feeds и pages управляют поддержкой RSS и пагинации.

Изменение permalink для типа записи: пример без плагинов

Рассмотрим задачу: нам нужно убрать базу типа записи из URL. Например, вместо site.ru/book/harry-potter сделать просто site.ru/harry-potter. Для этого нужно:

  1. Зарегистрировать тип записи с параметром rewrite => false.
  2. Добавить свои правила перезаписи.
  3. Подключить фильтр для обработки запроса.

Пример кода, который можно добавить в файл functions.php вашей темы или в кастомный плагин:

function wplessons_register_book_cpt() {
    register_post_type('book', array(
        'labels' => array(
            'name' => 'Книги',
            'singular_name' => 'Книга',
        ),
        'public' => true,
        'has_archive' => false,
        'rewrite' => false, // отключаем стандартный rewrite
        'supports' => array('title', 'editor', 'thumbnail')
    ));
}
add_action('init', 'wplessons_register_book_cpt');

// Добавляем правило перезаписи для типа записи book
function wplessons_add_rewrite_rules() {
    add_rewrite_rule('^([^/]+)?$', 'index.php?book=$matches[1]', 'top');
}
add_action('init', 'wplessons_add_rewrite_rules');

// Добавляем поддержку параметра запроса для типа записи
function wplessons_parse_request($query) {
    if (! $query->is_main_query()) {
        return;
    }
    if (isset($query->query['book'])) {
        $query->set('post_type', 'book');
        $query->set('name', $query->query['book']);
    }
}
add_action('pre_get_posts', 'wplessons_parse_request');

После добавления кода необходимо выполнить сброс правил перезаписи, перейдя в Админке в меню Настройки -> Постоянные ссылки и просто сохранив настройки.

Теперь URL книги будет выглядеть как site.ru/название-книги, без префикса /book/.

Добавление дополнительного сегмента в permalink типа записи

Если нужно добавить в URL дополнительный сегмент, например, library, чтобы URL выглядел так: site.ru/library/название-книги, это гораздо проще сделать с помощью параметра rewrite:

register_post_type('book', array(
    'labels' => array('name' => 'Книги'),
    'public' => true,
    'has_archive' => true,
    'rewrite' => array('slug' => 'library', 'with_front' => false),
    'supports' => array('title', 'editor', 'thumbnail')
));

Так WordPress автоматически создаст правильные правила перезаписи и будет корректно обрабатывать запросы.

Как добавить в URL категорию типа записи

Если у типа записи есть таксономия (например, 'genre'), и нужно включить её в URL, например, site.ru/library/fantasy/название-книги, то стандартный параметр rewrite не поможет. Потребуется более сложная настройка с кастомными правилами перезаписи.

Пример решения:

function wplessons_book_rewrite_rules() {
    add_rewrite_rule(
        '^library/([^/]+)/([^/]+)/?$',
        'index.php?book=$matches[2]&genre=$matches[1]',
        'top'
    );
}
add_action('init', 'wplessons_book_rewrite_rules');

function wplessons_book_post_link($post_link, $post) {
    if ($post->post_type === 'book') {
        $terms = wp_get_post_terms($post->ID, 'genre');
        if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) {
            $post_link = str_replace('%genre%', $terms[0]->slug, $post_link);
        } else {
            $post_link = str_replace('%genre%', 'uncategorized', $post_link);
        }
    }
    return $post_link;
}
add_filter('post_type_link', 'wplessons_book_post_link', 10, 2);

При регистрации типа записи нужно указать в параметре rewrite следующий slug с плейсхолдером:

register_post_type('book', array(
    'labels' => array('name' => 'Книги'),
    'public' => true,
    'has_archive' => true,
    'rewrite' => array('slug' => 'library/%genre%', 'with_front' => false),
    'supports' => array('title', 'editor', 'thumbnail')
));

Так WordPress поймёт, что в URL должен быть сегмент с таксономией.

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

Если задача меняется со временем или хочется упростить работу с permalink, можно использовать плагины. Например, Clearfy Pro позволяет гибко настраивать SEO и пермалинки, отключать базу типа записи и многое другое без сложного кода.

Также полезен WPRemark для SEO-оптимизации и улучшения структуры URL.

Рекомендации по работе с permalink типа записи

При изменении permalink важно помнить:

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

Описанные методы позволяют гибко управлять URL пользовательских типов записей в WordPress без установки дополнительных плагинов, что даёт максимальный контроль и оптимизацию под конкретные задачи.

Как создать собственный вид регистрации в WordPress с помощью плагинов
10.11.2025
Создание динамического AJAX-фильтра по категориям и таксономиям в WordPress
15.02.2026
Как использовать WPGPT для автоматизации создания контента в WordPress
02.02.2026
Как создать собственный шорткод в WordPress с примером кода
13.11.2025
Как создать меню в WordPress с помощью хука wp_nav_menu
01.11.2025