Чтобы поменять ссылки на изображения при смене домена WordPress сайта, предлагаю автоматизированное решение: скрипт на Python. Код скрипта и пример его запуска на моей системе приведен ниже в статье.
Описание проблемы
Оказывается, WordPress при добавлении изображения, например, в статью добавляет ссылку на изображение не относительную, а абсолютную. Т.е. в ссылке на изображение содержится доменное имя WordPress сайта. А какого-то централизованного места в WordPress, где можно старый домен поменять на новый и обновятся все ссылки на изображения, нет (на момент середины 2024 года). Получается, что при смене доменного имени WordPress сайта требуется все эти ссылки править самостоятельно.
Вот так выглядит сайт на новом домене adminkin.pro с ссылками на изображения, содержащими старый домен adminkin.com:

Решение
Python скрипт
Вручную что-то там править — не наша тема! Сделаем все автоматически с помощью Python скрипта. Код скрипта (changeDomainName.py):
import mysql.connector
def main():
# Настройки подключения к базе данных
config = {
'user': 'user_login',
'password': 'user_password',
'host': 'host_name',
'database': 'database_name',
}
# Подключение к базе данных
conn = mysql.connector.connect(**config)
cursor = conn.cursor()
try:
# Получение списка всех таблиц в базе данных
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
for table in tables:
table_name = table[0]
total_rows_updated = 0
# Получение списка всех колонок для текущей таблицы
cursor.execute(f"SHOW COLUMNS FROM {table_name}")
columns = cursor.fetchall()
for column in columns:
column_name = column[0]
# Обновление домена 'adminkin.com' на 'adminkin.pro' в текущей колонке
update_query = f"UPDATE {table_name} SET {column_name} = REPLACE({column_name}, %s, %s) WHERE {column_name} LIKE %s"
cursor.execute(update_query, ('adminkin.com', 'adminkin.pro', '%adminkin.com%'))
rows_updated = cursor.rowcount
total_rows_updated += rows_updated
conn.commit()
if total_rows_updated > 0:
print(f'Table: {table_name}, Total rows updated: {total_rows_updated}')
finally:
# Закрытие курсора и подключения
cursor.close()
conn.close()
if __name__ == "__main__":
main()
Что делает скрипт?
Скрипт changeDomainName.py подключается к серверу host_name, к базе данных WordPress с именем database_name от имени пользователя user_login с паролем user_password. Далее, скрипт просматривает каждый столбец каждой таблицы в базе данных WordPress и меняет найденный старый домен adminkin.com на новый домен adminkin.pro. В консоль выводится информация, в какой таблице сколько строк было обновлено.
Запуск скрипта
Если скрипт changeDomainName.py не находится на одном сервере с базой данных WordPress, необходимо настроить удаленный доступ. Т.е. на сервере host_name в настройках базы данных database_name разрешить удаленный доступ с IP-адреса сервера со скриптом changeDomainName.py.

Если скрипт changeDomainName.py находится на одном сервере с базой данных WordPress, настроек доступа не требуется.
Установим библиотеку mysql-connector-python. Эта библиотека позволяет Python-программам взаимодействовать с базами данных MySQL.
pip3 install mysql-connector-python
Осталось только запустить скрипт changeDomainName.py:
python3 changeDomainName.py

Видим, в таблицах wp_comments, wp_options, wp_posts и т.д. были внесены изменения скриптом. Да… Если бы мы это делали вручную, точно где-нибудь да пропустили бы старое доменное имя.
Обновляем страницу WordPress сайта. Если используете кэширующий плагин, то не забываем удалить кэш перед обновлением страницы.

Ура! Работает.
Вывод
Я всегда за автоматизацию ручного труда. Так получается быстрее и меньше вероятность сделать ошибку.
Напишите в комментариях, как вы меняете ссылки на изображения при смене домена WordPress сайта. Будет интересно!
Комментарии