Иногда нужно отказаться от мультисайтовости на вордпресс. В данной статье приводится пример, как отключить мультисайт только для главного домена. Если Вы хотите сохранить все сайты, и перевести их каждый на отдельную копию wordpress, то используйте другое решение, эта инструкция не входит в эту статью. Вы можете заказать перенос каждого сайта здесь.
Каких-то подробных описаний не будет, всего лишь пошаговый алгоритм, как выключить режим мультисайта — Вы должны понимать, что Вы делаете.
1. Делаем полную резервную копию!
Обязательно! Делаете резервную копию базы данных и файлов, которые будете править.
2. Удаляем все оставшиеся сайты
Нужно удалить все сайты из вашей Multisite установки, кроме основного сайта. Перейти в «Мои сайты» → «Сайты» в консоли администратора WordPress.
3. Удалите ненужных пользователей
Удалите пользователей, которым вы не хотите больше давать доступ к вашему сайту. Просто удалив сайт, вы не удалите пользователей, которые были связаны с этим сайтом, потому что пользователи в Multisite глобальны. Так что вам нужно почистить учетные записи ваших пользователей, перейдя в блок «Пользователи» в консоли администратора.
4. Редактируем файл wp-config.php
Открываем файл wp-config.php в корневой директории сайта и удаляем строки:
define('WP_ALLOW_MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'wplife.ru'); // Здесь вместо wplife.ru ваш сайт
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
Значение строки define(‘MULTISITE’, true); меняем с true на false, получится вот так define(‘MULTISITE’, false);
5. Удаляем файл .htaccess из корневой директории сайта.
На последнем этапе, он будет создан автоматически.
6. Заходим в ваш phpMyAdmin и удаляем следующие таблицы из базы данных:
- wp_blogs
- wp_blog_versions
- wp_registration_log
- wp_signups
- wp_site
- wp_sitemeta
Вместо wp_ у вас будет другой префикс, если вы его меняли при установке.
Если вы используете WordPress MU Domain Mapping, вы также можете удалить следующие две таблицы:
- domain_mapping
- domain_mapping_logins
7. Удаляем таблицы созданных сайтов в нашей сети.
Выделяем таблицы с названием вида wp_1_* (вместо wp_ ваш префикс) и удаляем их тоже.
Пояснение: WordPress MU для каждого нового сайта в сети создаёт одинаковую структуру таблиц, где цифра в названии таблицы — это порядковый номер сайта в сети. Таким образом, нам нужно удалить все таблицы, начинающиеся на wp_X_название_таблицы.
Здесь «wp» — это префикс, «X» — цифра, а «название_таблицы» — все значения из списка: commentmeta, comments, links, options, postmeta, posts, terms, term_relationships, term_taxonomy, ну и ещё какие-нибудь подобные.
8. Удаляем два поля «spam» и «deleted» из таблицы wp_users
Заходим в структуру таблицы wp_user, отмечаем галочками два поля spam и deleted и удаляем их.
9. Удалите плагины, связанные с Multisite
Сейчас самое время пройтись по списку плагинов и удалить те, которые вам больше не нужны.
Так же посмотрите на вашу папку mu-plugins в папке wp-content и удалите то, что вам не нужно (там плагины, которые подключаются по умолчанию, из админки их нельзя отключить).
10. Удалите ненужные папки из wp-content
Удаление ненужных папок из папки wp-content. Multisite создает папку под названием blogs.dir в wp-content. Когда Multisite включен, папка blogs.dir содержит папки для каждого сайта, где хранятся загрузки для этого сайта. Так что теперь мы можем удалить папку blogs.dir.
11. Включите плагины, отключенные после деактивации Multisite
Это шаг, который легко упустить. Если у Вас были плагины, которые были активированы для сети, то после отключения Multisite удаляется возможность сетевой активации, так что на вашем главном сайте эти плагины станут неактивными. Потому вам нужно вернуться и активировать те из них, которые вы хотите продолжить использовать.
7. Восстанавливаем .htacces
Заходим в админку нашего сайта. Может выйти сообщение, что режим мультисайта выключен. Переходим в меню «Параметры» — «Постоянные ссылки» и нажимаем «Сохранить», для создания нового файла .htaccess
Ай норм мануал! Выключил мультисайт, т.к. все равно не делал сетку, а работал с основным сайтом.
А если мультисайт даже не открывается? Есть дамп базы, есть все файлы. Попытка архивирования с Duplicator еще на старом хостинге не удалась, этот плагин не работает с мультисайтами. На локальном сайт, развернутый из архивов, не заработал. Постоянно перекидывает на сервер, хотя исправлены URL в конфиге и в базе и в .htaccess.
Можно не удалять таблицы, а скопировать одну группу с wp_1, например, и перенести ее в другую базу? Буду пробовать.
Не работает после восстановления с дампа?
— где то не все устранили. Например, возможно, в файле host прописан ваш домен c ip, и тогда с локалки будет перекидывать.
Поля spam и deleted из таблицы wp_users НЕ удаляются. Выскакивает Неизвестная ошибка #1067
Как вы их удаляли?
Ошибка #1067 обычно возникает, если вы пытаетесь изменить значение первичного ключа таблицы, которое используется в качестве внешнего ключа в других таблицах, связанных с данной.
В таблице wp_users поле ID является первичным ключом, и поля spam и deleted не могут быть удалены, так как они связаны с этим первичным ключом через внешний ключ.
Чтобы удалить эти поля, сначала нужно обновить данные в связанных таблицах и удалить ссылки на эти поля. И только потом можно будет удалить их из таблицы wp_users.
Если вы не уверены, какие таблицы могут быть связаны с полем ID в таблице wp_users, то можно использовать следующий запрос к базе данных WordPress:
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = ‘wp_users’
AND REFERENCED_COLUMN_NAME = ‘ID’;
Этот запрос вернет список таблиц и полей, которые имеют ссылки на поле ID в таблице wp_users. Одним из способов обновления связанных таблиц может быть использование стандартных запросов UPDATE и DELETE.
Например, если вы хотите обновить поле user_id в таблице wp_comments, чтобы удалить ссылку на поле ID в таблице wp_users, можно использовать следующий запрос:
UPDATE wp_comments
SET user_id = NULL
WHERE user_id IN (SELECT ID FROM wp_users WHERE spam = 1 OR deleted = 1);
Этот запрос сбросит значение поля user_id на NULL для всех комментариев, у которых ID пользователя (user_id) равен ID пользователей в таблице wp_users, у которых поля spam или deleted установлены в значение 1.
Вы должны выполнить подобные обновления данных для всех таблиц, в которых имеются ссылки на поле ID в таблице wp_users. После того, как все связанные таблицы обновлены, можно будет удалить поля spam и deleted из таблицы wp_users, используя следующие запросы:
ALTER TABLE wp_users DROP spam;
ALTER TABLE wp_users DROP deleted;
Обратите внимание, что удаление полей может привести к нежелательным последствиям, таким как нарушение целостности данных или ошибки в коде. Поэтому перед удалением всегда нужно создавать резервные копии базы данных и проверять, какие последствия могут возникнуть после удаления поля.