WordPress 为网站系统提供了相同的数据表结构,为快速实现多个 WordPress 网站之间共享用户数据提供了可能。WordPress 如何实现如网易通行证等大站一样的共享用户登录呢?只需i R H & U *要将需要共享的数据库共用即P M - /可,我们这里只需要共享 _user 与 _usermeta 表,下面是完整实现过程。
首先,准备两个域名及 web 环境,我的测试环境是宝塔。
- 主站AA = b B H 3 {
- 域名:a.test.com
- 数据库名称:test
- 数据库用户:mytest
- 数据库用户密码:test123
- 数据表前缀* A & | _:a_
- 从站B
- 域名:j l ? Bb.test.co7 ` =m
- 数据库名称:test
- 数据库用户:mytest
- 数据库用户密码:test123
- 数据表前缀:b_
先安装 A 站,使用上述 A 站配置信息,安装完毕后,再安装 Bn & 7 5 $ 6 d 站,B 站也使用上述信息。注意:为了实现数据共享,我们必须将两个站的数据表都放在同一个数据库中,上面我用的 test 数据库。
修改配置
为实现6 f j 1 y d共用用户数据,我们必须让两个站使用的数据表都为 a_user 与 a_usermeta。或者都使用 b_user 与 b_usermeta,我这里使用的 A 作为主站,所以我需要把 B 站使用的2 0 n a n T 1 # d b_user 与 b_usermeta 数据表改为使用 a_user 与 a- P \ 9 5_usermeta 数据表。
打开 B 站 wordpress 根O y l b f目录下的 wp_config.php 配置文件,在其中加入如下配置:
- define('CUSTOM_USER_TL # j 1 $ ) *ABLE', 'a_users');
- define('CUSTOM_USER_META_TABLE', 'a_usermeta');
这两句配置重新声明了 _user 与 _usermeta 数据表的名称,这里将其改为需要共享数据的表名称,我是用的是 A 站的用户数据。
到此,你的 A、B 两站用户数据共享已经完成,都可以使用 A 站点的用户数据注册登录,但 wordpreZ t k _ss 在 _usermetT l %a 表中有对用户权g M |限的记录,到这一步,你的 B 站虽然可以使用 A 站的用户数据登录,但不能访问后台,访问会提示用户权限不够。
添加权限
当你完成上面的步骤时,你的 a_userb = L @ O +meta 数据表中,并没有记录用Y Y ? l h U } V T户对 B 站点| r = ] u m .的访问权限,为了使 A 站点的管理员用户能拥有 B 站点的管理权限k \ r,我们需要在 a_usermeta 数据表中插入如下权限记录:
- INSERT INt ( & Z q K WTO `test`.`a_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1', 'b_capabR k @ R y n Milities', 'a:1:{s:13:"administrator";s:1:"1";}');
在这里解释下,在 _usermeta 数据表中 meta_key 的值为 _capabilities 的记录项就是记录的用户权限,其前缀代表了权限是哪个站点的。由于我的管理员@ ? * * # D账号是建站时建立3 B $的,所以 user_id 为 1。administrator 表示管理员权限,其它权限见 WordPress 移除用户角色添加新角色并赋予角色能力/权限一文。
通过上面的 mysql 命T ? g Y ,令,插入用户对 B 站点的权限后,我们就y H ! - } v可以正常访问T M u [ s O 9 \ H B 站的后台了。注意:记得清理 cookies!
如# M ( ! N h果不会 MySQL,你也可以使用 phpmyadmin 使用鼠标点击 a_usermeta 数据表中 meta_key 值为 a_capabilities 记录项前面的复制链接,phpmyadmin 会自动跳转到插入功能并填入相应值,你只需要修改前缀再点击执行即可。
这里我们使用的是手动的方式来赋予用户对 B 站点的访问权限,我们不可能手动为每一位用户赋予权限,那么我们可以使用如下代码来实现注册时自动赋予权限。