Каков наилучший способ обмена пользовательскими данными между несколькими веб-сайтами Wordpress?

10

Прежде всего, Multisite - это не то, что я ищу. У меня есть 5 веб-сайтов, использующих Wordpress на разных доменах, для которых я хотел бы включить учетные записи пользователей. Мне нужно, чтобы пользовательские данные были доступны для всей сети, и когда пользователь создает учетную запись, он также получает мгновенный доступ ко всем другим веб-сайтам. То, что я пытаюсь сделать, не рекомендуется Wordpress при использовании Multisite:

Если вы планируете создавать сайты, которые тесно связаны между собой, которые совместно используют данные или пользователей, то многосайтовая сеть может оказаться не лучшим решением. - http://codex.wordpress.org/Before_You_Create_A_Network (1-й абзац, 3-е предложение)

Я попытался использовать «трюк с таблицей общих пользователей», как упомянуто здесь http://wordpress.org/support/topic/multiple-sites-same-users-how и здесь http://xentek.net/articles/528/ внедрение-wordpress-shared-users-table-trick / и ряда других мест ... проблема в том, что этой информации 2-7 лет, и я использую Wordpress 3.5.1, и этот "трюк" не не похоже на работу.

Я попытался вставить этот код в wp-config в $table_prefixстроке.

define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USER_META_TABLE', 'wp_usermeta');

Короче говоря, я не думаю, что этот трюк больше работает, так как я вообще не могу войти на второй сайт на стороне администратора.

Любые предложения о том, как лучше связать эти данные?

Ян
источник
1
Я не понимаю, почему CUSTOM_USER_TABLEбы не работать ... Посмотрите, есть ли что-то здесь: wordpress.stackexchange.com/search?q=CUSTOM_USER_TABLE
brasofilo
Когда я использую CUSTOM_USER_TABLE, пользователи получают общий доступ к веб-сайту, однако на втором веб-сайте я не могу войти в систему как администратор. Поиск по часам и поиск плагинов и статей, которым 2-7 лет, заставляет меня поверить, что этот трюк больше не работает в 3.5.1 ...
Иан
Вопрос в том, что это не уловка , это основная особенность . Похоже, что об ошибках не сообщалось, и ничего значимого не появляется в списке [wp-hackers] ...
brasofilo
Спасибо за ваши комментарии. Я смог найти ответ, углубившись в некоторые вещи, которые я видел в ваших ссылках. Я разместил свое решение ниже. Еще раз спасибо @brasofilo
Ян
Действительно здорово, что вы почти охватили все способы обмена пользователями. но у меня немного другая ситуация здесь. Ive 5 WordPress веб-сайт, что каждый конкретный сайт имеет свою собственную базу данных. Как я могу использовать ваше решение для соединения всех отдельных пользовательских таблиц таким образом, когда новый пользователь регистрируется на любом из 5 веб-сайтов, он может сразу же войти на любой другой веб-сайт, используя одну регистрацию? Я знаю о каком-либо способе сделать это в одной базе данных с использованием WPMU, но я на самом деле не нашел способа сделать это на отдельных установках WordPress. Буду признателен за любую помощь. Спасибо

Ответы:

8

Хорошо, во-первых, я чувствую себя идиотом, хотя в мою защиту большинство статей, которые говорят об этом, не упоминают очень важную деталь в создании этой работы. Ответ заключается в том, что вам нужно установить разрешение как минимум для одного администратора в базе данных. Эту информацию можно найти в Кодексе здесь: http://codex.wordpress.org/Editing_wp-config.php#Custom_User_and_Usermeta_Tables

После того, как вы настроите файл wp-config.php, обязательно внесите изменения в главную таблицу usermeta (в моем случае wp_usermeta), строку wp_capabilities, и столбец meta_value. Сделайте это через phpMyAdmin.

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

Скриншот того, какие права пользователей будут изменены

Для каждого создаваемого веб-сайта необходимо, чтобы префикс нового сайта назначался роли администратора.

В моем случае, поскольку у меня это работает только на 2 сайтах, на данный момент это выглядит так:

a:1:{s:13:"administrator";s:1:"1";}
tbs_capabilities = a:1:{s:13:"administrator";s:1:"1";}

Снимок экрана со значением wp_usermeta

Первая строка устанавливает разрешения для префикса таблицы по умолчанию (в данном случае wp_), а вторая строка устанавливает разрешения для второго веб-сайта (в данном случае с префиксом tbs_).

Спасибо brasofilo за комментарий, который заставил меня копать немного дальше, чтобы наконец решить мою проблему!

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

Ян
источник
Никогда не использовал эту функцию, но рад знать, что есть этот маленький трюк, чтобы заставить его работать;) Хорошая
рецензия
1
спасибо, это обязательно нужно упомянуть в уроках!
Мирча Санду
2

При совместном использовании wp_users и wp_meta возникает другая проблема, другая установка WordPress распознает пользователей, но не распознает роли пользователей, приходящих с другого веб-сайта . Роль отображается как неопределенная.

Итак, вы отредактировали свой wp-config.php как требуется:

define('CUSTOM_USER_TABLE', 'someprefix_users');
define('CUSTOM_USER_META_TABLE', 'someprefix_usermeta');

Я думаю, что самый простой способ сделать это, не вмешиваясь в работу с БД, - это использовать внутренние компоненты wp. При входе в систему можно назначить роль. Допустим, нам нужна роль участника для всех и роль администратора для пользователя 'superman'.

function check_user_role($user_login, $user) {
  if ( $user_login == 'superman' ) {
     $user->add_role('administrator');
     } else {
     $user->add_role('contributor');
  }
}

// the action fired on login
add_action('wp_login', 'check_user_role', 10, 2);

Таким образом, пользователи, пришедшие с первоначального веб-сайта, получают роль «участник» при входе в систему.

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

http://codex.wordpress.org/Class_Reference/WP_User

Дженк
источник
0

Я должен был создать новую строку:

meta_key='tbs_capabilities' meta_value='a:1:{s:13:"administrator";b:1;}'

и user_id=1. Метод, который вы описали, не сработал.

Джеймс Смит
источник
1
В приведенном выше ответе «tbs» - это префикс второго сайта WordPress, который я установил. Таким образом, вместо того, чтобы таблица была wp_posts, она была бы tbs_posts. Если вы явно не установите $ table_prefix = 'tbs_'; это не сработает.
Ян