Как изменить тип записи (post type) в WordPress без потери SEO и ссылок

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

Почему нельзя просто поменять post type вручную?

Тип записи в WordPress определяет структуру URL, логику обработки контента и связи с таксономиями. Если вы просто измените post_type через базу данных или код, старые URL перестанут работать, поскольку WordPress формирует их по новой логике. Плюс, многие SEO-плагины и внутренние механизмы ориентируются на тип записи, и без корректного перенаправления вы потеряете посетителей и позиции в поиске.

Поэтому задача сводится не только к смене типа записи, но и к грамотной настройке 301 редиректов и обновлению внутренних ссылок.

Подготовка: Создание нового типа записи

Перед переносом контента убедитесь, что новый тип записи зарегистрирован корректно. Например, с помощью функции register_post_type(). Вот базовый пример регистрации кастомного типа записи в файле functions.php вашей темы или плагина:

function wpkeys_register_new_post_type() {
    $args = array(
        'label' => 'Новый тип',
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'novyj-tip'),
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields')
    );
    register_post_type('novyj_tip', $args);
}
add_action('init', 'wpkeys_register_new_post_type');

Убедитесь, что пермалинки обновлены (Перейдите в Настройки > Постоянные ссылки и нажмите "Сохранить изменения" без изменений), чтобы новые URL начали работать.

Как изменить тип записи с помощью WPKeys: функцию для массового обновления

Изменение типа записи в базе данных требует аккуратности. Ниже пример функции, которая изменит тип записи с starij_tip на novyj_tip. Выполните эту функцию один раз, после чего удалите или закомментируйте её.

function wpkeys_change_post_type($old_type, $new_type) {
    global $wpdb;

    // Получаем ID всех постов старого типа
    $post_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s",
        $old_type
    ));

    if (empty($post_ids)) {
        return 'Посты с типом ' . $old_type . ' не найдены';
    }

    foreach ($post_ids as $post_id) {
        // Обновляем тип записи
        $wpdb->update(
            $wpdb->posts,
            array('post_type' => $new_type),
            array('ID' => $post_id),
            array('%s'),
            array('%d')
        );
    }

    // Обновляем кэш и правила перезаписи
    clean_post_cache($post_ids);
    flush_rewrite_rules();

    return count($post_ids) . ' постов изменено с ' . $old_type . ' на ' . $new_type;
}

// Вызов функции (раскомментируйте и измените типы по необходимости)
// echo wpkeys_change_post_type('starij_tip', 'novyj_tip');

Внимание! Перед выполнением сделайте резервную копию базы данных, чтобы избежать потери данных в случае ошибки.

Настройка 301 редиректов для сохранения SEO

После смены типа записи URL изменятся, и чтобы не потерять трафик, нужно настроить 301 редиректы со старых адресов на новые. Это можно сделать несколькими способами:

  • Через плагин Redirection: Самый простой способ — установить плагин Redirection и вручную создать правило редиректа.
  • Через .htaccess: Если вы используете Apache, добавьте правила вида:
RedirectMatch 301 ^/starij-tip/(.*)$ /novyj-tip/$1
  • Программно через хук template_redirect: Более гибкий способ — в functions.php добавить редирект на уровне PHP:
function wpkeys_redirect_old_post_type() {
    if (is_singular('starij_tip')) {
        global $post;
        $new_url = get_permalink($post->ID);

        // Формируем новый URL с новым типом
        $new_url = str_replace('/starij-tip/', '/novyj-tip/', $new_url);

        if ($new_url) {
            wp_redirect($new_url, 301);
            exit;
        }
    }
}
add_action('template_redirect', 'wpkeys_redirect_old_post_type');

Важно проверить, что редиректы работают корректно и нет циклов.

Обновление внутренних ссылок и меню

После смены типа записи необходимо проверить:

  • Все внутренние ссылки в постах, виджетах и меню, чтобы они указывали на новые URL.
  • Ссылки в SEO-плагинах, например, в мета-описаниях и хлебных крошках.

Для массового обновления ссылок в содержимом можно использовать SQL-запрос:

UPDATE {$wpdb->posts}
SET post_content = REPLACE(post_content, '/starij-tip/', '/novyj-tip/')
WHERE post_content LIKE '%/starij-tip/%';

Или воспользуйтесь плагинами для поиска и замены, например, Better Search Replace.

Проверка и тестирование

После всех изменений важно:

  • Протестировать работу всех ссылок на сайте.
  • Проверить HTTP статус код старых URL – должен быть 301.
  • Проверить индексацию сайта через Google Search Console.
  • Проанализировать логи сервера на наличие ошибок 404.

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

Выводы

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

Как отключить REST API в WordPress без плагинов
07.12.2025
Как изменить тип записи (post type) в WordPress без потери SEO и ссылок
10.12.2025
WooCommerce: автоматическое изменение стоимости и наличия товара после оформления заказа
01.06.2026
Как использовать REST API в WordPress для расширения функционала
21.11.2025
Как удалить или изменить класс в меню WordPress без плагинов
15.02.2026

На оформлении, скоро здесь появится полноценный ресурс