Преобразование мультисайтовой установки WordPress в единый сайт

17

Учитывая многосайтовую сеть WordPress с основным блогом и предполагая, что весь контент был перенесен в этот блог, как можно было бы свернуть сеть обратно в стандартную несетевую не многосайтовую установку WordPress?

Том Дж Новелл
источник
Я нашел две полезные ссылки ниже, это возможно. Я нашел полезную информацию здесь: wpmututorials.com/how-to/how-to-disable-multisite и здесь: wordpress.org/support/topic/… Посмотрим, как это будет.
Я думаю, что лучший способ выразить это было бы извлечь отдельный сайт из сети. Свертывание сети в обратном направлении будет работать только с основным сайтом, а не с тем, что на нем было создано.
sanchothefat

Ответы:

17

Я прошел шаги по извлечению сайта из многосайтовой установки в один экземпляр:

  1. Установите чистую копию WP, но не устанавливайте ее
  2. Найти идентификатор сайта
  3. Скопируйте файлы из blogs.dir / ID / files в новую папку загрузок WP.
  4. Скопируйте тему, которую использует сайт, и любые плагины, которые он использует, в соответствующие папки в новой папке wp-content
  5. Возьмите резервную копию многосайтовой базы данных, но только таблицы для целевого сайта и таблицы пользователей и пользовательских метаданных, использующие MySQL Workbench или эквивалентный
  6. Восстановите резервную копию в новой базе данных и измените префиксы имен таблиц, чтобы они все были одинаковыми, например. от wp_SITEID_ до wp_
  7. Используя MySQL Workbench или браузер запросов, приведите в порядок таблицы usermeta и пользователей следующим образом:
    1. DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
    2. DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
    3. UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
    4. UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
  8. Начните процесс установки WP, чтобы создать, wp-config.phpно не нажимайте «Запустить установку»
  9. Создайте файл .htaccess по умолчанию, если использовались постоянные ссылки, или просто посетите страницу постоянных ссылок в wp-admin
  10. Вам нужно будет обновить любые старые URL в вашей базе данных дальше. В идеале используйте безопасный инструмент поиска / замены, такой как в wp-cli, или его универсальный инструмент поиска / замены db на interconnect / it . Определенно замените blogs.dir/SITE_ID/filesна uploads, и если вы меняете URL своего сайта, найдите oldsite.comи замените на newsite.com.

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

РЕДАКТИРОВАТЬ:

Как заметил @Jake, я забыл упомянуть последние шаги, которые вам, возможно, придется предпринять, например. поиск / замена старых URL. Я обновил список соответственно.

sanchothefat
источник
Ничто на шаге 7 не работало и не оказывало никакого эффекта, когда я сменил SITEIDправильный идентификатор сайта. Вместо этого, вы должны отметить , что siteurlи homeварианты, вероятно , должны быть обновлены в wp_optionsтаблице. В остальном это был довольно хороший контрольный список. Благодарю.
Джейк
Также, вероятно, потребуется выполнить поиск и замену в базе данных для старого домена / нового домена при изменении. И почти ОПРЕДЕЛЕННО нужно будет найти и заменить для blogs.dir или загрузок / сайтов, чтобы убедиться, что любые ссылки на изображения / файлы верны. Будьте осторожны со всеми сериализованными данными в WP. Не очень безопасно запускать открытый поиск и замену в MYSQL. Используйте что-то вроде: interconnectit.com/products/…
Джейк
@ Джейк спасибо, я забыл контекст изменения URL, и вы правы, я пропустил шаг поиска / замены для существующих URL, добавив его ради полноты
sanchothefat
@ Джейк Я не вдавался в подробности, но шаг 7 в основном удаляет пользователей, которые не принадлежат сайту, который вы извлекаете, и удостоверяется, что у них все еще есть правильные разрешения. Это действительно чистая задача.
sanchothefat
Я понял, что они сделали, только первая пара вернула мне ошибки, но, может быть, я что-то упустил, и я не уверен, что у меня есть какие-то пользователи, чтобы очистить, так что все равно было легко пропустить. И не поймите меня неправильно, это было очень полезно без других вещей, просто замечательно для использования в будущем. Благодарность!
Джейк
5

Можно удалить многосайтовую установку без переустановки нового блога. Следуйте шагам.

  1. Создать резервную копию, дамп базы данных и файл резервной копии wp-контента
  2. Установите константу WP_ALLOW_MULTISITEв вашем wp-config.php наFALSE
  3. Удалите или прокомментируйте настройки MU wp-config.php, например:

    /**
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', false );
    $base = '/wordpress/';
    define( 'DOMAIN_CURRENT_SITE', 'localhost' );
    define( 'PATH_CURRENT_SITE', '/wordpress/' );
    define( 'SITE_ID_CURRENT_SITE', 1 );
    define( 'BLOG_ID_CURRENT_SITE', 1 );
    */
  4. Удалите настройки MU из .htaccess, как источник ниже:

    # BEGIN WordPress
    RewriteEngine On
    RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [L]
    
    # uploaded files
    RewriteRule ^([_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
  5. Создайте постоянные ссылки new в backend wp-admin/options-permalink.phpи, возможно, скопируйте результат в .htaccess, если это невозможно для WP, права на запись в этот файл.

  6. Удалить ненужные записи в таблице users; используйте следующую инструкцию SQL в инструменте, таком как phpMyAdmin или Adminer

    `ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
  7. Следующие таблицы могут быть удалены:

    • wp_blogs
    • wp_blog_versions
    • wp_registration_log
    • wp_signups
    • wp_site
    • wp_sitemeta
    • wp_sitecategories (только если есть)

    (измените wp_префикс вашей базы данных)

  8. Теперь у вас есть только последние таблицы других блогов сети. Если вы будете использовать и этот контент, то экспортируйте его раньше с помощью экспорта WordPress в формате XML и импортируйте сейчас в единой чистой установке.

bueltge
источник
1
Это хороший ответ, но я принял @sanchothefat, поскольку его можно использовать для извлечения любого сайта независимо от ID, тогда как ваши инструкции дадут мне корневой сайт
Том Дж. Новелл
1

На самом деле это возможно и довольно легко сделать; Я сделал это сам несколько раз.

Есть вещи для рассмотрения.

  1. wp-config.php, который определяет, является ли мультисайт или одиночный сайт
  2. .htaccess, который содержит правила перезаписи для поддержки нескольких сайтов
  3. дополнительные таблицы, созданные для поддержки нескольких сайтов

Закомментирование определения мультисайта (?) В wp-config и обновление ваших постоянных ссылок вернет сайт в режим одного сайта / по умолчанию. Тогда все, что вам нужно сделать, это очистить базу данных.

Если по какой-либо причине вы не можете получить доступ к своему wp-admin для обновления постоянных ссылок, просто удалите ваш файл .htaccess. WordPress воссоздает его для вас в режиме одного сайта.

Я сделаю все возможное, чтобы найти ссылку на код / ​​статью поддержки и обновить ответ с ним.

Вот ссылка на один элемент на форуме поддержки http://wordpress.org/support/topic/revert-to-single-site

Стив
источник
0

Основные процессы здесь работают хорошо даже в WP 3.5.1 Одно уточнение: если вы назвали свой дочерний сайт чем-то, вам придется изменить ссылки в базе данных, чтобы удалить это имя. Если мой дочерний сайт был назван ... mysite.com/comics, то после выполнения описанных выше процедур ваш WP будет искать mysite.com/comics и получать ошибки по постоянным ссылкам. Отредактируйте таблицу WP-OPTIONS в поисках расширения / comics и удалите его. Кроме того, убедитесь, что каталог Uploads указывает на правильное местоположение - он может по-прежнему отображать запись blogs.dir и теперь должен вместо этого указывать на wp-content / uploads /

user28829
источник
Можете ли вы отредактировать это, чтобы быть отдельным ответом. Похоже, что это может быть комментарий к одному из других ответов.
s_ha_dum
0

Очень важный момент, который нельзя пропустить, и о котором меньше говорят, это то, что у вас все еще должна быть строка:

define( 'WP_ALLOW_MULTISITE',...

Но это должно быть изменено обновлено до

define( 'WP_ALLOW_MULTISITE', 0 );

smhnaji
источник