黄聪(多个wordpress网站(不同域名)共享用户数据的方法)
WordPress可以自定义用户数据表,这样多个wordpress网站就可以共享用户数据了,有时候这是非常方便的,这些Wordpress站点应该安装在同一个数据库下,数据表前缀各不相同。由于Wordpress的用户数据表(wp_users和wp_usermeta)相对独立(点击这里查看Wordpress数据表关系),我们不用担心共享用户数据后会打乱其它的应用。
共享用户数据
更改用户表的方法是编辑站点的wp_config.php,加入如下代码,假设需要更改的站点前缀是wpen_,需要共享的用户表前缀是wp_
1 2 | define(
'CUSTOM_USER_TABLE'
,
'wp_users'
);
define(
'CUSTOM_USER_META_TABLE'
,
'wp_usermeta'
);
|
这样更改存在一定问题,wp_usermeta表中存储了用户权限,这个权限的值是以wp前缀开头的,以管理员为例,管理员用户id为1,角色是administrator,则表中就有这样一条记录
user_id->1, meta_key->wp_capabilities, meta_value->a:1:{s:13:"administrator"; s:1:"1"; }
如果该用户去登陆共享数据并且以wpen_为前缀的网站(http://youdomain.com/wp-admin),就会被提示
You do not have sufficient permissions to access this page. (你没有足够的权限访问该页面)
解决的方法是向数据库插入包含wpen_前缀的数据,即
user_id->1, meta_key->wpen_capabilities, meta_value->a:1:{s:13:"administrator"; s:1:"1"; }
SQL语句为
1 | INSERT INTO `dbname`.`wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL,
'1'
,
'wpen_capabilities'
,
'a:1:{s:13:"administrator";
s:1:"1";
}'
);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //设置主站的前缀,其它网站都共享该网站的用户数据表 $main_prefix
=
'wp_'
;
//设置子站的前缀,例如有两个子站,前缀分别为wpen_和wpcn_ $addi_prefixs
=
array
(
'wpen_'
,
'wpcn_'
);
//添加功能到用户注册的钩子里 add_action(
'user_register'
,
'dup_capabilities'
);
function
dup_capabilities(
$user_id
) {
global
$main_prefix
,
$addi_prefixs
;
//获取该用户权限的值,因为不同角色的值是不同的
if
(
$cap_val
= get_user_meta(
$user_id
,
$main_prefix
.
'capabilities'
, true ) ) {
if
(
count
(
$addi_prefixs
) > 0 ) {
foreach
(
$addi_prefixs
as
$prefix
) {
add_user_meta(
$user_id
,
$prefix
.
'capabilities'
,
$cap_val
, true );
}
}
} } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | add_action(
'user_register'
,
'dup_capabilities'
);
add_action(
'profile_update'
,
'dup_capabilities'
);
function
dup_capabilities(
$user_id
){
//在这里设置数据表前缀,不分主站子站,全部写上即可。
$prefixs
=
array
(
'wp11_'
,
'wp12_'
,
'wp13_'
);
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
);
}
} } |
【黄聪(多个wordpress网站(不同域名)共享用户数据的方法)】如果注册的用户权限很低,例如是订阅者之类的角色,就没必要这样做了,管理员可以到每个网站单独创建一个,各自管理各自的,也是一种解决方法。
推荐阅读
- Android|Android install 多个设备时指定设备
- K8S|K8S 生态周报| Istio 即将发布重大安全更新,多个版本受影响
- WordPress安装后必须要做的10件事
- 如何将多个小分子文件合并为单个
- 参与设计20多个区块链经济系统,我总结出4个原则和7个陷阱
- PHP|PHP Everywhere 三个 RCE 漏洞威胁大量 WordPress 网站
- java多线程-锁
- 后台|NATAPP内网穿透通过nginx实现一个端口访问多个不同端口服务
- tomcat|tomcat配置多个项目的server.xml的配置
- js.12