上次不是发了一个Typecho站点共享同一用户数据库嘛,然后我就在想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('这里任意自定义一串字符串或密码'));