Как удалить нежелательные редиректы в WordPress
В WordPress некоторые редиректы создаются автоматически. Например у нас есть запись по адрессу https://site/old
, а мы ее переименовали в https://site/nev
. Теперь перейдя по адресу https://site/old
мы будем перенаправлены на адрес https://site/nev
. Это удобно, но иногда такое поведение бывает излишним. Как это исправить и поговорим в этой статье.
Какие бывают редиректы?
Редиректы бывают внешние — это когда нас перебрасывает с сайта https://old
на сайт https://nev
.
И внутренние — это когда мы «не уходим» с сайта, а переводимся на другую ссылку, как мы писали в начале статьи.
Об этом последнем варианте на сайте WordPress и идет речь.
Как очистить базу данных от старых ссылок?
Очистка базы с помощью плагина
Чтобы WordPress «забыл» старые пути к записям, мы можем очистить базу. И самый простой способ — это воспользоваться плагином Slugs Manager в котором можно просмотреть старые ссылки и удалить все или выбранные:
Если плагин вам больше не нужен, то его можно деактивировать или удалить.
Очистка базы через phpMyAdmin
Можно обойтись и без плагина, очистив базу данных от старых ссылок «вручную».
Для этого зайдем на хостинге в phpMyAdmin
и выполним запрос, чтобы просмотреть старые ссылки:
SELECT * FROM `wp_postmeta` WHERE `meta_key` = '_wp_old_slug'
Теперь можно удалить не нужные ссылки.
Очистка базы с помощью кода
Для начала мы можем проверить есть ли старые ссылки. Для этого пропишем в файле functions.php
следующий код:
function еhere_is_old_slugs() { global $wpdb; $old_slug =$wpdb->get_results("SELECT*FROM$wpdb->postmetaWHERE meta_key='_wp_old_slug'"); if(!empty($old_slug)){ echo '<pre>' . print_r($old_slug, true) . '</pre>'; }else{ echo '<h2>Старых ссылок нет</h2>' }
И выведем результат используя любой шаблон, например header.php
, прописав в нем:
еhere_is_old_slugs();
Если выводится код, а не сообщение «Старых ссылок нет», то можно воспользоваться кодом ниже, который и удалит старые ссылки:
function delete_old_slugs() { global $wpdb; $old_slug = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key='_wp_old_slug'"); if(!empty($old_slug)){ $wpdb->get_results("DELETE * FROM $wpdb->postmeta WHERE meta_key='_wp_old_slug'"); } } delete_old_slugs();
После этих процедур код нужно удалить или закомментировать.
Чтобы убедиться что «Старых ссылок нет», запустим первый код.
После чего закомментируем и его.
Как «выключить» автоматические редиректы
Чтобы совсем отключить канонические редиректы и редиректы со старых ссылок, можно прописать в файле functions.php
:
remove_filter('template_redirect', 'redirect_canonical'); remove_action('template_redirect', 'wp_old_slug_redirect');
Первая строка полностью отключить функционал канонических редиректов.
После этого мы будем попадать на страницу пагинации /mypage/page/2
, если перейдем по этой ссылке, а не будем «переброшены» на первую страницу /mypage/
, как было раньше.
Вторая строка отключит поиск старых слагов в базе данных и будут «видны» только новые ссылки на страницы, а старые «потеряются».