Який найкращий спосіб обміну даними користувачів на кількох веб-сайтах 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-користувачів-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-хакерів] ...
brasofilo

Дякуємо за ваші коментарі. Я зміг знайти відповідь, заглибившись у деякі речі, які я побачив у ваших посиланнях. Я розмістив своє рішення нижче. Ще раз дякую @brasofilo
Ян

Дійсно чудово, ви майже висвітлювали всі шляхи щодо того, як ділитися користувачами. але тут трохи інша ситуація. Ive 5 wordpress веб-сайт, що кожен конкретний веб-сайт має свій власний db. Як я можу використовувати ваше рішення для з'єднання всіх окремих таблиць користувачів таким чином, коли новий користувач реєструється на будь-якому з 5 веб-сайтів, він може негайно увійти на будь-який з інших веб-сайтів за допомогою однієї реєстрації? Я знаю, який спосіб досягти цього в одній базі даних за допомогою WPMU, але я насправді не знаходжу жодного способу зробити це на окремих установках wordpress. Буде надана будь-яка допомога. Дякую

Відповіді:


8

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

Після встановлення файлу wp-config.php обов'язково потрібно внести зміни в головну таблицю Usermeta (в моєму випадку wp_usermeta) рядок wp_capability поля і стовпець meta_value. Зробіть це через phpMyAdmin.

Примітка. Зробіть це для принаймні одного адміністратора користувача для входу в систему. Ви можете налаштувати всі інші ролі користувачів / адміністратора з бекенда, як тільки ви ввійдете.

Знімок екрана того, які дозволи користувачів буде змінено

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

У моєму випадку, оскільки я працюю лише на двох сайтах, на даний момент це виглядає приблизно так:

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

Знімок екрана значення wp_usermeta

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

Дякую brasofilo за коментар, який вказав мені, щоб копати трохи далі, щоб остаточно вирішити моє питання!

Я сподіваюся, що ця відповідь може допомогти іншим, хто мав те саме питання, що і я.


Ніколи не використовував цю функцію, але радий знати, що є ця маленька хитрість, щоб змусити її працювати;) Приємна реєстрація +1
brasofilo

1
дякую, це обов'язково потрібно згадати в навчальних посібниках!
Мірча Санду

2

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

Отже, ви редагували wp-config.php у міру необхідності:

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

Я думаю, що найпростіший спосіб зробити це, не торкаючись db, - за допомогою wp внутрішніх пристроїв. Після входу в систему можна призначити роль. Скажімо, нам потрібна роль дописувача для всіх і роль адміністратора для «супермена користувача».

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_'; це не спрацює.
Ян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.