主站A
域名:a.test.com
数据库名称:test
数据库用户:mytest
数据库用户密码:test123
数据表前缀:a_
从站B
域名:b.test.com
数据库名称:test
数据库用户:mytest
数据库用户密码:test123
数据表前缀:b_
WordPress 为网站系统提供了相同的数据表结构,为快速实现多个 WordPress 网站之间共享用户数据提供了可能。WordPress 如何实现如网易通行证等大站一样的共享用户登录呢?只需要将需要共享的数据库共用即可,我们这里只需要共享 _user 与 _usermeta 表,下面是完整实现过程。
首先,准备两个域名及 web 环境,我的测试环境是宝塔。
主站A
域名:a.test.com
数据库名称:test
数据库用户:mytest
数据库用户密码:test123
数据表前缀:a_
从站B
域名:b.test.com
数据库名称:test
数据库用户:mytest
数据库用户密码:test123
数据表前缀:b_
先安装 A 站,使用上述 A 站配置信息,安装完毕后,再安装 B 站,B 站也使用上述信息。注意:为了实现数据共享,我们必须将两个站的数据表都放在同一个数据库中,上面我用的 test 数据库。
为实现共用用户数据,我们必须让两个站使用的数据表都为 a_user 与 a_usermeta。或者都使用 b_user 与 b_usermeta,我这里使用的 A 作为主站,所以我需要把 B 站使用的 b_user 与 b_usermeta 数据表改为使用 a_user 与 a_usermeta 数据表。
打开 B 站 wordpress 根目录下的 wp_config.php 配置文件,在其中加入如下配置:
define('CUSTOM_USER_TABLE', 'a_users');
define('CUSTOM_USER_META_TABLE', 'a_usermeta');
这两句配置重新声明了 _user 与 _usermeta 数据表的名称,这里将其改为需要共享数据的表名称,我是用的是 A 站的用户数据。
到此,你的 A、B 两站用户数据共享已经完成,都可以使用 A 站点的用户数据注册登录,但 wordpress 在 _usermeta 表中有对用户权限的记录,到这一步,你的 B 站虽然可以使用 A 站的用户数据登录,但不能访问后台,访问会提示用户权限不够。
当你完成上面的步骤时,你的 a_usermeta 数据表中,并没有记录用户对 B 站点的访问权限,为了使 A 站点的管理员用户能拥有 B 站点的管理权限,我们需要在 a_usermeta 数据表中插入如下权限记录:
INSERT INTO `test`.`a_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1', 'b_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');
在这里解释下,在 _usermeta 数据表中 meta_key 的值为 _capabilities 的记录项就是记录的用户权限,其前缀代表了权限是哪个站点的。由于我的管理员账号是建站时建立的,所以 user_id 为 1。administrator 表示管理员权限,其它权限见 WordPress 移除用户角色添加新角色并赋予角色能力/权限一文。
通过上面的 mysql 命令,插入用户对 B 站点的权限后,我们就可以正常访问 B 站的后台了。注意:记得清理 cookies!
如果不会 MySQL,你也可以使用 phpmyadmin 使用鼠标点击 a_usermeta 数据表中 meta_key 值为 a_capabilities 记录项前面的复制链接,phpmyadmin 会自动跳转到插入功能并填入相应值,你只需要修改前缀再点击执行即可。
这里我们使用的是手动的方式来赋予用户对 B 站点的访问权限,我们不可能手动为每一位用户赋予权限,那么我们可以使用如下代码来实现注册时自动赋予权限。
专业提供WordPress主题安装、深度汉化、加速优化等各类网站建设服务,详询在线客服!