php - tag - Wordpress WPMU Consistencia de inicio de sesión en la red de varios sitios
wordpress php get post title by id (1)
Estoy trabajando en una instalación multisitio de WPMU pero me he encontrado con un pequeño problema.
Creo un usuario durante un proceso de registro en mi dominio principal. Con algo como lo siguiente.
$username = ''myname-''.time();
$user_id = wpmu_create_user($username,''anypassword'',''[email protected]'');
add_user_to_blog(1, 5, ''subscriber'');
$user = wp_signon(array(
"user_login" => $username,
"user_password" => ''anypassword'',
"remember" => true
));
Lo que hago es crear el usuario y luego asignarlo solo al dominio primario y registrar al usuario con wp_signon. Sin embargo, al visitar un subsitio de la red en un subdominio que es muy restrictivo en su acceso. Todavía estoy conectado y aún se muestra el menú del tablero en la parte superior.
Usé is_user_blog () para tratar de determinar si el usuario debería poder ver esto y podría dirigirlos a la página de inicio de sesión del subdominio. Pero esto significaría terminar la sesión de inicio de sesión existente en el dominio principal. Idealmente, sería estupendo si pudieras iniciar sesión en el dominio principal y también iniciar sesión en el subdominio, pero ambos se trataron por separado.
¿Alguien se encuentra con este problema antes?
Sí, tuve este problema. Y, si necesita una administración de usuario especial, deberá configurar una nueva instalación autónoma (de un solo sitio) de WordPress.
Esa es la forma en que funciona Multisite. Todos los usuarios se incluyen automáticamente como subscribers
de todos los sitios de la red.
Del artículo No usar WordPress Multisite :
Si necesita que los usuarios estén en sitios diferentes, pero no se da cuenta de que están en una red, ¡no use MultiSite! Ahora, sí, hay formas de evitar esto, sin embargo, es una pesadilla de auditoría para cualquier empresa grande, y un riesgo de seguridad que debe tener en cuenta antes de comenzar.
Este complemento puede ser de ayuda (pero no estoy seguro): Administración de usuarios de sitios múltiples .
De esta respuesta reciente que di en WordPress StackExchange, algunos pequeños hacks pueden ser útiles:
(Hice pequeñas pruebas en mi entorno de desarrollo, pero, por favor, prueba extensamente)
/*
* Redirect users that are not members of the current blog to the home page,
* if they try to access the profile page or dashboard
* (which they could, as they have subscriber privileges)
* http://not-my-blog.example.com/wp-admin/profile.php
*/
add_action( ''admin_init'', ''wpse_57206_admin_init'' );
function wpse_57206_admin_init()
{
if( !is_user_member_of_blog() )
{
wp_redirect( home_url() );
exit();
}
}
/*
* Redirect users that are not members of the current blog to the home page,
* if they try to access the admin
* http://not-my-blog.example.com/wp-admin/
*/
add_action( ''admin_page_access_denied'', ''wpse_57206_access_denied'' );
function wpse_57206_access_denied()
{
wp_redirect( home_url() );
exit();
}
/*
* Redirect users that are not members of the current blog to the home page,
* if they try to login
* http://not-my-blog.example.com/wp-login.php
*/
add_filter( ''login_redirect'', ''wpse_57206_login_redirect'' );
function wpse_57206_login_redirect( $url )
{
global $user;
if ( !is_user_member_of_blog() )
{
$url = home_url();
}
return $url;
}
/*
* Hide the admin bar for users which are not members of the blog
*/
add_filter( ''show_admin_bar'', ''wpse51831_hide_admin_bar'' );
function wpse51831_hide_admin_bar( $bool )
{
if( !is_user_member_of_blog() )
{
$bool = false;
}
return $bool;
}