miércoles, 30 de septiembre de 2020

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, string $password

string $email = '' )

wp_insert_user()

FUNCIONES DE AYUDA

username_exists() / email_exists( string $email ) /

wp_generate_password()

TRAER DATOS DE USUARIO.

Para traer el usuario tengo que saber el id del usuario.

get_userdata( int $user_id )

1- FORMA BÁSICA DE CREAR USUARIO
Voy a crear un archivo en la carpeta "includes" llamado "usuario.php" y dentro voy a crera una clase:
<?php

class User{
    public function samanta_user(){
        $user_login = 'samanta';
        $user_pass  = wp_generate_password18false ); //False: No caracteres especiales
        $user_email = 'samanta';
        //Validamos que no existe ese usuario
        $user_id = username_exists$user_login );
        if( !$user_id && email_exists($user_email) === false){
            //Crear usuario y RETORNA ID
            $user_id = wp_create_user(
                $user_login,
                $user_pass,
                $user_email
            );
            //Enviar email al usuario
            //Validar con "is_wp_error"
            if(!is_wp_error($user_id)){
                wp_email$user_email'Bienvenido!'"Su contraseña es $user_pass" );
            }
        }
    }
    
}

Lo llamo en Master con el hook "init":
//Crear Usuario
        $this->cargador->add_action('init'$this->user'samanta_user');


2-FORMA COMPLEJA DE CREAR USUARIO (ARRAY | OBJETO)

Vamos a crear un usuario pasandole un array:
public function maria_user_array(){
        $userdata = [
            'user_login' => 'maria',
            'user_pass'  => wp_generate_password18false ),
            'user_email' => 'maria@maria.com',
            'first_name' => 'María',
            'last_name'  => 'Prosdócimo',
            'user_url'   => 'maria.com',
            'description'=> 'Soy una persona exitosa y muy feliz!',
            'role'       => 'editor'
        ];
        //Validamos que no exista ese usuario
        $user_id = username_exists$userdata['user_login'] );
        if( !$user_id && email_exists($userdata['user_email']) === false ){
            $user_id = wp_insert_user$userdata );
            //Enviar email
            wp_email$userdata['user_email'], 'Bienvenido'
            "Su contraseña es {$userdata['user_pass']}" );
        }
    }

Y en Master:
$this->cargador->add_action('init'$this->user'maria_user_array');

3- CREAR USUARIO CREANDO UNA INSTANCIA DE WP_USER
public function juan_user_wpuser(){
        $userdata = new WP_User;
        $userdata->user_login = 'Juan';
        $userdata->user_pass  = wp_generate_password18false );
        $userdata->user_email = 'marias123@marias.com';
        $userdata->first_name = 'María';
        $userdata->last_name  = 'Prosdócimo';
        $userdata->user_url   = 'maria.com';
        $userdata->description'Soy una persona exitosa y muy feliz!';
        $userdata->role       = 'editor';
        
        //Validamos que no exista ese usuario
        $user_id = username_exists$userdata->user_login );
        if( !$user_id && email_exists($userdata->user_email) === false ){
            $user_id = wp_insert_user$userdata );
            //Enviar email
            //wp_email( $userdata->user_email, 'Bienvenido', "Su contraseña es {$userdata->user_pass}" );
        }
    }

En master:
$this->cargador->add_action('init'$this->user'juan_user_wpuser');

OBTENIENDO INFORMACION DE UN USUARIO
1- 

get_userdata( int $user_id )

$userdata = get_userdata(2);
var_dump($userdata);

2- 

get_user_by( string $fieldint|string $value )

$userdata = get_user_by('ID'4);
echo $userdata->first_name;
//O: 
$userdata = get_user_by('email''maria@maria.com');
echo $userdata->first_name;

3-

new WP_User( int $id )

new WP_User( string $user_login )

$userdata = new WP_User'Juan' );
echo '<br>' . $userdata->user_email;

4- INSTANCIA ESTÁTICA

WP_User::get_data_by( string $fieldstring|int $value )

//4- (Pasa solo algunos datos!)
$userdata = WP_User::get_data_by('email''maria@maria.com');
echo $userdata->user_email;



OBTENIENDO INFORMACION DEL USUARIO ACTUAL

El metodo NO RECIBE NINGUN PARAMETRO:

//5- Current User
$userdata = wp_get_current_user();
echo 'The current user is: ' . $userdata->user_login;


ACTUALIZAR USUARIOS

wp_update_user( array|object|WP_User $userdata )

//Actualizar Usuario
    public function update_user(){
        $userdata = [
            'ID' => 3,
            'first_name' => 'Samy',
            'last_name'  => 'Prosdocimo Varela'
        ];

        $user_id = wp_update_user($userdata);
        //Vlidar no hay error
        if( !is_wp_error($user_id) ){
            echo "El usuario ha sido actualizado correctamente!";
        }else{
            var_dump($user_id);
        }
    }

En Master:
//Actualizar usuario
        $this->cargador->add_action('init'$this->user'update_user');

ELIMINAR USUARIOS
//Eliminar Usuario
    public function delete_user(){
        require_once ABSPATH . 'wp-admin/includes/user.php';
        wp_delete_user(6);
    }


Y en Master:
//Eliminar usuario
        $this->cargador->add_action('init'$this->user'delete_user');



METADATOS DE USUARIO

Las funciones cambian un poco y se agregan en la TABLA "USERMETA".

FUNCIONES:

add_user_meta() | get_user_meta() | update_user_meta()

delete_user_meta()

GANCHOS PARA LOS METACAMPOS DE USUARIO:

GANCHOS PARA LOS METACAMPOS DE USUARIO
user_new_form           -> Página de agregar usuario 
user_register           -> Para guardar desde la página de agregar usuario 

show_user_profile       -> Página del perfil del usuario activo 
personal_options_update -> Guardar desde el eprfil de usuario activo 

edit_user_profile       -> Página de edición de un usuario 
edit_user_profile_update-> Guardar desde la página de edición de un usuario

Vamos a hacer un campo de metadatos, para redes sociales.
Vamos a crear en "includes" un archivo llamado "meta-social-user.php".
<?php

class MP_Social_User//'$social' es un array
    public function add_user_meta_fields($user){
        $social = get_user_meta$user->ID'mp_social'true ); //'mp_social' es el name del input
                                                //Un array porque tiene varios fields
        ifisset($social) && is_array($social) ){
            extract($social, EXTR_OVERWRITE); //Vuelve nombres asociativos en variables
        }else{
            $facebook  = '';
            $twitter   = '';
            $instagram = '';
        }

        $output = "
        <h3>Redes Sociales</h3>
        <table class='form-table'>
            <tr class='form-required user-social-wrap'>
                <th scope='row'><label for='facebook'>Facebook</label></th>
                <td>
                    <input class='regular-text' type='text' name='mp_social[facebook]' id='facebook' size='40' value='$facebook'>
                    <p class='description'>Agrega la url de Facebook</p>
                </td>
            </tr>
            <tr class='form-required user-social-wrap'>
                <th scope='row'><label for='twitter'>Twitter</label></th>
                <td>
                    <input class='regular-text' type='text' name='mp_social[twitter]' id='twitter' size='40' value='$twitter'>
                    <p class='description'>Agrega la url de Twitter</p>
                </td>
            </tr>
            <tr class='form-required user-social-wrap'>
                <th scope='row'><label for='instagram'>Instagram</label></th>
                <td>
                    <input class='regular-text' type='text' name='mp_social[instagram]' id='instagram' size='40' value='$instagram'>
                    <p class='description'>Agrega la url de Instagram</p>
                </td>
            </tr>
        </table>
        ";
        echo $output;
    }
} 

En Master:
$this->cargador->add_action('user_new_form'$this->meta_social_user
'add_user_meta_fields');

AHORA!, Si me voy a "editar usuario" o al "usuario actual" voy a ver que esos campos no aparecen.
NOS FALTAN 2 GANCHOS DE ACCION POR AGREGAR

El gancho para la pagina de edicion del usuario y el gancho o hook para la pagina del usuario actual, de modo que Master quedaria asi:
//Agregar meta social media en usuario
        $this->cargador->add_action('user_new_form'$this->meta_social_user'add_user_meta_fields');
        $this->cargador->add_action('show_user_profile'$this->meta_social_user'add_user_meta_fields');
        $this->cargador->add_action('edit_user_profile'$this->meta_social_user'add_user_meta_fields');

-GUARDAR LA INFORMACION
Vamos  a hacer un método para guardar esa informacion:
Y siempre estos metodos de guardado nos van a pedir el id.

public function save_user_meta_fields( $user_id ){
        if( !current_user_can('edit_user') ){
            return;
        }
        //Valido si existe el POST
        ifisset$_POST['mp_social'] ) ){
            //Antes de guardar: Desinfectar
            $_POST['mp_social']['facebook'] = sanitize_term_field$_POST['mp_social']['facebook'] );
            $_POST['mp_social']['twitter'] = sanitize_term_field$_POST['mp_social']['twitter'] );
            $_POST['mp_social']['instagram'] = sanitize_term_field$_POST['mp_social']['instagram'] );
            //Funcion para guardar
            update_user_meta$user_id'mp_social'$_POST['mp_social'] );
        }
    }

Y llamamos en "Master" a estos dos ganchos que nos faltan:

//Guardar meta social media en usuario
        $this->cargador->add_action('user_register'$this->meta_social_user'save_user_meta_fields');
        $this->cargador->add_action('personal_options_update'$this->meta_social_user'save_user_meta_fields');
        $this->cargador->add_action('edit_user_profile_update'$this->meta_social_user'save_user_meta_fields');

Se tendrian que validar las urls con expresiones regulares!.


ROLES

wp_role() --> Funcion que retorna un objeto de WP_Role

WP_Roles::add_role

-AGREGAR UN ROL
Voy a crear un archivo nuevo llamado "role.php" y lo voy a meter dentro de la carpeta "includes".

class MP_Role{
    //Agregar nuevo rol
    public function add_role(){
        $wp_roles = new WP_Roles;
        $capacidades = [
            'edit_posts'           => true,
            'edit_published_posts' => true,
            'publish_Post'         => true,
            'read'                 => true,
            'upload_files'         => true,
            'mailing_masivos'      => true
        ];
        //'mailing_masivos' es creado por nosotros
        $wp_roles->add_role(
            'rolstar'//Nombre
            'Rolstar'//Nombre público
            $capacidades
        );
        
        if(current_user_can('mailing_masivos')){
            //Mostrar toda la página de administracion
        }
    }
}

En Master:
$this->cargador->add_action('init'$this->role'add_role');


ELIMINAR
$wp_roles->remove_role('rolstar');

OBTENER INFORMACION DE ROL:
$rolstar = $wp_roles->get_role'rolstar' );


MANIPULANDO EL ROL DE UN USUARIO

Para ver los roles que tiene un usuario:
$juan = new WP_User5 );
var_dump($juan->roles);

Existen 2 formas de agregar un rol a un usuario:

WP_User::add_role() | WP_User::set_role()

$juan->add_role('contributor');

MOSTRAR CAPACIDADDES DE ROL:
 var_dump$juan->allcaps );
ELIMINAR ROL:
$juan->remove_role'contributor' );


MANIPULANDO LAS CAPACIDADES DE UN ROL

Quiero mostrar todas las capacidades de un rol:
$wp_roles = new WP_Roles;
        $rolstar = $wp_roles->get_role'rolstar' );
        var_dump$rolstar->capabilities );

ELIMINAR CAPACIDAD DE UN ROL:
 $rolstar->remove_cap('rolstar''mailing_masivos');

AGREGAR CAPACIDAD A UN ROL:
//AGREGAR
        $rolstar->add_cap('rolstar''mailing_masivos');













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...