两个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站的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。

(以下没测试,请自行测试:

如果在B站上注册新用户是否能同步给A,可以在B的functions.php里也添加以上代码)

 

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

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

两个wordpress共享用户数据库(仅共享用户数据,其他数据不共享)

把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('这里任意自定义一串字符串或密码'));

完成。

发表评论