Массовое изменение ссылок в постах

После изменения постоянных ссылок в статьях осталось много ссылок (перелинковка) со старой структурой. Можно ли через SQL привести все в порядок?

Заметки к вопросу:
Kama 1.2 года назад

Думаю можно, важно разобраться что на что нужно заменить - какая струкутара была какая стала...

Kama 1.2 года назад

Можно запросом в БД так сделать:

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/, которые не нужно изменять...

sfuma777 1.2 года назад

Сделал через БД. Ничего не получилось. Затронуто 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/' )
sfuma777 1.2 года назад

Мне ИИ сгенерировал запрос тоже не работает.

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}/';
sfuma777 1.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}/';
Kama 1.2 года назад

Ясно - \d в ругулярках мускула нельзя испльзовать значит, я почему-то думал там такое работает.

Dan Zakirov 1.2 года назад

Я о такой проблеме забыл после того как начал использовать плагин Rank Math SEO, там автоматическое перенаправление и такие танцы с бубнами заканчиваются.