¿Cuál es la mejor manera de compartir datos de usuarios en múltiples sitios web de Wordpress?

10

En primer lugar, Multisite no es lo que estoy buscando. Tengo 5 sitios web que usan Wordpress, todos en dominios separados para los que me gustaría habilitar cuentas de usuario. Necesito que los datos del usuario se compartan en toda la red y cuando un usuario crea una cuenta, también tendrán acceso instantáneo a todos los demás sitios web. Wordpress no recomienda lo que intento hacer cuando uso Multisite:

Si planea crear sitios que estén fuertemente interconectados, que compartan datos o compartan usuarios, entonces una red multisitio podría no ser la mejor solución. - http://codex.wordpress.org/Before_You_Create_A_Network (1er párrafo, 3ra oración)

He intentado usar el "truco de la tabla de usuarios compartidos" como se menciona aquí http://wordpress.org/support/topic/multiple-sites-same-users-how y aquí http://xentek.net/articles/528/ implementando-the-wordpress-shared-users-table-trick / y varios otros lugares ... el problema es que esta información tiene entre 2 y 7 años y estoy usando Wordpress 3.5.1 y este "truco" no funciona Parece que no funciona.

Intenté insertar este código en wp-config alrededor de la $table_prefixlínea.

define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USER_META_TABLE', 'wp_usermeta');

En pocas palabras, no creo que este truco funcione más, ya que no puedo iniciar sesión en el segundo sitio en el lado del administrador.

¿Alguna sugerencia sobre cuál sería la mejor manera de vincular estos datos?

Ian
fuente
1
No entiendo por CUSTOM_USER_TABLEqué no funcionaría ... Vea si hay algo aquí: wordpress.stackexchange.com/search?q=CUSTOM_USER_TABLE
brasofilo
Cuando uso CUSTOM_USER_TABLE, los usuarios se comparten entre el sitio web, sin embargo, en el segundo sitio web, no puedo iniciar sesión como administrador en absoluto. Buscar horas y encontrar complementos y artículos que tienen entre 2 y 7 años me hace creer que este truco ya no funciona en 3.5.1 ...
Ian
La pregunta es que esto no es un truco , es una característica central . Parece que no se ha informado ningún error , y nada relevante aparece en la lista [wp-hackers] ...
brasofilo
Gracias por tus comentarios. Pude encontrar la respuesta al profundizar en algunas cosas que vi en sus enlaces. He publicado mi solución a continuación. Gracias de nuevo @brasofilo
Ian
Realmente genial, casi cubriste todas las formas sobre cómo compartir los usuarios. pero tengo una situación un poco diferente aquí. Tengo 5 sitios web de WordPress que cada sitio web en particular tiene su propia base de datos. ¿Cómo puedo usar su solución para conectar todas las tablas de usuarios por separado cuando un nuevo usuario se registra en cualquiera de los 5 sitios web y puede iniciar sesión de inmediato en cualquiera de los otros sitios web con un solo registro? Soy consciente de alguna manera de lograr esto en una sola base de datos usando la WPMU, pero realmente no estoy encontrando ninguna manera de hacerlo en instalaciones separadas de WordPress. Agradecería cualquier ayuda. Gracias

Respuestas:

8

Ok, antes que nada, me siento como un idiota, aunque en mi defensa la mayoría de los artículos que hablan sobre esto no mencionan un detalle crucial para que esto funcione. La respuesta es que debe establecer un permiso para al menos un administrador en la base de datos. Esta información se puede encontrar en el Codex aquí: http://codex.wordpress.org/Editing_wp-config.php#Custom_User_and_Usermeta_Tables

Después de configurar el archivo wp-config.php, es imprescindible que realice un cambio en el campo de la tabla maestra usermeta (en mi caso wp_usermeta) wp_capabilities y la columna meta_value. Haga esto a través de phpMyAdmin.

Nota: Haga esto para que al menos un administrador de usuario inicie sesión. Puede ajustar todos los demás roles de usuario / administrador desde el backend una vez que ingrese.

Captura de pantalla de los permisos de los usuarios que cambiarán

Para cada sitio web que se crea, debe tener ese prefijo de sitios nuevos asignado a la función de usuario administrador.

En mi caso, ya que solo tengo esto funcionando en 2 sitios en este momento, se ve así:

a:1:{s:13:"administrator";s:1:"1";}
tbs_capabilities = a:1:{s:13:"administrator";s:1:"1";}

Captura de pantalla del valor de wp_usermeta

La primera línea establece los permisos para el prefijo de tabla predeterminado (en este caso wp_), y la segunda línea establece los permisos para el segundo sitio web (en este caso con el prefijo tbs_).

¡Gracias a brasofilo por el comentario que me indicó que profundizara un poco más para finalmente resolver mi problema!

Espero que esta respuesta pueda ayudar a otros que tenían el mismo problema que yo.

Ian
fuente
Nunca utilicé esta función, pero me alegra saber que existe este pequeño truco para que funcione;) Buen artículo +1
brasofilo
1
¡Gracias, esto definitivamente debería mencionarse en los tutoriales!
Mircea Sandu
2

Al compartir wp_users y wp_meta hay otro problema, otra instalación de WordPress reconoce a los usuarios pero no reconoce las funciones de los usuarios que provienen del otro sitio web . El rol aparece como indefinido.

Entonces, editó su wp-config.php según sea necesario:

define('CUSTOM_USER_TABLE', 'someprefix_users');
define('CUSTOM_USER_META_TABLE', 'someprefix_usermeta');

Creo que la forma más fácil de hacer esto, sin jugar con el db, es usando wp internos. Al iniciar sesión, es posible asignar un rol. Digamos que necesitamos el rol de contribuidor para todos y el rol de administrador para el usuario 'superman'.

function check_user_role($user_login, $user) {
  if ( $user_login == 'superman' ) {
     $user->add_role('administrator');
     } else {
     $user->add_role('contributor');
  }
}

// the action fired on login
add_action('wp_login', 'check_user_role', 10, 2);

Por lo tanto, los usuarios que provienen del sitio web inicial obtienen el rol de "contribuidor" asignado cuando inician sesión.

  • Puede eliminar la verificación de usuario después de iniciar sesión con el usuario administrador.
  • Los usuarios pueden tener más de un rol, las capacidades son importantes.

http://codex.wordpress.org/Class_Reference/WP_User

cenk
fuente
0

Tuve que crear una nueva fila:

meta_key='tbs_capabilities' meta_value='a:1:{s:13:"administrator";b:1;}'

y user_id=1. El método que describiste no funcionó.

James Smith
fuente
1
En la respuesta anterior, "tbs" es el prefijo del segundo sitio web de WordPress que instalé. Entonces, en lugar de que la tabla sea wp_posts, serían tbs_posts. A menos que establezca explícitamente $ table_prefix = 'tbs_'; No funcionará.
Ian