michaellindfors
  • 0
Новичок

Переопределить конфигурацию базы данных для мультиблога WordPress

  • 0

Наша команда столкнулась с проблемой при работе с мультиблогами wordpress 3. Обычно мы работаем с локальной копией сайта (localhost/testsite), но с той же базой данных, чтобы поддерживать актуальность всех изменений.

Это отлично работает в одной установке, потому что вы можете переопределить конфигурации базы данных из php с помощью:

define('URL',$path);  
define('WP_HOME',$path);  
define('WP_SITEURL',$path);  
define( 'WP_CONTENT_URL', $path.'/wp-content');  

Но на мультисайте это не работает из-за лишних таблиц ( wp_blogs, wp_site ) и у них в настройках есть путь к блогу.

Кто-нибудь знает, как переопределить эти настройки? Я хотел бы, чтобы сайт работал на домене localhost для наших разработчиков, на developerdomain.com для наших тестовых серверов, а затем на realdomain.com, когда сайт будет запущен.

Это кажется излишним, если нам нужно настроить разные базы данных для каждой из них и вручную изменить домен и путь, а затем скопировать сообщение, блог и пользовательские данные между базами данных, чтобы выполнить отладку и продолжить разработку.

Share
  1. Я не знаю, предлагаю ли я совместное использование базы данных между сервером разработки, промежуточным этапом и рабочим сервером. Команда, с которой я работаю, на протяжении многих лет пробовала несколько разных версий и, наконец, пришла к выводу, что лучшим решением является наличие отдельных баз данных. Мы создали сценарии для автоматического экспорта данных с одного сервера, замены доменных имен и импорта в другую базу данных, чтобы упростить процесс получения последних данных.

    • 0
    • Все было бы так, намного проще, если бы WordPress не жестко кодировал URL-адрес сайта в записи базы данных. Ни Drupal, ни Joomla! (IIRC) есть эта проблема. Если бы не это, это была бы серия простых crontabs для ежедневных миграций от промежуточной стадии к разработке. Как разработчик, регулярно работающий со многими CMS, это выглядит как любитель…

      • 0
    • Да такой скрипт до сих пор публично отсутствует. Компоненты для выполнения этой работы существуют как бесплатное программное обеспечение. Так что да, WordPress на данный момент является дилетантским. Меньше из-за URL-адреса сайта (я тоже предвзято отношусь к этому, но у него есть и хорошие стороны), а просто из-за отсутствия официальных инструментов поддержки.

      • 0
  2. Что ж, если вы хотите сделать это правильно, у вас будет одна база данных для разработки, одна для подготовки, а затем рабочая база данных. Просто WordPress не предназначен для того, чтобы жить с такими общими понятиями в разработке программного обеспечения.

    Компонент, который я все еще вижу публично отсутствующим, — это полный сценарий миграции, который может преобразовывать все настройки WordPress и данные в базе данных из одного домена в другой, поскольку доменные имена «жестко закодированы» в сообщения и скрыты в нескольких (часто сериализованных) значениях параметров..

    Пока вас беспокоят только несколько перечисленных вами параметров, вы можете подключиться к pre_option_... фильтрам и изменить их в зависимости от ваших настроек. Вы можете написать определение в свой файл конфигурации и соответствующим образом изменить значения. Это может работать с многосайтовыми настройками, а также при фильтрации фактических значений из базы данных.

    Это направление?

    • 0
  3. Это не так элегантно, как хотелось бы, но работает: вы можете изменить файл hosts, указав http://www.realdomain.com на localhost.

    Затем ваш запрос к http://www.realdomain.com вернется на ваш локальный компьютер, найдет WordPress (если все настроено правильно), и WordPress будет работать нормально, так как он никак не понимает, что это локальная среда разработки..

    Есть недостатки, но это очень быстрое и грязное исправление.

    • 0
  4. Хорошо, это еще одно глупое решение, но, похоже, оно работает. Чтобы заменить контент, ссылающийся на http://www.realdomain.com, вам придется сделать больше.

    Поместите это в свой файл wp-config.php после определения информации о вашей базе данных.

        if( 'example-local' == $_SERVER['SERVER_NAME'] ) {
    
            mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
            mysql_select_db(DB_NAME) or die(mysql_error());
    
            $queries[0] = <<<HEREDOC
    
            UPDATE wp_blogs
            SET domain="example-local"
            WHERE domain="www.example.org"; 
    
    HEREDOC;
    
            $queries[1] = <<<HEREDOC
    
            UPDATE wp_options 
            SET option_value = replace( option_value, "www.example.org", "example-local" ); 
    
    HEREDOC;
    
            for ($i = 4; $i < 9; $i++) {
    
                $queries[] = 'UPDATE wp_' . $i . '_options 
            SET option_value = replace( option_value, "www.example.org", "example-local" );';
    
            }   
    
            foreach( $queries as $query ) { 
    
                $result = mysql_query( $query );
    
                if (!$result) {
                    die('Invalid query: ' . mysql_error());
                }
    
            }
    
        }
    
    • 0

Оставить ответ

You must login to add an answer.