Переадресация (редирект) — важная часть управления сайтом на WordPress, особенно при смене структуры URL, удалении или объединении страниц. В этой статье разберём, как создавать автоматические переадресации без использования плагинов, используя собственные функции и возможности WordPress. Это поможет избежать лишних плагинов, снизить нагрузку и сохранить гибкость управления.
Почему стоит создавать переадресации без плагинов
Плагины для редиректов удобны, но имеют свои минусы: они добавляют нагрузку, требуют обновлений, иногда конфликтуют с другими плагинами. Если у вас не очень сложные задачи, автоматизация редиректов через код — более оптимальный и надёжный вариант. К тому же, так вы лучше контролируете логику и поведение сайта.
Основные преимущества собственного решения:
- Минимальная нагрузка на сайт.
- Отсутствие зависимости от сторонних обновлений.
- Гибкость и точечный контроль.
- Возможность интеграции с собственными типами записей и условиями.
Основы создания автоматических переадресаций в WordPress
Для реализации автоматических редиректов без плагинов мы используем хуки WordPress, в частности template_redirect. Этот хук срабатывает после того, как WordPress определил, какой шаблон загружать, но до вывода содержимого.
На этом этапе мы можем проверить текущий URL и при необходимости отправить заголовок с редиректом.
add_action('template_redirect', 'wpnotes_redirect_old_urls');
function wpnotes_redirect_old_urls() {
if (is_404()) {
$requested_url = $_SERVER['REQUEST_URI'];
// Пример: перенаправляем /old-page на /new-page
if ($requested_url === '/old-page/') {
wp_redirect(home_url('/new-page/'), 301);
exit;
}
}
}В этом примере при попытке загрузить страницу /old-page/ пользователь будет автоматически перенаправлен на /new-page/ с кодом 301 (постоянный редирект).
Массовые переадресации с использованием массива соответствий
Если у вас много страниц для редиректа, лучше хранить соответствия в массиве и проверять по нему. Это удобно, когда структура сайта меняется или вы меняете домены.
add_action('template_redirect', 'wpnotes_mass_redirects');
function wpnotes_mass_redirects() {
if (is_404()) {
$redirects = [
'/old-page-1/' => '/new-page-1/',
'/old-page-2/' => '/new-page-2/',
'/old-category/old-post/' => '/new-category/new-post/',
];
$requested_url = $_SERVER['REQUEST_URI'];
if (array_key_exists($requested_url, $redirects)) {
wp_redirect(home_url($redirects[$requested_url]), 301);
exit;
}
}
}Такой подход легко поддерживать и расширять — достаточно добавить новые пары «старый URL» => «новый URL».
Советы по работе с массивом редиректов
Чтобы не перегружать код, при большом количестве правил лучше хранить их в отдельном PHP-файле или в базе данных. Затем загружать их динамически.
Пример загрузки массива из внешнего файла:
add_action('template_redirect', 'wpnotes_dynamic_redirects');
function wpnotes_dynamic_redirects() {
if (is_404()) {
$redirects = include get_stylesheet_directory() . '/redirects.php';
$requested_url = $_SERVER['REQUEST_URI'];
if (isset($redirects[$requested_url])) {
wp_redirect(home_url($redirects[$requested_url]), 301);
exit;
}
}
}Файл redirects.php должен возвращать массив:
<?php
return [
'/old-url/' => '/new-url/',
// другие переадресации
];Переадресация с учетом регулярных выражений
Иногда нужно не просто простое соответствие URL, а более сложное правило — например, переадресация всех страниц из старой категории на новую.
Для таких случаев используйте функцию preg_match:
add_action('template_redirect', 'wpnotes_regex_redirects');
function wpnotes_regex_redirects() {
if (is_404()) {
$requested_url = $_SERVER['REQUEST_URI'];
// Пример: все URL, начинающиеся с /old-category/, перенаправляем на /new-category/ с сохранением остальной части URL
if (preg_match('#^/old-category/(.+)#', $requested_url, $matches)) {
$new_url = '/new-category/' . $matches[1];
wp_redirect(home_url($new_url), 301);
exit;
}
}
}Такой метод позволяет создавать гибкие правила без плагинов.
Обработка POST-запросов и безопасность редиректов
Редиректы обычно делают для GET-запросов, но иногда нужно учитывать POST-запросы. В этом случае просто отправлять заголовок 301 редиректа нельзя — нужно сначала обработать данные.
Чтобы избежать проблем, проверяйте метод запроса и избегайте редиректов для POST, если это может нарушить логику.
Также всегда используйте функцию wp_safe_redirect, если редирект ведёт на URL внутри вашего сайта. Это предотвращает возможные уязвимости.
if (wp_safe_redirect(home_url($new_url), 301)) {
exit;
}Интеграция с плагином Clearfy Pro для управления редиректами
Если вы используете Clearfy Pro, он предоставляет удобный интерфейс для создания редиректов и оптимизации сайта. Однако иногда бывает полезно комбинировать автоматические редиректы из кода с возможностями Clearfy.
Например, можно отключить автоматические редиректы из плагина для выбранных URL и управлять ими через код, чтобы избежать конфликтов.
Отладка и проверка редиректов
Для проверки работы редиректов используйте инструменты разработчика в браузере или специальные сервисы, например, httpstatus.io.
Важно проверять, что редиректы работают с правильным HTTP-кодом (обычно 301 для постоянного или 302 для временного). Это влияет на SEO и поведение поисковых систем.
Пример функции для логирования редиректов
Для отладки можно добавить логирование с помощью error_log:
function wpnotes_redirect_old_urls() {
if (is_404()) {
$requested_url = $_SERVER['REQUEST_URI'];
if ($requested_url === '/old-page/') {
error_log('Редирект с ' . $requested_url . ' на /new-page/');
wp_redirect(home_url('/new-page/'), 301);
exit;
}
}
}
add_action('template_redirect', 'wpnotes_redirect_old_urls');Логи можно смотреть в файле debug.log (нужно включить WP_DEBUG_LOG).
Заключение по созданию автоматических переадресаций в WordPress без плагинов
Создание автоматических редиректов через код — мощный инструмент, позволяющий избежать лишних плагинов и гибко управлять переадресациями. Использование хуков WordPress, регулярных выражений и массивов соответствий помогает решать любые задачи от простых редиректов до комплексных перенаправлений по шаблонам.
Если же нужен удобный UI и дополнительные функции, можно рассмотреть Clearfy Pro или аналогичные плагины, сочетая их с собственными функциями для максимальной эффективности.