Массовое изменение ссылок в постах
После изменения постоянных ссылок в статьях осталось много ссылок (перелинковка) со старой структурой. Можно ли через SQL привести все в порядок?
Можно запросом в БД так сделать:
UPDATE wp_posts SET post_content = REGEXP_REPLACE(
post_content,
'https://amputeelife\.ru/\d{4}/\d{2}/\d{2}/',
'https://amputeelife.ru/'
);
Или через WP-CLI search-replace:
wp search-replace 'https://amputeelife.ru/\d{4}/\d{2}/\d{2}/' 'https://amputeelife.ru/' --regex --dry-run
Только --dry-run тут удали, чтобы реальная замена произошла, а с ним покажет что нашел что будет менять.
--
Один момент тут только, надо быть уверенным что нет ссылок с шаблоном https://amputeelife.ru/DDDD/DD/DD/, которые не нужно изменять...
Сделал через БД. Ничего не получилось. Затронуто 0 строк. (Запрос занял 0.2000 сек.)
UPDATE wp_posts SET post_content = REGEXP_REPLACE( post_content, 'https://amputeelife\.ru/\d{4}/\d{2}/\d{2}/', 'https://amputeelife.ru/' ) Мне ИИ сгенерировал запрос тоже не работает.
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'https://amputeelife\\.ru/[0-9]{4}/[0-9]{2}/[0-9]{2}/([a-z0-9\\-]+)',
'https://amputeelife.ru/\\1'
)
WHERE post_content REGEXP 'https://amputeelife\\.ru/[0-9]{4}/[0-9]{2}/[0-9]{2}/'; Рабочий вариант:
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'https://amputeelife\\.ru/[0-9]{4}/[0-9]{2}/[0-9]{2}/',
'https://amputeelife.ru/'
)
WHERE post_content REGEXP 'https://amputeelife\\.ru/[0-9]{4}/[0-9]{2}/[0-9]{2}/';
Ясно - \d в ругулярках мускула нельзя испльзовать значит, я почему-то думал там такое работает.
Я о такой проблеме забыл после того как начал использовать плагин Rank Math SEO, там автоматическое перенаправление и такие танцы с бубнами заканчиваются.
Думаю можно, важно разобраться что на что нужно заменить - какая струкутара была какая стала...