Преобразование мультисайтовой установки WordPress в единый сайт
17
Учитывая многосайтовую сеть WordPress с основным блогом и предполагая, что весь контент был перенесен в этот блог, как можно было бы свернуть сеть обратно в стандартную несетевую не многосайтовую установку WordPress?
Я думаю, что лучший способ выразить это было бы извлечь отдельный сайт из сети. Свертывание сети в обратном направлении будет работать только с основным сайтом, а не с тем, что на нем было создано.
sanchothefat
Ответы:
17
Я прошел шаги по извлечению сайта из многосайтовой установки в один экземпляр:
Установите чистую копию WP, но не устанавливайте ее
Найти идентификатор сайта
Скопируйте файлы из blogs.dir / ID / files в новую папку загрузок WP.
Скопируйте тему, которую использует сайт, и любые плагины, которые он использует, в соответствующие папки в новой папке wp-content
Возьмите резервную копию многосайтовой базы данных, но только таблицы для целевого сайта и таблицы пользователей и пользовательских метаданных, использующие MySQL Workbench или эквивалентный
Восстановите резервную копию в новой базе данных и измените префиксы имен таблиц, чтобы они все были одинаковыми, например. от wp_SITEID_ до wp_
Используя MySQL Workbench или браузер запросов, приведите в порядок таблицы usermeta и пользователей следующим образом:
DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
Начните процесс установки WP, чтобы создать, wp-config.phpно не нажимайте «Запустить установку»
Создайте файл .htaccess по умолчанию, если использовались постоянные ссылки, или просто посетите страницу постоянных ссылок в wp-admin
Вам нужно будет обновить любые старые URL в вашей базе данных дальше. В идеале используйте безопасный инструмент поиска / замены, такой как в wp-cli, или его универсальный инструмент поиска / замены db на interconnect / it . Определенно замените blogs.dir/SITE_ID/filesна uploads, и если вы меняете URL своего сайта, найдите oldsite.comи замените на newsite.com.
Немного усилий, и вы должны быть осторожны с изменениями базы данных, но это единственное, что я вижу, чтобы извлечь отдельный сайт из существующего мультисайта со всеми его настройками и т. Д. Без изменений.
РЕДАКТИРОВАТЬ:
Как заметил @Jake, я забыл упомянуть последние шаги, которые вам, возможно, придется предпринять, например. поиск / замена старых URL. Я обновил список соответственно.
Ничто на шаге 7 не работало и не оказывало никакого эффекта, когда я сменил SITEIDправильный идентификатор сайта. Вместо этого, вы должны отметить , что siteurlи homeварианты, вероятно , должны быть обновлены в wp_optionsтаблице. В остальном это был довольно хороший контрольный список. Благодарю.
Джейк
Также, вероятно, потребуется выполнить поиск и замену в базе данных для старого домена / нового домена при изменении. И почти ОПРЕДЕЛЕННО нужно будет найти и заменить для blogs.dir или загрузок / сайтов, чтобы убедиться, что любые ссылки на изображения / файлы верны. Будьте осторожны со всеми сериализованными данными в WP. Не очень безопасно запускать открытый поиск и замену в MYSQL. Используйте что-то вроде: interconnectit.com/products/…
Джейк
@ Джейк спасибо, я забыл контекст изменения URL, и вы правы, я пропустил шаг поиска / замены для существующих URL, добавив его ради полноты
sanchothefat
@ Джейк Я не вдавался в подробности, но шаг 7 в основном удаляет пользователей, которые не принадлежат сайту, который вы извлекаете, и удостоверяется, что у них все еще есть правильные разрешения. Это действительно чистая задача.
sanchothefat
Я понял, что они сделали, только первая пара вернула мне ошибки, но, может быть, я что-то упустил, и я не уверен, что у меня есть какие-то пользователи, чтобы очистить, так что все равно было легко пропустить. И не поймите меня неправильно, это было очень полезно без других вещей, просто замечательно для использования в будущем. Благодарность!
Джейк
5
Можно удалить многосайтовую установку без переустановки нового блога. Следуйте шагам.
Создать резервную копию, дамп базы данных и файл резервной копии wp-контента
Удалите настройки MU из .htaccess, как источник ниже:
# BEGIN WordPressRewriteEngineOnRewriteBase/wordpress/RewriteRule^index\.php$ -[L]# uploaded filesRewriteRule^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]# add a trailing slash to /wp-admin RewriteRule^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/[R=301,L]RewriteCond%{REQUEST_FILENAME}-f [OR]RewriteCond%{REQUEST_FILENAME}-d
RewriteRule^-[L]RewriteRule^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]RewriteRule^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]RewriteRule. index.php [L]# END WordPress
Создайте постоянные ссылки new в backend wp-admin/options-permalink.phpи, возможно, скопируйте результат в .htaccess, если это невозможно для WP, права на запись в этот файл.
Удалить ненужные записи в таблице users; используйте следующую инструкцию SQL в инструменте, таком как phpMyAdmin или Adminer
`ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
Следующие таблицы могут быть удалены:
wp_blogs
wp_blog_versions
wp_registration_log
wp_signups
wp_site
wp_sitemeta
wp_sitecategories (только если есть)
(измените wp_префикс вашей базы данных)
Теперь у вас есть только последние таблицы других блогов сети. Если вы будете использовать и этот контент, то экспортируйте его раньше с помощью экспорта WordPress в формате XML и импортируйте сейчас в единой чистой установке.
Это хороший ответ, но я принял @sanchothefat, поскольку его можно использовать для извлечения любого сайта независимо от ID, тогда как ваши инструкции дадут мне корневой сайт
Том Дж. Новелл
1
На самом деле это возможно и довольно легко сделать; Я сделал это сам несколько раз.
Есть вещи для рассмотрения.
wp-config.php, который определяет, является ли мультисайт или одиночный сайт
.htaccess, который содержит правила перезаписи для поддержки нескольких сайтов
дополнительные таблицы, созданные для поддержки нескольких сайтов
Закомментирование определения мультисайта (?) В wp-config и обновление ваших постоянных ссылок вернет сайт в режим одного сайта / по умолчанию. Тогда все, что вам нужно сделать, это очистить базу данных.
Если по какой-либо причине вы не можете получить доступ к своему wp-admin для обновления постоянных ссылок, просто удалите ваш файл .htaccess. WordPress воссоздает его для вас в режиме одного сайта.
Я сделаю все возможное, чтобы найти ссылку на код / статью поддержки и обновить ответ с ним.
Основные процессы здесь работают хорошо даже в WP 3.5.1 Одно уточнение: если вы назвали свой дочерний сайт чем-то, вам придется изменить ссылки в базе данных, чтобы удалить это имя. Если мой дочерний сайт был назван ... mysite.com/comics, то после выполнения описанных выше процедур ваш WP будет искать mysite.com/comics и получать ошибки по постоянным ссылкам. Отредактируйте таблицу WP-OPTIONS в поисках расширения / comics и удалите его. Кроме того, убедитесь, что каталог Uploads указывает на правильное местоположение - он может по-прежнему отображать запись blogs.dir и теперь должен вместо этого указывать на wp-content / uploads /
Ответы:
Я прошел шаги по извлечению сайта из многосайтовой установки в один экземпляр:
DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
wp-config.php
но не нажимайте «Запустить установку»blogs.dir/SITE_ID/files
наuploads
, и если вы меняете URL своего сайта, найдитеoldsite.com
и замените наnewsite.com
.Немного усилий, и вы должны быть осторожны с изменениями базы данных, но это единственное, что я вижу, чтобы извлечь отдельный сайт из существующего мультисайта со всеми его настройками и т. Д. Без изменений.
РЕДАКТИРОВАТЬ:
Как заметил @Jake, я забыл упомянуть последние шаги, которые вам, возможно, придется предпринять, например. поиск / замена старых URL. Я обновил список соответственно.
источник
SITEID
правильный идентификатор сайта. Вместо этого, вы должны отметить , чтоsiteurl
иhome
варианты, вероятно , должны быть обновлены вwp_options
таблице. В остальном это был довольно хороший контрольный список. Благодарю.Можно удалить многосайтовую установку без переустановки нового блога. Следуйте шагам.
WP_ALLOW_MULTISITE
в вашем wp-config.php наFALSE
Удалите или прокомментируйте настройки MU
wp-config.php
, например:Удалите настройки MU из
.htaccess
, как источник ниже:Создайте постоянные ссылки new в backend
wp-admin/options-permalink.php
и, возможно, скопируйте результат в.htaccess
, если это невозможно для WP, права на запись в этот файл.Удалить ненужные записи в таблице
users
; используйте следующую инструкцию SQL в инструменте, таком как phpMyAdmin или AdminerСледующие таблицы могут быть удалены:
(измените
wp_
префикс вашей базы данных)Теперь у вас есть только последние таблицы других блогов сети. Если вы будете использовать и этот контент, то экспортируйте его раньше с помощью экспорта WordPress в формате XML и импортируйте сейчас в единой чистой установке.
источник
На самом деле это возможно и довольно легко сделать; Я сделал это сам несколько раз.
Есть вещи для рассмотрения.
Закомментирование определения мультисайта (?) В wp-config и обновление ваших постоянных ссылок вернет сайт в режим одного сайта / по умолчанию. Тогда все, что вам нужно сделать, это очистить базу данных.
Если по какой-либо причине вы не можете получить доступ к своему wp-admin для обновления постоянных ссылок, просто удалите ваш файл .htaccess. WordPress воссоздает его для вас в режиме одного сайта.
Я сделаю все возможное, чтобы найти ссылку на код / статью поддержки и обновить ответ с ним.
Вот ссылка на один элемент на форуме поддержки http://wordpress.org/support/topic/revert-to-single-site
источник
Основные процессы здесь работают хорошо даже в WP 3.5.1 Одно уточнение: если вы назвали свой дочерний сайт чем-то, вам придется изменить ссылки в базе данных, чтобы удалить это имя. Если мой дочерний сайт был назван ... mysite.com/comics, то после выполнения описанных выше процедур ваш WP будет искать mysite.com/comics и получать ошибки по постоянным ссылкам. Отредактируйте таблицу WP-OPTIONS в поисках расширения / comics и удалите его. Кроме того, убедитесь, что каталог Uploads указывает на правильное местоположение - он может по-прежнему отображать запись blogs.dir и теперь должен вместо этого указывать на wp-content / uploads /
источник
Очень важный момент, который нельзя пропустить, и о котором меньше говорят, это то, что у вас все еще должна быть строка:
define( 'WP_ALLOW_MULTISITE',
...Но это должно быть изменено обновлено до
define( 'WP_ALLOW_MULTISITE', 0 );
источник