I have created a Woocommerce Store (database prefix wp_) and a Wordpress Blog (database prefix wp_new_) that share the same users (sharing the same wp_users and wp_user_meta tables).
I want to sync not just users but also user roles (multiple user roles) of all users.
For this I tried the solution offered by 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 );
The above solution works great when only a single user role is assigned to a user. But if a user is assigned multiple user roles then it doesn’t work. I mean, it doesn’t sync all user roles.
After digging through the database I understood that the solution lies in cloning the "meta_value" of "wp_capabilities" to "wp_new_capabilities" (in wp_usermeta)
Is there a way to copy entire ‘meta_value’ for a ‘user_id’ from “wp_capabilities” to “wp_new_capabilities”?
If we can copy the entire meta_value from “wp_capabilities” to “wp_new_capabilities” then all the user roles assigned to a user can be synced.
So what changes need to be done to the above mentioned code to achieve this?
Thanks!