Вопрос или проблема
Я использую phpMyAdmin, чтобы добавить новые записи пользователей к существующим пользователям в базе данных WordPress. База данных предназначена для сети WordPress Multisite.
Мне пришлось перенести мой старый сайт WP на новый сайт, но старая база данных имела структуру единой базы данных WP, а новая мультисайт WP имеет три новые записи для каждого пользователя.
Мой вопрос: как я могу обновить/вставить тысячи существующих записей пользователей с этими тремя новыми записями для WP multisite?
Вот три новые записи для таблицы wp_usermeta
:
(225579, 7520, 'locale', ''),
(225583, 7520, 'primary_blog', '3'),
(225584, 7520, 'source_domain', 'example.com'),
Без добавленных этих записей каждый отдельный блог не может видеть своих собственных клиентов. В WP multisite все пользователи и мета-пользователи консолидированы в одну таблицу.
Для начала, мои старые записи клиентов можно найти в таблице wp_usermeta как:
(225571, 7520, 'first_name', 'John'),
(225572, 7520, 'last_name', 'Doe'),
Теперь мне нужно добавить 3 вышеуказанные записи к каждому существующему user_id
. Как вы можете видеть в моем примере, user_id
одинаковый для всех 5 записей. Имейте в виду, что я использую данные нового пользователя, чтобы подчеркнуть то, что мне нужно. Я должен добавить 3 новые записи к каждому существующему user_id
с нуля.
Я пробовал несколько вещей безуспешно:
INSERT INTO wp_usermeta SELECT DISTINCT meta_key FROM wp_usermeta VALUES ('source_domain', 'example.com');
INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value) VALUES ('primary_blog', '3');
INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value) SELECT DISTINCT umeta_id, user_id, 'source_domain', 'example.com';
INSERT INTO wp_usermeta (meta_key, meta_value) SELECT 'souce_domain', 'example.com';
INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value) SELECT umeta_id, user_id, 'source_domain', 'example.com' WHERE user_id >= '51'
INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value) SELECT DISTINCT (umeta_id, user_id, 'source_domain', 'example.com') WHERE user_id = user_id
INSERT INTO wp_usermeta VALUES (umeta_id, user_id>='51', meta_key='source_domain', meta_value="example.com") ON DUPLICATE KEY UPDATE user_id;
Имена таблиц и столбцов:
Таблица = wp_usermeta
Столбцы = umeta_id, user_id, meta_key, meta_value
Вот запрос. Попробуйте это, не забудьте заменить user_id на фактический идентификатор пользователя, meta key на ваш meta_key, например “phone_no”, а meta value на ваше meta_value, например “1238899776”.
INSERT INTO `wp_usermeta`(`user_id`, `meta_key`, `meta_value`)
VALUES (1375,'_lastlogin', '1497621956')`
Ответ или решение
Когда вы переносите старый сайт WordPress в сеть Multisite, важно корректно обновить таблицы базы данных, чтобы пользователи могли получить доступ к своим данным. В вашем случае необходимо добавить новые записи в таблицу wp_usermeta
для существующих пользователей, чтобы обеспечить их взаимодействие с новыми сайтом и его функциональностью.
Шаги по добавлению новых данных в таблицу wp_usermeta
-
Подготовка данных: Вам необходимо создать новые записи для каждого пользователя, используя их идентификатор (
user_id
). Убедитесь, что идентификатор пользователя, который вы используете, существует в таблицеwp_usermeta
. -
Структура записи: У вас есть три новых метаполе, которые вы хотите добавить для каждого пользователя:
locale
(пустое значение)primary_blog
(идентификатор блога, например ‘3’)source_domain
(например ‘example.com’)
-
SQL-запрос для добавления записей:
Ниже приведен SQL-запрос, который добавит указанные вами поля для каждого пользователя. Не забудьте заменить
<user_id>
на актуальный идентификатор пользователя или использовать цикл для перебора всех идентификаторов.INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (7520, 'locale', ''), (7520, 'primary_blog', '3'), (7520, 'source_domain', 'example.com');
Если вы хотите обновить метаданные для множества пользователей, вы можете использовать следующий запрос с
INSERT ... ON DUPLICATE KEY UPDATE
, чтобы избежать дублирования записей:INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (7520, 'locale', ''), (7520, 'primary_blog', '3'), (7520, 'source_domain', 'example.com') ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value);
-
Автоматизация для всех пользователей: Если вы хотите добавить эти данные всем пользователям в таблице
wp_usermeta
, вы можете использовать следующий запрос:INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, 'locale', '' FROM wp_usermeta GROUP BY user_id ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value); INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, 'primary_blog', '3' FROM wp_usermeta GROUP BY user_id ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value); INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, 'source_domain', 'example.com' FROM wp_usermeta GROUP BY user_id ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value);
Рекомендации
- Резервное копирование базы данных: Прежде чем вносить изменения в базу данных, убедитесь, что у вас есть актуальная резервная копия, чтобы избежать потери данных.
- Тестирование: Запустите изменения на небольшом наборе данных или в тестовом окружении, чтобы убедиться, что всё работает как задумано.
- Эффективность запросов: Обратите внимание на то, что выполнение больших вставок может занять время. Делайте это в плановых окнах или с минимальной нагрузкой на сервер.
Следуя этим шагам, вы сможете успешно обновить метаполе пользователей в вашей сети WordPress Multisite.