Постоянные ссылки и редирект
-
Добрый день! Хочу поменять постоянную ссылку с
/%category%/%postname%/
на/%category%/%postname%-%post_id%/
Как правильно настроить редирект?
-
Вы можете ко мне не прислушиваться, но… не делайте этого. На одном из моих сайтов много лет мешает работать post-id, унаследованный из DLE… лучше и категорию выпилите.
А редирект тут можно настроить только кодом wordpress. Потому что htaccess не знает ничего об id поста.
В самом начале functions пропишите с использованием функции wp-redirect, предварительно проверив, что это запись.
Сделал так
function rudr_post_permalink($url) { $request_uri = urldecode($_SERVER['REQUEST_URI']); $the_slug = basename(parse_url($request_uri, PHP_URL_PATH)); if ($the_slug) { $args = array( 'name' => $the_slug, 'post_type' => 'post', 'post_status' => 'publish', 'numberposts' => 1 ); $my_posts = get_posts($args); if ($my_posts): $post_url = get_post_permalink($my_posts[0]->ID); wp_redirect($post_url, 301); die(); endif; } } add_filter('template_redirect', 'rudr_post_permalink');
ужос… вы понимаете, что к каждой странице сайта добавляете лишний заапрос? то есть тормоза…
и вы вроде вот этот кусок потеряли: -%post_id%/
Скажите, а плагины для редиректа отменили или нужно обязательно «свой код, я щас все сделаю!» ?
@tuxfighter, вместо критики, предложите решение лучше. Я не нашел как можно настроить такой редирект плагином.
Хотел написать, что лучше варианта нет, и опять начать вас отговаривать от такого решения….
Но вспомнил, что с полгода назад пытался разобраться с одним малоизвестным функционалом вордпресса. Этот функционал производит редиректы со «старого» адреса (а фактически слага) записи на новый, измененный адрес (слаг). Причем делает это по умолчанию. «Старый» слаг при этом где-то хранится и сравнивается с адресом страницы.
Но… вы же собираетесь кроме редиректа постоянные ссылки поменять? не знаю, сработает ли такой редирект при смене постоянных ссылок на новый шаблон.
Но. Если вы разберетесь, где хранятся старые слаги для данного функционала (по идее это таблица опцийдолжна быть) и заполните их один раз нужными значениями, то wordpress должен выполнять нужные вам редиректы.
Ну и никто не отменял варианта, если надо не сильно много редиректить, тупо однократно заполнить список нужных вам редиректов таки в htaccess, автоматизировав заполнение в экселе.
UPD. Да, вот оно объясняется https://wp-kama.ru/function/wp_old_slug_redirect
старое значение хранится в постмета для поста
Грубо говоря, вам надо программным образом (или вручную? или sql-запросом) всем постам создать в postmeta строку с metakey=
_wp_old_slug
и metavalue=нынешний слаг поста, а потом поменять в постоянных ссылках шаблон адреса записи.- Ответ изменён 11 месяцев, 2 недели назад пользователем efess.
@efess, спасибо.
Функция работает только с плоскими (не древовидными) типами записей.
Вот в этом проблема, у меня есть вложенность рубрик. Я попробовал и правда, работает только с не вложенными записями, вложенные отдают 404.
Поэтому оставил свой вариант.ну вы сделали все, что можно, чтобы продвиженец сайта застрелился потом….
- Тема «Постоянные ссылки и редирект» закрыта для новых ответов.