Совместно использовать возможности пользователей между двумя установками WordPress, использующими одну и ту же базу пользователей. - PullRequest
0 голосов
/ 14 сентября 2018

Я создал две установки Wordpress 1) Мастер 2) Раб

Две установки, Master и Slave, совместно используют одну и ту же базу данных.

Я выполнил шаги, упомянутые в этой статье: «Как делиться логинами и пользователями между несколькими сайтами WordPress» https://kinsta.com/blog/share-logins-wordpress/

  • Префикс базы данных для первого мастера установки: "wp_master _"
  • Префикс базы данных для второй ведомой установки: "wp_slave _"

Обе установки используют одну и ту же базу пользователей "wp_master_users" и "wp_master_usermeta".

В таблице "wp_master_usermeta" пользовательские возможности хранятся в

  • строка "wp_master_capabilities" для мастера и
  • Строка wp_slave_capabilities для Slave

Но я хочу, чтобы ведомое устройство использовало wp_master_capabilities вместо wp_slave_capabilities

То есть роли пользователей в обеих установках должны быть такими же, как и у Master.

Как этого достичь?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Я поместил приведенный ниже код в functions.php Master и Slave для достижения функциональности, описанной в вопросе.

(Вся процедура выполняется, как описано в этом посте Как поделитьсяЛогины и пользователи между несколькими сайтами WordPress )

// Синхронизация ролей пользователей между Master и Slave установками WordPress, которые совместно используют одну базу данных

function ksu_save_role1( $user_id, $role ) {

$prefix_1 = 'wp_master_'; Table Prefix of Store (Master) 
$prefix_2 = 'wp_slave_'; Table Prefix of Blog (Slave)

$caps = get_user_meta( $user_id, $prefix_1 . 'capabilities', true ); 
$level = get_user_meta( $user_id, $prefix_1 . 'user_level', true );

if ( $caps ){ 
update_user_meta( $user_id, $prefix_2 . 'capabilities', $caps ); 
}

if ( $level ){ 
update_user_meta( $user_id, $prefix_2 . 'user_level', $level ); 
} 
} 
add_action( 'add_user_role', 'ksu_save_role1', 10, 2); 
add_action( 'wp_login', 'ksu_save_role1', 10, 2);
0 голосов
/ 14 сентября 2018

Я никогда не делал этого раньше, и, возможно, Wordpress имеет хуки для архивирования этого изменения таблицы, но должна быть возможность сделать это и на стороне mysql, что может быть даже лучшим решением.

Вы можете ..

  1. использовать объединенное хранилище (https://stackoverflow.com/a/24532395/10362812)
    Это мое любимое, потому что вам даже не нужно делиться базой данных илидаже сервер mysql
    Недостатком является то, что он не работает с кэшем БД и использует дополнительное соединение.
  2. создает представление (https://stackoverflow.com/a/1890165/10362812)
    Это самое простое решение, которое подходит для вашей конфигурации.
    Недостаток: 2 таблицы имеют , чтобы находиться в одной базе данных / быть назначенными как минимум одному и тому же пользователю.

    -- **Backup your database before trying!** --
    DROP TABLE wp_slave_users;
    DROP TABLE wp_slave_usermeta;
    CREATE VIEW wp_slave_users AS SELECT * FROM wp_master_users;
    CREATE VIEW wp_slave_usermeta AS SELECT * FROM wp_master_usermeta;
    
  3. создать теневую копию (https://stackoverflow.com/a/1890166/10362812)
    Работает с кэшированием и представляет собой отдельную таблицу
    Недостатки как 2. решение + немногонастройки, и я думаю, что это может быть худшим вариантом в производительности

Это все ответы на этот вопрос: Как создать псевдоним таблицы в MySQL

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

Привет, Эрик!

...