Как удалить или изменить правила перезаписи (rewrite rules) в WordPress

В WordPress правила перезаписи (rewrite rules) отвечают за формирование ЧПУ-адресов (человекопонятных URL). Иногда возникает необходимость удалить или изменить определённые правила, например, чтобы убрать конфликт с пользовательским типом записи, или изменить структуру URL без установки дополнительных плагинов. В этой статье подробно рассмотрим, как это сделать программно, разберём примеры кода и полезные советы.

Что такое правила перезаписи (rewrite rules) в WordPress и зачем их менять

Правила перезаписи — это набор регулярных выражений, которые WordPress использует для сопоставления URL с нужными запросами к базе данных. Они генерируются автоматически при регистрации пользовательских типов записей, таксономий, а также зависят от настроек постоянных ссылок (Permalinks).

Иногда в проекте появляются конфликты или требуются нестандартные URL, которые WordPress по умолчанию не поддерживает. Например:

  • Удалить устаревшие или конфликтующие правила после удаления плагина.
  • Изменить структуру URL для кастомных типов записей или таксономий.
  • Добавить свои правила для новых шаблонов страниц.

Без знаний о том, как работать с rewrite rules, можно столкнуться с ошибками 404 или конфликтами URL.

Как посмотреть текущие правила перезаписи

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

function wpsnippets_print_rewrite_rules() {
    echo '<pre>';
    print_r($GLOBALS['wp_rewrite']->wp_rewrite_rules());
    echo '</pre>';
}
add_action('admin_init', 'wpsnippets_print_rewrite_rules');

После добавления этого кода в functions.php и перехода в админку на любом экране, вы увидите массив правил. Каждый ключ — это регулярное выражение, а значение — соответствующий query string.

Важно помнить: после изменений в rewrite rules обязательно нужно сбрасывать правила, чтобы обновить .htaccess и внутренние кэши.

Как удалить определённые правила перезаписи в WordPress

WordPress не предоставляет прямой API для удаления отдельных правил, но мы можем изменить массив правил программно перед тем, как они будут применены.

Пример: удалим все правила, связанные с пользовательским типом записи product.

function wpsnippets_remove_product_rewrite_rules($rules) {
    foreach ($rules as $rule => $rewrite) {
        if (strpos($rule, 'product') !== false) {
            unset($rules[$rule]);
        }
    }
    return $rules;
}
add_filter('rewrite_rules_array', 'wpsnippets_remove_product_rewrite_rules');

Этот фильтр получает массив правил, мы проходимся по ключам и удаляем те, что содержат слово product. Таким способом можно фильтровать по другим параметрам и подстраивать под свои задачи.

Что делать после удаления правил

Чтобы изменения вступили в силу, нужно сбросить правила перезаписи. Это можно сделать вручную в админке: Настройки → Постоянные ссылки → Сохранить изменения или программно:

function wpsnippets_flush_rewrite_rules() {
    flush_rewrite_rules();
}
add_action('after_switch_theme', 'wpsnippets_flush_rewrite_rules');

Важно: flush_rewrite_rules() — дорогая операция, её нельзя вызывать при каждом запросе, только при активации темы или плагина.

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

Для добавления новых правил нужно использовать функцию add_rewrite_rule(). Рассмотрим пример — добавим правило, которое будет обрабатывать URL вида shop/category/название и перенаправлять на архив таксономии product_cat.

function wpsnippets_add_shop_category_rewrite_rule() {
    add_rewrite_rule('^shop/category/([^/]+)/?$', 'index.php?product_cat=$matches[1]', 'top');
}
add_action('init', 'wpsnippets_add_shop_category_rewrite_rule');

Параметры:

  • ^shop/category/([^/]+)/?$ — регулярное выражение для URL;
  • index.php?product_cat=$matches[1] — соответствующий запрос;
  • 'top' — добавляет правило в начало списка для приоритетности.

Не забудьте выполнить сброс правил после добавления.

Изменение существующих правил

Иногда нужно не просто добавить новое правило, а заменить старое. Для этого можно воспользоваться тем же фильтром rewrite_rules_array и заменить нужный ключ.

function wpsnippets_modify_post_rewrite_rules($rules) {
    $new_rules = [];
    foreach ($rules as $rule => $rewrite) {
        if (strpos($rule, 'attachment') !== false) {
            // меняем правило для вложений
            $new_rules['^media/([^/]+)/?$'] = $rewrite;
        } else {
            $new_rules[$rule] = $rewrite;
        }
    }
    return $new_rules;
}
add_filter('rewrite_rules_array', 'wpsnippets_modify_post_rewrite_rules');

В этом примере правило для вложений меняется с дефолтного на новое, чтобы URL стал вида site.ru/media/название.

Использование плагинов для управления rewrite rules

Если вы предпочитаете визуальные инструменты, существует несколько плагинов, которые помогают управлять правилами перезаписи:

  • Rewrite Rules Inspector — позволяет просматривать, очищать и сбрасывать правила.
  • WP Rewrite Rules — простой интерфейс для добавления и удаления правил.
  • Custom Post Type UI — для настройки пользовательских типов записей с автоматическим добавлением правил.

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

Полезные советы при работе с rewrite rules в WordPress

1. Всегда делайте резервную копию .htaccess и базы данных перед изменениями.

Ошибки в правилах могут привести к недоступности сайта.

2. Используйте фильтр rewrite_rules_array для удаления и изменения правил.

Это самый гибкий способ вмешательства в правила без модификации ядра.

3. Не забывайте сбрасывать правила после изменений.

Без этого новые правила не применятся.

4. Тестируйте изменения на локальном или тестовом сервере.

Это поможет избежать простоев на рабочем сайте.

5. Пишите функции с префиксом wpsnippets_, чтобы избежать конфликтов.

Это хорошая практика для поддерживаемого и понятного кода.

WooCommerce: как изменить статус заказа без повышения суммы платежа
23.04.2026
Как сделать автоматический откат обновлений в WordPress при ошибках
03.04.2026
Как добавить категорию в REST API WordPress: практическое руководство
05.03.2026
Как создать динамический файл sitemap.xml в WordPress с помощью хуков
04.02.2026
WordPress: как добавить уникальное поле в REST API с проверкой уникальности
20.03.2026