martes, 11 de agosto de 2020

Become a wordpress developer - Part 3 - Roles

Roles y Permisos
Crear Rol y otorgar permiso

Vemos que subscriptor no puede hacer nada Administrar info de perfil
Colaborador, solo editar sus propias publicaciones pero no publicarlas
autor crear y publicar sus publicaciones
ecitor crear y publicar las de el y las de los demas
admin todo

Ahora, creamos un colaborador, por ejmeplo, pero solo quiero que pueda publicar eventos, por ejemplo, solo eventos.
Plugin: members membership & user role editor plugin
Add new Rol
Lo llamamos por ejemplo planificador de eventos
Cuando se trata de dar permisos, wp va a tomar a los post types como post, entonces nos va a atomar todos los tipos de publicaciones.
Vamos a ir a donde tenemos registrado nuestro post type, en eventos en este caso y le vamos a decir que cuando se trate de dar permisos no lo tome como una entrada de post.

'capability_type' => 'event',
'map_meta_cap' => true,

Ahosi si volvemos a wp-admin, le podemos asignar a ese nuevo rol todo tipo de permisos para eventos porque nos aparece la pestañita eventos.
Ahora tenemos que darle a nuestro nuevo usuario esos permisos.
Vamos a su perfil de ususario.
Y le otorgamos el rol de planificador de eventos.
Bien, ahora, si me voy a wp-admin como administrador voy a ver que no esta la pestaña de evntos, tengo que ir a "roles", y en administrador marcar tambien todo relacionado con eventos.
Refresco y ya.

Registro de usuarios

Vamos a Settings, en wp-admin
Ajustes generales.
Ahora, "membership", marcamos "anyone can register"
"new user default role" -> "subcriber", ya que no puede hacer nada basicamente.

Ahora, tengo un boton de Login y otro de Sign up, le voy a poner en el header a Sign up la siguiente direccion para que redireccione al usuario al login de wp:

<a href="<?php echo esc_url(site_url('/wp-signup.php')); ?>"
class="btn btn--small btn--dark-orange float-left">Sign Up</a>

Ojo, para el registro mejor usar:

wp_registration_url()

<a href="<?php echo wp_registration_url(); ?>"
class="btn btn--small btn--dark-orange float-left">Sign Up</a>



Ahora, hay que hacer una condicion para que si se logueo entonces no se vean los dos botones de login y sign-up y se vea su foto de avatar y un boton de cerrar sesion.
Vamos al header nuevamente:
Vamos a usar la funcion:

is_user_logged_in()


Determines whether the current visitor is a logged in user.

Para ver si esta logueado o no:

Y para cerrar sesion wp tiene una funcione special:

wp_logout_url( string $redirect = '' )

Retrieves the logout URL.

Asi que nuestro codigo querdaria asi:
<?php
 if(is_user_logged_in()){
?>
<a href="<?php echo wp_logout_url(); ?>" 
class="btn btn--small btn--dark-orange float-left">Log Out</a>
<?php }else?>
<div class="site-header__util">
<a href="#" class="btn btn--small btn--orange float-left push-right">Login</a>
<a href="<?php echo esc_url(site_url('/wp-signup.php')); ?>" 
class="btn btn--small btn--dark-orange float-left">Sign Up</a>
<span class="search-trigger js-search-trigger"><i class="fa fa-search"  
aria-hidden="true"></i></span>
</div>
<?php } ?>

Ahora, seria mejor si al lado del Logout habria una foto del usuario, para eso vamos a usar la funcion:
 

get_avatar( mixed $id_or_email, int $size = 96, string $default = '', string $alt = '', array $args = null )

Retrieve the avatar <img> tag for a user, email address, MD5 hash, comment, or post.

Y dentro, como le tenemos que pasar le id le vamos a pasar la funcion:

get_current_user_id()

Get the current user’s ID

Vamos a decirle:
 <?php
          if(is_user_logged_in()){
          ?>
          <a href="<?php echo wp_logout_url(); ?>" 
            class="btn btn--small btn--dark-orange float-left">
          <span class="site-header__avatar">
            <?php echo get_avatar(get_current_user_id(), 60); ?>
          </span>
          <span class="btn__text">Log Out</span>
          </a>


Redireccionar el Login

Cuando un usuario haga login que me lo mande al front-page.php
Y no al dashboard de wp-admin.
Este códifo lo vamos a hacer en functions.php:
El hook de nuestra funcion va a ser:
admin_init
Y le vamos a decir que solo esa redireccion sea para los usuarios con "rol" de "subscriptor"
Le vamos a decir solo si:
1- Ese usuario actual tiene un solo rol
2- Si el usuario es subcriber:
 Y vamos a usar la funcion 

wp_redirect()

El codigo:

//Redirige al inicio en Login
function redirectSubToFrontend(){
 $ourCurrentUser = wp_get_current_user();
if(count($ourCurrentUser->roles) == 1 AND $ourCurrentUser->roles[0] == 'subscriber'){
 wp_redirect(site_url('/'));
 exit;
}
}
add_action('admin_init''redirectSubToFrontend');

FUNCION NO SE VEA BARRA DE WP ARRIBA

Vamos a hacer una funcion para que no se vea la barra de wp arriba si no eres admin:
La funcion es muy parecida:
//No se vea barra wp arriba
function noSubsAdminBar(){
$ourCurrentUser = wp_get_current_user();
if(count($ourCurrentUser->roles) == 1 AND $ourCurrentUser->roles[0] == 'subscriber'){
        show_admin_barfalse );
    }
}
add_action('wp_loaded''noSubsAdminBar');

LOGIN BUTTON:

Ahora trabajemos en el Login, nos vamos al header en el boton del Login y vamos a usar una funcion:

wp_login_url( string $redirect = '', bool $force_reauth = false )

Retrieves the login URL.
 
<div class="site-header__util">
            <a href="<?php wp_login_url(); ?>" 
            class="btn btn--small btn--orange float-left push-right">Login</a>
            <a href="<?php wp_registration_url(); ?>" 
            class="btn btn--small btn--dark-orange float-left">Sign Up</a>



PERSONALIZAR PANTALLA DE INICIO LOGIN

Vamos a personalizar la pantalla de inicio de wp para que se vea diferente cuando entremos.

Primero que queremos modificar es el Logo de wp, y que cuando hacemos click alli, tenemos el nombre de nuestra empresa o el logo y nos lleve a nuestra pagina de inicio.
Nos vamos a ir a functions.php y vamos a usar un filtro:

1- Redireccionar a nuestra pagina de inicio
//Login Logo redireccionar
function ourHeaderUrl(){
    return esc_url(site_url('/'));
}
add_filter('login_headerurl''ourHeaderUrl');

2- No es una imagen este logo de wp, sino un enlace que vive en (Si inspeccionamos el elemento)
.login h1 a
Y que usa un background imagen en el css.
Tenemos que hacer una funcion que nos cargue el CSS de la pagina de Login primero, porque wp no lo hace por defecto:
//Sacar logo por defecto y cambiar estilos en login
function OurLoginCss(){
    wp_enqueue_style('our_main_style'get_theme_file_uri('/bundled-assets.css'));
}
add_action('login_enqueue_scripts''OurLoginCss');
 
 Estamos trayendo los estilos bundled css que teniamos arriba !,
porque wp no los carga por defecto en el login !

Para cambiar los estilos habria que ir a "Modules" login.css

Ahoa, importante!. a partir de junio 2020 ya no se muestra el nombre de nuestra web sino que dice:
Powered by Wordpress, pero no es lo que queremos!
Asi que nos vamos a functions.php y vamos a usar un filtro para el titulo del login:
//Titulo de la web
function OurTitleLogin(){
    return get_bloginfo('name');
}
add_filter('login_headertitle''OurTitleLogin');
csd

No hay comentarios:

Publicar un comentario

Creando plugin Wordpress - 03

  11- USUARIOS -Para crear un usuario lo mas facil desde el admin- FUNCIONES PARA AGREGAR USUARIO: wp_create_user ( string  $username , stri...