【发布时间】:2018-08-23 02:37:32
【问题描述】:
我创建了一个 Woocommerce 商店(数据库前缀 wp_)和一个 Wordpress 博客(数据库前缀 wp_new_),它们共享相同的用户(共享相同的 wp_users 和 wp_user_meta 表)。
我不仅要同步用户,还要同步所有用户的用户角色(多个用户角色)。
为此我尝试了https://kinsta.com/blog/share-logins-wordpress/提供的解决方案
function ksu_save_role( $user_id, $role ) {
$prefix_1 = 'wp_';
$prefix_2 = 'wp_new_';
$caps = get_user_meta( $user_id, $prefix_1 . 'capabilities', true );
$level = get_user_meta( $user_id, $prefix_1 . 'user_level', true );
if ( $caps ){
update_user_meta( $user_id, $prefix_2 . 'capabilities', $caps );
}
if ( $level ){
update_user_meta( $user_id, $prefix_2 . 'user_level', $level );
}
}
add_action( 'set_user_role', 'ksu_save_role', 10, 2 );
当仅向用户分配一个用户角色时,上述解决方案非常有效。但是如果一个用户被分配了多个用户角色,那么它就不起作用了。我的意思是,它不会同步所有用户角色。
在挖掘数据库后,我了解到解决方案在于将“wp_capabilities”的“meta_value”克隆为“wp_new_capabilities”(在 wp_usermeta 中)
有没有办法将“user_id”的整个“元值”从“wp_capabilities”复制到“wp_new_capabilities”?
如果我们可以将整个元值从“wp_capabilities”复制到“wp_new_capabilities”,那么分配给用户的所有用户角色都可以同步。
那么需要对上面提到的代码做哪些修改来实现呢?
谢谢!
【问题讨论】:
标签: php mysql wordpress multisite