Как использовать hyperdb для разделения и совместного использования набора данных пользователя между установками WordPress?

Я ищу способ разделить моих пользователей и таблицу usermeta на другую базу данных, чем моя главная установка WP. Конечной целью является разделение этих таблиц на несколько установок WP.

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

Я пробовал что-то вроде этого без успеха:

$wpdb->add_database(array( 'host' => DB_HOST, 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => 'my_user_db_name', 'write' => 0, 'read' => 1, 'dataset' => 'user', 'timeout' => 0.2, )); $wpdb->add_table( $user, $wpdb->base_prefix . 'users' ); $wpdb->add_table( $user, $wpdb->base_prefix . 'usermeta' ); 

Но это не удалось. Любая помощь будет оценена по достоинству. Заранее спасибо. ~ Cam

Solutions Collecting From Web of "Как использовать hyperdb для разделения и совместного использования набора данных пользователя между установками WordPress?"

Я считаю, что Crazycoolcam неправильно написала таблицу, user_meta vs usermeta . Вы также можете определить случай else, что произойдет, если таблица не является пользователем.

Попробуй это:

 <?php $wpdb->add_database(array( //Connect to Users Database 'host' => DB_HOST, // I am using the same host for my two DBs 'user' => DB_USER, // I am using the same username for my two DBs 'password' => DB_PASSWORD, // I am using the same p/w for my two DBs 'name' => 'my_user_db_name', 'write' => 0, // Change to 1 if you want your slave site's the power to update user data. 'read' => 1, 'dataset' => 'user' )); $wpdb->add_database(array( // Main Database 'host' => DB_HOST, 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => DB_NAME, 'write' => 1, // Change to 1 if you want your slave site's the power to update user data. 'read' => 1, 'dataset' => 'global' )); $wpdb->add_callback('user_callback'); function user_callback($query, $wpdb) { if ( $wpdb->base_prefix . 'users' == $wpdb->table || $wpdb->base_prefix . 'usermeta' == $wpdb->table) { return 'user'; } else { return 'global'; } } 

Задача решена. Вот что я сделал:

 $wpdb->add_database(array( //Connect to Users Database 'host' => DB_HOST, // I am using the same host for my two DBs 'user' => DB_USER, // I am using the same username for my two DBs 'password' => DB_PASSWORD, // I am using the same p/w for my two DBs 'name' => 'my_user_db_name', 'write' => 0, // Change to 1 if you want your slave site's the power to update user data. 'read' => 1, 'dataset' => 'user', 'timeout' => 0.2, )); $wpdb->add_database(array( // Main Database 'host' => DB_HOST, 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => DB_NAME, )); $wpdb->add_callback('user_callback'); function user_callback($query, $wpdb) { if ( $wpdb->base_prefix . 'users' == $wpdb->table || $wpdb->base_prefix . 'user_meta' == $wpdb->table) { return 'user'; } } 

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

Я видел несколько человек с таким вопросом: как делиться пользователями между установками WordPress, не используя одну и ту же БД? С HyperDB я смог решить это!