Переопределить WP_SITEURL и WP_HOME для WordPress Multisite

Для локальной разработки на сайте WordPress (http://www.example.com), Я ранее переопределилWP_SITEURL а такжеWP_HOME значения вwp-config.php вот так:

define('WP_SITEURL', 'http://local-example/');
define('WP_HOME', 'http://local-example/');

Это позволило бы мне копировать файлы базы данных и сайта на локальный сервер и вносить изменения по мере необходимости, тестируя при локальной установке.

Затем необходимо было преобразовать установку в WordPress Multisite, чтобы пользователи, аутентификация, плагины и т. Д. Могли быть общими для основного сайта и дополнительного сайта, размещенного на поддомене (http://second.example.com).

Метод выше, чтобы переопределить значения вwp_options таблица больше не работает, но я не уверен, как правильно установить значение для записей вwp_blogs так же хорошо какwp_2_options таблица для основного и поддоменов.

Обновление моегоHOSTS Файл - это своего рода обходной путь, но он не идеален (я не могу сравнить его с живым сайтом и т. д.). Запуск сценария для изменения значений базы данных - это еще один вариант, который я пробовал, но он немного более громоздкий, поэтому у меня возникает вопрос, есть ли в MultiSite возможность переопределить эти значения в файле настроек, например:wp-config.phpи если да, то как это будет выглядеть.

Ответы на вопрос(4)

Вы могли бы использоватьupdate_option в functions.php

update_option("siteurl","http://example.com");
update_option("home","http://example.com");
 doublesharp18 окт. 2012 г., 19:10
Проблема с этим решением заключается в том, что когда я запускаю сайт локально, его URLhttp://local-example/ который нене соответствует значению базы данныхhttp://www.example.com в случае основного сайта. Из-за этого ни один код вfunctions.php выполняется, поэтому варианты нет обновлен. Цыплята и яйца.

У меня была та же проблема, и я хотел найти решение, похожее на определение WP_HOME & WP_SITEURL в wp-config.php, насколько это возможно.

Я могу'не использовать плагин, потому что я синхронизируюсь с GIT и неЯ не хочу, чтобы этот плагин был в моем репо, и мне пришлось бы добавлять плагин каждый раз ... Полагаю, его можно было активировать по всей сети через таблицу wp_sitemeta ... но это не былоИдеально для меня.

Я придумал это решение.

Обязательно не синхронизируйте wp_blogs, wp_site, wp_sitemeta. А затем добавьте этот код в ваш локальный wp-config.php где-то ниже:$table_prefix

/* Update local database */
mysql_connect( DB_HOST, DB_USER, DB_PASSWORD ) or die( mysql_error() );
mysql_select_db( DB_NAME );

$result = mysql_query("SELECT * FROM `". $table_prefix ."blogs`") or die( mysql_error() );
while( $row = mysql_fetch_array( $result ) )
{
    $id = (1 == $row['blog_id']) ? '' : $row['blog_id'] .'_';
    mysql_query( "UPDATE `". $table_prefix . $id ."options` SET `option_value`='http://". $row['domain'] ."/' WHERE (`option_name`='siteurl' OR `option_name`='home')" ) or die( mysql_error() );
}

Это обеспечит синхронизацию ваших сайтов с вашей локальной таблицей wp_blogs.

Единственным недостатком является то, что при добавлении нового сайта вам необходимо вручную скопировать его в таблицу wp_blogs и обновить его локальный URL-адрес.

 Jake03 мая 2013 г., 06:19
Есть определенно варианты. Это действительно просто. Массив тоже может быть хорошим вариантом. Я начал делать это таким образом, но решил против этого. Я не уверен, почему сейчас ... может быть, потому что в таблице блогов уже есть идентификаторы сайта ... Он работает при каждой загрузке страницы, но так как я использую его только локально, я нене волнует. Я уточнил бы это для живой среды, и я склонен комментировать это, когда я не использую это. И это непочти надежный как плагин. Очевидно, что ссылки в содержании по-прежнему остаются неизменными, но я просто хотел что-то простое и переносимое.
 doublesharp02 мая 2013 г., 02:23
Еще один вариант, если вы хотите обновить всю базу данных, это сохранить blog_id => Отображения URL в массиве вwp_config.php и обновить,blogssites, а такжеoptions таблицы, использующие его.
 doublesharp02 мая 2013 г., 02:19
Я могу'не верю, что я неНе думай о том, чтобы делать это таким образом. Это будет запускать обновление при каждой загрузке страницы - вы можете использовать значение в таблице параметров, чтобы определить, нужно ли запускать обновление, чтобы не предотвращать это, даже если оно 'не так уж много в производительности хит. PDO или mysqli также подойдут для проверки на будущее, хотя WordPress все еще использует расширения mysql_ *.

Там'Подобный вопрос задают здесь:Командная разработка сайта Wordpress который я предоставил возможное решение для. В вашем случае вы можете не захотеть идти до такой степени (хотя это было бы очень гибко); тем не менее, вы всегда можете посмотреть на часть ответа, в которой упоминается метод замены домена.

Мы изложили это решение здесь:Методы замены токена URL ...

 user91601118 окт. 2012 г., 19:34
Смотрите последнюю часть этого поста о синхронизации. Дело в том, что если у вас есть среда разработки, котораяВы отделены от сцены, вы нене нужно сбрасывать каждую таблицу, например wp_options. Вам нужно только вывести соответствующие таблицы содержимого, так что вы не будетеиметь изменить значения в вашей песочнице разработки. Итак, что здесь должно произойти, так это то, что продвижение контента идет вверх по течению от подготовки к производству, где зеркальное отображение происходит ниже по течению от подготовки к вашей песочнице. Таким образом, каждая среда должна быть настроена только один раз, оставляя только контент для продвижения.
 doublesharp18 окт. 2012 г., 19:35
Именно мои мысли (только что отправленные), хотя яделать нужно wp_options. У меня есть код, который должен исправить это для меня, однако, опубликует обновление, если оно действительно работает :)
 user91601118 окт. 2012 г., 19:19
По сути, выв случае 2 решения I 'мы изложили в этом другом посте. Это'Это постоянная проблема с WP (хотя она не является родной только для WP), и, к сожалению,Нелегкое решение проблемы - если вы не хотите использовать прокси-магию или создать действительно сложные правила маршрутизации в.htaccess файл. Мой опыт работы с WP MU / Multi-site заключается в том, что вам нужно предварительно настроить свою среду (с подходом, который ямы начнем), прежде чем начать. В противном случае этоs много SQL-запросов для замены значений в вашей БД.
 doublesharp18 окт. 2012 г., 19:34
Я на самом деле, возможно, только что подумал о решении, использующем ваш подход и некоторый код, который я написал, чтобы переопределить значения вwp_options а такжеwp_2_options - Если я настрою пользовательскую версию Devwp_site а такжеwp_blogs со значениями, измененными с производства, и не копируйте их для работы разработчиков. Затем я смогу использовать пользовательские значения wp-config.php (моя реализация немного отличается от вашей, но тот же принцип). Проблема у меня была в том, чтоms-settings.php В файле есть несколько жестко закодированных запросов для поиска blog_id и т. д.
 user91601118 окт. 2012 г., 20:17
Вы нашли очень хорошее решение для проблемы wp_options - яМне редко приходилось сталкиваться с этим, но теперь у меня, по крайней мере, есть хорошая стратегия, на которую можно ссылаться, когда мне нужно решить эту проблему. Congrats!
 doublesharp18 окт. 2012 г., 20:09
Большое спасибо за ваши предложения, я только что опубликовал ответ, который придумал, и соответственно добавлю ваши посты поддержки.
 doublesharp18 окт. 2012 г., 19:12
Хорошо, что на самом деле есть много полезной информации, особенно URL Token Replacement. К сожалению, это неЭто полностью помогает в моем случае, потому что мне нужно переопределить фактические значения базы данных (из того, что я могу сказать, глядя на.wp-includes/ms-settings.php
 doublesharp18 окт. 2012 г., 19:29
Технически в случае 2, но сайт нежить, чтобы я мог делать все, что мне нужно, насколько это возможно. Проблема не вт URL в контенте как таковомсохраненные URL вwp_options['siteurl'] (основной сайт),wp_site['domain'] (Сайт MultiSite),wp_blogs['domain'] (первичные, вторые блоги) иwp_2_options['siteurl'] (вторичный сайт). Раньше мне приходилось беспокоиться только оwp_options['siteurl'] и может переопределить это вwp-config.phpно я нене вижу, как это сделать без обновления этих значений таблицы каждый раз, когда я копирую базу данных. Игнорирование URL-адресов контента на данный момент.
 user91601118 окт. 2012 г., 19:42
Вы всегда можете написать bash-скрипт для запуска SQL-запросов для обновления таблиц wp_options, если вы 'переосмысление БД в вашей среде разработки. Рад, что мой пост немного помог!
Решение Вопроса

Обновить: Полностью обновленный код плагина с дополнительным описанием можно найти здесь:http://justinsilver.com/technology/wordpress/wordpress-plugins/wordpress-plugin-wp-server-migration/Мне удалось найти решение с помощью @ user916011. Мне нужно было иметь возможность скопироватьwp_options таблицы в моей среде разработки, так как они содержат конфигурации, которые необходимы. Чтобы решить проблему невозможности установки значений WP_SITEURL и WP_HOME в MultiSite, я написал собственный фильтр для замены_config_wp_siteurl() а также_config_wp_home() функции, доступные для не-многоузловой установки, которая включена в плагин, который доступен для всей сети и настроен вwp-config.php, Затем я могу скопировать все таблицы базы данныхКроме wp_site а такжеwp_blogs в локальную базу данных.

Я очень рекомендуюМетоды замены токена URL для WordPress 3.0 статья Криса Мерфи, чтобы помочь обрабатывать URL в вашем контенте.

В этом примере предполагается многоузловая установка на поддомене с доменомexample.com и два поддоменов,www.example.com а такжеsecond.example.com, URL локальной разработки будутwww.example.local а такжеsecond.example.local соответственно.

Изменения базы данных:

Обновите значение домена в:wp_site

UPDATE wp_site SET domain = 'example.local' WHERE domain = 'example.com';

Обновите значения домена в:wp_blogs

UPDATE wp_blogs SET domain = 'www.example.local' WHERE domain = 'www.example.com';
UPDATE wp_blogs SET domain = 'second.example.local' WHERE domain = 'second.example.com';

Код плагина: Следующий плагин должен быть установлен в сети.


Настройте wp-config.php:

Добавить новые константы вwp-config.php, Основной сайт должен использовать стандартWP_HOME а такжеWP_SITEURL и третичные URL должны использоватьWP_{$blog_id}_HOME а такжеWP_{$blog_id}_SITEURL

define('WP_HOME',      'http://www.example.local');
define('WP_SITEURL',   'http://www.example.local');
define('WP_2_HOME',    'http://secondary.example.local');
define('WP_2_SITEURL', 'http://secondary.example.local');
 ar09996801 июн. 2016 г., 15:25
WP_HOME и WP_SITEURL не должны иметь никакого эффекта в MS
 doublesharp01 мая 2013 г., 06:27
Нет проблем, я немного расширил его, чтобы сделать больше вещей, включая замену ссылок в содержании здесь:justin.ag/technology/wordpress-plugins/... Мета-хуки закомментированы, потому что я столкнулся с некоторыми проблемами (которые, возможно, были связаны с кэшированием), но я использовал его на одном из своих мультисайтов некоторое время без проблем. Вы должны определитьWP_DEVELOPMENT=true Постоянная перезапись URL, замена токена URL должна выполняться постоянно.
 doublesharp01 дек. 2016 г., 19:33
@ ar099968 это правильно, и именно та проблема, которая у меня была. Я использовал их, прежде чем перейти на MultiSite, и мне нужен был способ достичь той же функциональности, которую в основном делает плагин, который я написал.
 slifty01 мая 2013 г., 05:00
Это потрясающе. Спасибо.
 shaneonabike01 апр. 2015 г., 19:51
Последнее определение спасло меня после того, как я попробовал плагины и все ... НО я также должен был повторно посетить страницу администратора сети WordPress и заново сохранить каждую страницу сайта.

Ваш ответ на вопрос