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_password( 18, false ); //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_password( 18, false ),
'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_password( 18, false );
$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 $field, int|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 $field, string|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
if( isset($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
if( isset( $_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_User( 5 );
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