Чтобы поменять ссылки на изображения при смене домена WordPress сайта, предлагаю автоматизированное решение: скрипт на Python. Код скрипта и пример его запуска на моей системе приведен ниже в статье.

Описание проблемы

Оказывается, WordPress при добавлении изображения, например, в статью добавляет ссылку на изображение не относительную, а абсолютную. Т.е. в ссылке на изображение содержится доменное имя WordPress сайта. А какого-то централизованного места в WordPress, где можно старый домен поменять на новый и обновятся все ссылки на изображения, нет (на момент середины 2024 года). Получается, что при смене доменного имени WordPress сайта требуется все эти ссылки править самостоятельно.

Вот так выглядит сайт на новом домене adminkin.pro с ссылками на изображения, содержащими старый домен adminkin.com:

Ссылки при смене домена WordPress сайта

Решение

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.

Настройка удаленного доступа к базе данных в WordPress

Если скрипт changeDomainName.py находится на одном сервере с базой данных WordPress, настроек доступа не требуется.

Установим библиотеку mysql-connector-python. Эта библиотека позволяет Python-программам взаимодействовать с базами данных MySQL.

pip3 install mysql-connector-python

Осталось только запустить скрипт changeDomainName.py:

python3 changeDomainName.py
Автоматическая замена старого домена на новый в ссылках в WordPress

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

Обновляем страницу WordPress сайта. Если используете кэширующий плагин, то не забываем удалить кэш перед обновлением страницы.

Автоматически поменялись ссылки картинок на сайте WordPress

Ура! Работает.

Вывод

Я всегда за автоматизацию ручного труда. Так получается быстрее и меньше вероятность сделать ошибку.

Напишите в комментариях, как вы меняете ссылки на изображения при смене домена WordPress сайта. Будет интересно!

Комментарии

Добавить комментарий

Этот сайт защищен reCAPTCHA, и к нему применяются Google Политика конфиденциальности и Условия использования.

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.