Sincronice todos los roles de usuario entre dos instalaciones de WordPress compartiendo las mismas tablas wp_users y wp_usermeta.

He creado una Tienda de Woocommerce (prefijo de base de datos wp_) y un Blog de WordPress (prefijo de base de datos wp_new_) que comparten los mismos usuarios (compartiendo las mismas tablas wp_users y wp_user_meta).

Quiero sincronizar no solo a los usuarios, sino también a los roles de usuario (múltiples roles de usuario) de todos los usuarios.

Para esto probé la solución ofrecida por 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 ); 

La solución anterior funciona a la perfección cuando solo se asigna un rol de usuario único a un usuario. Pero si a un usuario se le asignan múltiples roles de usuario, entonces no funciona. Quiero decir, no sincroniza todos los roles de usuario.

Después de buscar en la base de datos, entendí que la solución está en clonar el “meta_valor” de “wp_capabilities” a “wp_new_capabilities” (en wp_usermeta)

¿Hay alguna forma de copiar el ‘meta_valor’ completo para un ‘id_usuario’ de “wp_capabilities” a “wp_new_capabilities”?

Si podemos copiar todo el meta_valor de “wp_capabilities” a “wp_new_capabilities”, entonces todos los roles de usuario asignados a un usuario se pueden sincronizar.

Entonces, ¿qué cambios deben hacerse al código mencionado anteriormente para lograr esto?

¡Gracias!

Tuve problemas con la sincronización de roles de usuario (múltiples roles de usuario por usuario). Después de quemar el aceite de medianoche durante más de dos noches, encontré la solución mágica tonta 🙂

Simplemente cambié ‘set_user_role’ a ‘add_user_role’ en “add_action (‘set_user_role’, ‘ksu_save_role’, 10, 2);”

El código final después de la pequeña modificación mágica.

 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 

Créditos del código: https://kinsta.com/blog/share-logins-wordpress/

Agregue esto a functions.php y estará listo para comenzar.

Es compatible con complementos de cambio de rol como “Woocommerce Subscriptions” y “YITH Automatic Role Changer for WooCommerce Premium”

Puedes configurar y cambiar tantos roles como quieras.