我创建了一个共享相同用户(共享相同的 wp_users 和 wp_user_meta 表)的 Woocommerce 商店(数据库前缀 wp_)和一个 Wordpress 博客(数据库前缀 wp_new_)。
我不仅要同步用户,还要同步所有用户的用户角色(多个用户角色)。
为此,我尝试了 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”的整个“meta_value”从“wp_capabilities”复制到“wp_new_capabilities”?
如果我们可以将整个元值从“wp_capabilities”复制到“wp_new_capabilities”,那么可以同步分配给用户的所有用户角色。
那么需要对上述代码做哪些更改才能实现这一点?
谢谢!
最佳答案
我在同步用户角色(每个用户多个用户角色)方面遇到了问题。 经过两个多晚上的挑灯夜战,我找到了愚蠢的神奇解决方案:)
我只是在“add_action( 'set_user_role', 'ksu_save_role', 10, 2 );”中将 'set_user_role' 更改为 'add_user_role'
小魔法调整后的结束代码
function ksu_save_role( $user_id, $role ) {
// Site 1
// Change value if needed
$prefix_1 = 'first_';
// Site 2 prefix
// Change value if needed
$prefix_2 = 'second_';
$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( 'add_user_role', 'ksu_save_role', 10, 2 ); // THE MAGIC MODIFICATION
代码学分:https://kinsta.com/blog/share-logins-wordpress/
将它添加到 functions.php,你就可以开始了。
它与“Woocommerce Subscriptions”和“YITH Automatic Role Changer for WooCommerce Premium”等角色转换器插件兼容
您可以根据需要设置和更改任意数量的角色。
关于php - 在共享相同 wp_users 和 wp_usermeta 表的两个 Wordpress 安装之间同步所有用户角色。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49279891/