多个wordpress共用一个数据库 实现用户共享

多个wordpress共用一个数据库 实现用户共享 事情是这样的,如果我有两个wordpress站点A站和B站,并且他们在同一域名下,现在我想以前A站的用户可以登录B站,在A站注册的用户可以在B站登录,B站注册的用户可以在A登录。并且同一个用户在A站和B站拥有同样的权限。

比如主站A站 A.com,现在要建立英文B站的A.com/en

共用数据库

要实现这样的目的我们必须把两个站点数据放在同一个数据库里,也就是A站和B站的配置文件wp-config.php中数据库名、数据库用户、数据库密码是相同的。

然后假设你之前先有A站并且有用户,数据库前缀是wp_ , 现在设置B站的数据库前缀为wpen_ ,这样他们就区分开了。要B站能共享到A站的用户数据,你需要在B站wp-config.php文件中添加:

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

意思是B站共用A站wp_users和wp_usermeta这两个数据表,用户以及权限等信息在这里面。

安装B站

B站配置文件设置好后,现在打开A.com/en安装B站,你会发现提示用户名已存在,可以不用管接着安装就是,安装好后生成的用户信息也可以不用管。现在你用A站的管理员身份登录B站是可以登录的,但是你进入后台会提示你没有权限的。

现在用户只有身份没有权限。接着我们登陆数据库,这里我们用phpmyadmin来管理数据库的,打开wp_usermeta这个表。你会发现user_id 为1 (管理员),meta_key为wp_capabilities ,权限meta_value 为a:1:{s:13:”administrator”;b:1;} 这样一条数据 。这表示管理员在A站的权限信息。

现在我们要这个管理员在B站也有同样的权限,那就也要有user_id 为1,meta_key为wpen_capabilities ,权限meta_value 为a:1:{s:13:”administrator”;b:1;} 这样一条数据。

明白了吧,现在手动对应的添加一条数据,umate_id 加1,meta_key 为 wpen_capabilities 其他不变。然后保存。现在你登录B站后台就有权限了。

你查看B站用户发现A站的用户都在这里,但是他们在这里都没有任何身份除了登录什么也做不成,这和上面修改管理员权限是一样的道理。我们直接在B站后台批量修改用户角色权限,不用去数据库一个一个修改。

其实我不会mysql不然可直接输入命令批量改:)

新注册用户

到现在为止我们让以前A站用户可以在B登录并有同样权限了,那么以后新注册用户呢?再去B站后台改?也可以不过太麻烦也不及时。搜索到答案在A站主题functions.php里添加:

//用户共享
add_action( 'user_register', 'dup_capabilities' );
add_action('profile_update', 'dup_capabilities');
function dup_capabilities( $user_id ){
//在这里设置数据表前缀,不分主站子站,全部写上即可。
$prefixs = array('wp_','wpen_');
global $table_prefix;
$cap_val = get_user_meta( $user_id, $table_prefix.'capabilities',true);
if( !empty( $cap_val ) ) {
foreach( $prefixs as $prefix ){
if( $prefix != $table_prefix )
update_user_meta( $user_id, $prefix.'capabilities', $cap_val );
}
}
}

这样A站新注册用户可在B站以同样的权限登录,但是有人想了,如果在B站新注册的用户想在A站登录呢?那就是把上面的代码也加到B站的主题主题functions.php里。当然你可以另外写个小插件用来放这些代码,换主题也不用重新来。

整个过程用的wordpress版本是wordpress4.4.2中文版。

总结一下

现在到这里我们简单实现了A、B两个站点的用户共享。不过从用户体验上来说还缺一点,那就是我如果登录A站了,那么我现在在同一个浏览器打开B站最好是不要再登录一次。这个也是可以解决的。

不过大多数wordpress博客站点是关闭了注册的,或者是启用了自动登录等其他方式。因为….因为这些功能哪里用的上啊我们:),不过我想总有人需要嘛是不是~~