Seguimos personalizando WordPress y hoy te traigo una solución eficaz para la gestión de perfiles de usuario en entornos WordPress. Diseñado como una función que se integra fácilmente mediante un shortcode, ofrece un formulario de edición de perfiles seguro y personalizable.
Su utilidad se manifiesta en escenarios donde la interactividad del usuario es clave, permitiendo actualizaciones de datos esenciales como nombres, roles y descripciones.
Además, la implementación cuidadosa de funciones de saneamiento garantiza la seguridad de las operaciones, convirtiéndolo en una herramienta confiable para comunidades en línea, sitios de membresía y plataformas colaborativas en WordPress.

El siguiente código tienes que agregarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS.
<?php
// Función para mostrar y procesar el formulario de edición de perfil
function mostrar_formulario_perfil() {
ob_start(); // Inicia el almacenamiento en búfer de salida
// Verifica si el usuario está autenticado
if (is_user_logged_in()) {
// Obtiene los datos del usuario actual
$current_user = wp_get_current_user();
// Procesa el formulario si se ha enviado
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['actualizar_perfil'])) {
// Actualiza los datos del usuario
$user_id = $current_user->ID;
// Actualiza campos personalizados
update_user_meta($user_id, 'first_name', sanitize_text_field($_POST['first_name']));
update_user_meta($user_id, 'last_name', sanitize_text_field($_POST['last_name']));
update_user_meta($user_id, 'user_url', esc_url($_POST['user_url']));
update_user_meta($user_id, 'user_email', sanitize_email($_POST['user_email']));
update_user_meta($user_id, 'description', esc_textarea($_POST['description']));
// Actualiza el rol del usuario (asegúrate de validar y sanear adecuadamente)
$user_role = sanitize_text_field($_POST['user_role']);
if (in_array($user_role, wp_roles()->role_names)) {
wp_update_user(array('ID' => $user_id, 'role' => $user_role));
}
echo '<p class="perfil-actualizado">Perfil actualizado correctamente.</p>';
}
// Muestra el formulario de edición de perfil
?>
<form method="post" action="">
<div> <?php
// Muestra el avatar del usuario
echo get_avatar($current_user->ID, 96);
?>
</div>
<label for="first_name"><b>Nombre</b></label>
<input type="text" name="first_name" value="<?php echo esc_attr($current_user->first_name); ?>" required>
<label for="last_name"><b>Apellidos</b></label>
<input type="text" name="last_name" value="<?php echo esc_attr($current_user->last_name); ?>" required>
<label for="user_url"><b>Página Web</b></label>
<input type="url" name="user_url" value="<?php echo esc_url($current_user->user_url); ?>">
<label for="user_email"><b>Email</b></label>
<input type="email" name="user_email" value="<?php echo esc_attr($current_user->user_email); ?>" required>
<label for="user_role"><b>Rol</b></label>
<select name="user_role">
<?php
$current_role = reset($current_user->roles); // Obtiene el primer rol asignado al usuario
foreach (wp_roles()->role_names as $role => $label) {
echo '<option value="' . esc_attr($role) . '" ' . selected($role, $current_role, false) . '>' . esc_html($label) . '</option>';
}
?>
</select>
<label for="description"><b>Biografía</b></label>
<textarea name="description"><?php echo esc_textarea($current_user->description); ?></textarea>
<input type="submit" name="actualizar_perfil" value="Actualizar Perfil">
</form>
<?php
} else {
// Si el usuario no está autenticado, muestra un mensaje de inicio de sesión
echo '<p>Debes iniciar sesión para ver y editar tu perfil.</p>';
}
return ob_get_clean(); // Devuelve el contenido almacenado en búfer de salida
}
// Registra el shortcode
add_shortcode('editar_perfil', 'mostrar_formulario_perfil');
Lenguaje del código: HTML, XML (xml)
Entendiendo el código:
Desglosemos el código para ver que es lo que hace:
- Inicio del búfer de salida: Se utiliza
ob_start()para iniciar el almacenamiento en búfer de salida. Este enfoque permite capturar la salida generada por la función y manipularla antes de enviarla al navegador. - Verificación de autenticación del usuario: Se emplea
is_user_logged_in()para determinar si el usuario está autenticado en WordPress. - Obtención de datos del usuario actual: Mediante
wp_get_current_user(), se obtienen los datos del usuario actual, como nombre, apellidos, URL, email, etc. - Procesamiento del formulario cuando se envía: Se verifica si el formulario ha sido enviado usando el método POST y si se ha solicitado la actualización del perfil (
actualizar_perfil). En caso afirmativo, se actualizan los metadatos del usuario en la base de datos. - Mostrando el formulario de edición de perfil: Se genera un formulario HTML con campos para editar diversos atributos del perfil. Se utilizan funciones de WordPress como
get_avatar,esc_attr,esc_url,esc_textarea,wp_roles, etc., para garantizar la seguridad y validación de los datos mostrados. - Manejo para usuarios no autenticados: Si el usuario no está autenticado, se presenta un mensaje indicando que es necesario iniciar sesión para acceder y editar el perfil.
- Finalización del búfer de salida y retorno del contenido: Se utiliza
ob_get_clean()para obtener y limpiar el contenido almacenado en el búfer de salida. Esto permite que el contenido generado dinámicamente sea devuelto para su inclusión en la ubicación donde se llamó la función. - Registro del shortcode: Se registra el shortcode
editar_perfilmedianteadd_shortcode, asociándolo con la funciónmostrar_formulario_perfil. Esto permite que el formulario de edición de perfil sea invocado en el contenido de las páginas o entradas de WordPress mediante el shortcode.
En conclusión, este código PHP emerge como una solución valiosa para la gestión de perfiles de usuario en entornos WordPress, proporcionando un formulario de edición seguro y eficiente. Su capacidad para adaptarse a diversos casos de uso, desde comunidades en línea hasta sitios de membresía, demuestra su versatilidad. La inclusión sencilla mediante shortcode y las medidas de seguridad implementadas refuerzan su utilidad, ofreciendo a los administradores y usuarios una herramienta intuitiva y confiable para personalizar y gestionar perfiles.
Si necesitas adaptar el código a las necesidades de tu proyecto o agregar una funcionalidad específica a tu página web no dudes en contactar conmigo.
Nos vemos en el siguiente tutorial.
Un saludo.




Deja tus opiniones o dudas en los comentarios.