图龙网

多个wordpress共用一个数据库 实现用户共享

原创作者: 图龙网 发布时间: 2021-03-31 3.94K 人阅读

多个wordpress共用一个数据库 实现用户共享 事情是这样的,如果我有两个wordpress站点A站和B站,并且他们在同一域名下,现在我想以前A站的用户可以登录B站,在A站注册的用户可以在B站登录,B站注册的用户可以在A登录。并且同一个用户在A站和B站拥有同样的权限。

比如主站A站 A.com,现在要建立英文B站的A.com/en

共用数据库

要实现这样的目的我们必须把两个站点数据放在同一个数据库里,也就是A站和B站的配置文件wp-config.php中数据库名、数据库用户、数据库密码是相同的。

然后假设你之前先有A站并且有用户,数据库前缀是wp_ , 现在设置B站的数据库前缀为wpen_ ,这样他们就区分开了。要B站能共享到A站的用户数据,你需要在B站wp-config.php文件中添加:

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

意思是B站共用A站wp_users和wp_usermeta这两个数据表,用户以及权限等信息在这里面。

安装B站

B站配置文件设置好后,现在打开A.com/en安装B站,你会发现提示用户名已存在,可以不用管接着安装就是,安装好后生成的用户信息也可以不用管。现在你用A站的管理员身份登录B站是可以登录的,但是你进入后台会提示你没有权限的。

现在用户只有身份没有权限。接着我们登陆数据库,这里我们用phpmyadmin来管理数据库的,打开wp_usermeta这个表。你会发现user_id 为1 (管理员),meta_key为wp_capabilities ,权限meta_value 为a:1:{s:13:”administrator”;b:1;} 这样一条数据 。这表示管理员在A站的权限信息。

现在我们要这个管理员在B站也有同样的权限,那就也要有user_id 为1,meta_key为wpen_capabilities ,权限meta_value 为a:1:{s:13:”administrator”;b:1;} 这样一条数据。

明白了吧,现在手动对应的添加一条数据,umate_id 加1,meta_key 为 wpen_capabilities 其他不变。然后保存。现在你登录B站后台就有权限了。

你查看B站用户发现A站的用户都在这里,但是他们在这里都没有任何身份除了登录什么也做不成,这和上面修改管理员权限是一样的道理。我们直接在B站后台批量修改用户角色权限,不用去数据库一个一个修改。

其实我不会mysql不然可直接输入命令批量改:)

新注册用户

到现在为止我们让以前A站用户可以在B登录并有同样权限了,那么以后新注册用户呢?再去B站后台改?也可以不过太麻烦也不及时。搜索到答案在A站主题functions.php里添加:

//用户共享
add_action( 'user_register', 'dup_capabilities' );
add_action('profile_update', 'dup_capabilities');
function dup_capabilities( $user_id ){
//在这里设置数据表前缀,不分主站子站,全部写上即可。
$prefixs = array('wp_','wpen_');
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站新注册用户可在B站以同样的权限登录,但是有人想了,如果在B站新注册的用户想在A站登录呢?那就是把上面的代码也加到B站的主题主题functions.php里。当然你可以另外写个小插件用来放这些代码,换主题也不用重新来。

整个过程用的wordpress版本是wordpress4.4.2中文版。

教程方法二:

在初始配置WordPress之前,将wp-config.php中的$table_prefix值(默认为wp_)修改为所需要的表前缀(本文中假设为blog_),然后一路安装即可。


修改前:

/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each a unique
* prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = ‘wp_’;

修改后:

/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each a unique
* prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = ‘blog_’;

已安装WordPress的用户

若WordPress已安装,则执行以下步骤:

1. 将wp-config.php中的$table_prefix值wp_修改为所需要的表前缀(blog_)。

2. 将MySQL数据库中的对应表前缀均修改为新的表前缀。

3. 执行以下数据库更新(请根据对于表前缀进行相应修改):

UPDATE blog_usermeta SET meta_key =’blog_capabilities’ WHERE meta_key =’wp_capabilities’;
UPDATE blog_usermeta SET meta_key =’blog_user_level’ WHERE meta_key =’wp_user_level’;
UPDATE blog_options SET option_name=’blog_user_roles’ WHERE option_name=’wp_user_roles’;

4. 由于WordPress插件繁多,且实现都不同,请自行参考插件代码进行对应修改。

总结一下

现在到这里我们简单实现了A、B两个站点的用户共享。不过从用户体验上来说还缺一点,那就是我如果登录A站了,那么我现在在同一个浏览器打开B站最好是不要再登录一次。这个也是可以解决的。

不过大多数wordpress博客站点是关闭了注册的,或者是启用了自动登录等其他方式。因为….因为这些功能哪里用的上啊我们:),不过我想总有人需要嘛是不是~~

图龙网关注各大互联网媒体前沿设计风格,紧跟行业趋势,精选大气优质好资源
图龙网 » 多个wordpress共用一个数据库 实现用户共享

发表回复

提供中小企业建站高端正版精品系统

正品模板 购买协议