Bienvenido al blog donde exploraremos cómo mejorar la experiencia de registro en WordPress mediante la adición de un selector de roles.
En el artículo anterior vimos como crear los roles de Profesor y Alumno simplemente agregando un snippet de código en el functons.php de nuestro tema, pues bien, en este artículo vamos a ver como agregar un selector de esos 2 roles en el formulario de registro de WordPress.

Este código ofrece a los usuarios la opción de seleccionar su rol, ya sea «Alumno» o «Profesor». Vamos a sumergirnos en el código y entender cómo cada parte contribuye a esta funcionalidad mejorada.
¿Qué hace el Código?
Agregar Campo de Selección de Rol al Formulario de Registro:
function add_role_dropdown_to_registration_form() {
?>
<p>
<label for="user_role"><?php _e('Selecciona tu Rol:'); ?><br />
<select name="user_role" id="user_role">
<option value="alumno"><?php _e('Alumno'); ?></option>
<option value="profesor"><?php _e('Profesor'); ?></option>
</select>
</label>
</p>
<?php
}
add_action('register_form', 'add_role_dropdown_to_registration_form');
Lenguaje del código: JavaScript (javascript)
Esta función agrega un campo de selección de roles al formulario de registro. Los usuarios pueden elegir entre «Alumno» y «Profesor». La función add_action asegura que este campo se muestre en el lugar adecuado.
Validar y Asignar el Rol Seleccionado:
function validate_user_role_registration($errors, $sanitized_user_login, $user_email) {
if (!isset($_POST['user_role']) || empty($_POST['user_role'])) {
$errors->add('user_role_error', __('Por favor, selecciona un rol.'));
} else {
$selected_role = sanitize_text_field($_POST['user_role']);
// Limitar a roles específicos
$allowed_roles = array('alumno', 'profesor');
if (!in_array($selected_role, $allowed_roles)) {
$errors->add('user_role_error', __('Rol no válido.'));
}
}
return $errors;
}
add_filter('registration_errors', 'validate_user_role_registration', 10, 3);
Lenguaje del código: PHP (php)
Esta función valida que se haya seleccionado un rol durante el registro y que sea uno de los roles permitidos («Alumno» o «Profesor»). Limitamos las opciones a través de la matriz $allowed_roles.
Asignar el Rol Seleccionado durante el Registro:
function assign_user_role_on_registration($user_id) {
if (isset($_POST['user_role']) && !empty($_POST['user_role'])) {
$selected_role = sanitize_text_field($_POST['user_role']);
$user = new WP_User($user_id);
$user->set_role($selected_role);
}
}
add_action('user_register', 'assign_user_role_on_registration');
Lenguaje del código: PHP (php)
Esta función asigna el rol seleccionado al usuario recién registrado utilizando la función set_role de WordPress.
El código completo que tienes que copiar y pegar en el functions.php de tu tema o en un plugin como CODE SNIPPETS sería:
// Agregar campo de selección de rol al formulario de registro
function add_role_dropdown_to_registration_form() {
?>
<p>
<label for="user_role"><?php _e('Selecciona tu Rol:'); ?><br />
<select name="user_role" id="user_role">
<option value="alumno"><?php _e('Alumno'); ?></option>
<option value="profesor"><?php _e('Profesor'); ?></option>
</select>
</label>
</p>
<?php
}
add_action('register_form', 'add_role_dropdown_to_registration_form');
// Validar y asignar el rol seleccionado durante el registro
function validate_user_role_registration($errors, $sanitized_user_login, $user_email) {
if (!isset($_POST['user_role']) || empty($_POST['user_role'])) {
$errors->add('user_role_error', __('Por favor, selecciona un rol.'));
} else {
$selected_role = sanitize_text_field($_POST['user_role']);
// Limitar a roles específicos
$allowed_roles = array('alumno', 'profesor');
if (!in_array($selected_role, $allowed_roles)) {
$errors->add('user_role_error', __('Rol no válido.'));
}
}
return $errors;
}
add_filter('registration_errors', 'validate_user_role_registration', 10, 3);
// Asignar el rol seleccionado durante el registro
function assign_user_role_on_registration($user_id) {
if (isset($_POST['user_role']) && !empty($_POST['user_role'])) {
$selected_role = sanitize_text_field($_POST['user_role']);
$user = new WP_User($user_id);
$user->set_role($selected_role);
}
}
add_action('user_register', 'assign_user_role_on_registration');
Lenguaje del código: HTML, XML (xml)
Conclusión:
En este artículo, hemos explorado un código personalizado que mejora la experiencia de registro en WordPress al permitir que los usuarios elijan su rol desde el principio. Esto no solo proporciona flexibilidad en la segmentación de usuarios, sino que también simplifica la asignación de roles para los administradores del sitio. Al integrar este código en tu sitio, puedes personalizar la interacción de los usuarios desde el primer momento, adaptándola a tus necesidades específicas.
Nos vemos en el siguiente tutorial.
Un saludo.




Deja tus opiniones o dudas en los comentarios.