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

8 авг. 2011 г., 13:14:30
Просмотры: 12.8K
Голосов: 19

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

2
Комментарии

Я нашел две полезные ссылки ниже, это ВОЗМОЖНО. Полезная информация здесь: http://wpmututorials.com/how-to/how-to-disable-multisite/ и здесь: http://wordpress.org/support/topic/wordpress-mu-multisite-wordpress-single-wordpress-instance Посмотрим, как это сработает.

User User
28 мар. 2012 г. 01:20:59

Думаю, более правильным будет сказать "извлечь отдельный сайт из сети". Сворачивание сети обратно сработает только для основного сайта, но не для тех, что были созданы на его основе.

sanchothefat sanchothefat
3 янв. 2013 г. 13:06:55
Все ответы на вопрос 5
5
19

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

  1. Настройте чистую копию WordPress, но не устанавливайте её
  2. Найдите ID сайта
  3. Скопируйте файлы из blogs.dir/ID/files в новую папку uploads WordPress
  4. Скопируйте тему, которую использует сайт, и все необходимые плагины в соответствующие папки в новой папке wp-content
  5. Сделайте резервную копию базы данных мультисайта, но только таблиц для целевого сайта, а также таблиц users и usermeta, используя MySQL Workbench или аналог
  6. Восстановите резервную копию в новую базу данных и измените префиксы таблиц, чтобы они были одинаковыми, например, 'wp_SITEID_' на 'wp_'
  7. С помощью MySQL Workbench или Query Browser приведите в порядок таблицы users и 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. Начните процесс установки WordPress, чтобы создать wp-config.php, но не нажимайте «Запустить установку»
  9. Создайте стандартный файл .htaccess, если использовались постоянные ссылки, или просто посетите страницу постоянных ссылок в wp-admin
  10. Далее вам нужно обновить старые URL в вашей базе данных. В идеале используйте безопасный инструмент поиска/замены, такой как в wp-cli или его универсальный предшественник search/replace db от interconnect/it. В частности, замените blogs.dir/SITE_ID/files на uploads, а если вы меняете URL сайта, замените oldsite.com на newsite.com.

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

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

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

3 янв. 2013 г. 13:05:41
Комментарии

Ни один из шагов в пункте 7 не сработал и не дал никакого эффекта, когда я изменил SITEID на правильный идентификатор сайта. Вместо этого следует упомянуть, что, скорее всего, потребуется обновить опции siteurl и home в таблице wp_options. В остальном это был довольно хороший чек-лист. Спасибо.

Jake Jake
2 дек. 2013 г. 03:31:11

Также, скорее всего, потребуется выполнить поиск и замену в базе данных для старого домена / нового домена, если происходит его изменение. И почти НАВЕРНЯКА потребуется выполнить поиск и замену для blogs.dir или uploads/sites, чтобы убедиться, что ссылки на изображения/файлы корректны. Однако будьте осторожны со всеми сериализованными данными в WP. Небезопасно выполнять открытый поиск и замену в MYSQL. Используйте что-то вроде: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/

Jake Jake
2 дек. 2013 г. 03:40:38

@Jake спасибо, я забыл о контексте изменения URL, и ты прав, я пропустил шаг поиска/замены для существующих URL, добавлю это для полноты картины

sanchothefat sanchothefat
2 дек. 2013 г. 15:35:13

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

sanchothefat sanchothefat
2 дек. 2013 г. 15:45:28

Я понял, что они сделали, просто первые пару раз возвращались ошибки, возможно, я что-то упустил, и не уверен, что у меня вообще были пользователи для очистки, так что это было легко пропустить. И не поймите меня неправильно, это было чрезвычайно полезно даже без этих дополнительных шагов, просто хорошо отметить для будущего использования. Спасибо!

Jake Jake
2 дек. 2013 г. 17:29:26
1

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

  1. Создайте резервную копию, дамп базы данных и резервную копию папки wp-content
  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]
    
    # загруженные файлы
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
    
    # добавьте завершающий слэш к /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. Создайте новые постоянные ссылки в админке wp-admin/options-permalink.php и, возможно, скопируйте результат в .htaccess, если WordPress не может записать в этот файл из-за прав доступа.

  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 и импортируйте в чистую одиночную установку.

3 янв. 2013 г. 14:47:40
Комментарии

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

Tom J Nowell Tom J Nowell
3 янв. 2013 г. 15:08:49
0

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

Есть три вещи, которые нужно учесть.

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

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

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

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

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

6 нояб. 2012 г. 18:06:58
1

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

12 мар. 2013 г. 20:50:50
Комментарии

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

s_ha_dum s_ha_dum
12 мар. 2013 г. 21:29:53
0

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

define( 'WP_ALLOW_MULTISITE',...

Но её нужно изменить/обновить на:

define( 'WP_ALLOW_MULTISITE', 0 );

22 авг. 2014 г. 22:22:44