当前位置:首页技术记录多个wordpress共享同一用户数据库

多个wordpress共享同一用户数据库

思路
1. 两个 wordpress 站共享用户数据,其他(文章、主题、设置等)数据不共享。

2. 共享 cookie,即登录 A 站后切换为 B 站后仍为登录状态。

教程
前提:A、B 两站为同顶级域名(a.abc.com 与 b.abc.com)或同根目录(abc.com/a 与 abc.com/b)

A 为主站,B 共享 A 的用户数据,新建 B,安装时数据库选择和 A 同一数据库下,A 的数据库表头为 wp_,B 的改为和 A 的不一样,如:wp2_,安装 B 站时管理员任意填写,反正用不到(B 站的管理员账户从 A 站)。

打开 B 站的 wp-config.php 文件,添加:

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

这时候,用 A 的用户数据去登录 B,可以登录但无后台权限。

然后在 A 的 functions.php 添加:

add_action( 'user_register', 'dup_capabilities' );
add_action('profile_update', 'dup_capabilities');
Function dup_capabilities( $user_id ){
//在这里设置数据表前缀,所有站的数据库表前缀全部写上即可。
$prefixs = array('wp_','wp2_');
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 站,后台用户编辑功能里把每个用户重新编辑一下,不修改任何信息即可。编辑过后,就可以用 A 站的账户登录 B 站了。

所以如果要做类似数据共享的站,最好是在一开始主站用户数量很少的时候就开始操作,不然一个个用户编辑下去也很麻烦。

A 作为主站,操作用户数据或注册新用户就在 A 站上操作,然后同步给 B。

<span style="color: #ff0000;">(以下没测试,请自行测试:</span>

<span style="color: #ff0000;">如果在B站上注册新用户是否能同步给A,可以在B的functions.php里也添加以上代码)</span>

这时候 A 站 B 站不同 cookie,无法免登录自由切换,接下来实现同步 cookie。

打开 A 站的 wp-config.php 文件,复制身份认证密钥,共 8 行。

把 B 站的身份认证密钥替换为 A 的,保证 A、B 一模一样。

在 A、B 两站的 wp-config.php 文件里同时添加:

define('COOKIEPATH ','/');
define('COOKIE_DOMAIN', '这里填写A、B两站的顶级域名');
define('SECRET_SALT', '这里任意自定义一串字符串或密码');
define('ADMIN_COOKIE_PATH ','/');
define('SITECOOKIEPATH ','/');
define('COOKIEHASH', md5('这里任意自定义一串字符串或密码'));
个人中心
搜索