Estas últimas semanas hemos trabajado en un proyecto bajo WordPress que requería añadir una funcionalidad para poder avisar a los usuarios del sitio de forma personalizada y a la vez sencilla para la persona que se iba a encargar de la administración del sitio.
Básicamente consistía en enviar un SMS a algunos usuarios para notificarles de ciertos contenidos. El texto a enviar via SMS es el mismo a lo largo del tiempo, por lo que el cliente solo necesita alguna forma de poder enviar ese SMS a los usuarios que necesitan recibirlo sin tener que entrar en cada uno de sus perfiles para ello. Necesita que sea una tarea ágil y sencilla.
Para ello hemos optado por incluir en la fila de acciones rápidas de cada usuario un nuevo link, que realizase esta nueva acción de enviar el SMS. No entraremos en detalles ahí, pues básicamente el proceso que sigue la función al hacer clic es hacer una llamada a la API de la plataforma de envíos de SMS para que se realice y la configuración os adelanto que no es muy interesante, sin embargo esta parte de cómo añadir una acción personalizada a los usuarios de WordPress si creo puede servir de ayuda.
Filtro WordPress para editar la fila de acciones de usuario
Afortunadamente en WordPress existe un filtro para modificar y añadir nuevos links a esta fila de acciones. Se llama user_row_actions
y en el codex tenéis toda la info sobre el mismo.
Las acciones a la que nos estamos refiriendo es la siguiente:
La misma fila la podéis encontrar con otras acciones en la ventana de post o páginas y son las que dan acceso a la opción de editar, edición rápida, borrar, etc…
Para añadir nuestro enlace de acción personalizado añadiremos la siguiente función en nuestro archivo de funciones de nuestra plantilla WordPress (si es en un tema hijo mejor) o el archivo del plugin que utilicemos para nuestras funciones propias.
function silocreativo_new_action( $actions, $user ) {
$actions['new_action'] = "<a class='new_action' href='" . admin_url( "users.php?&action=new_action&user=$user->ID") . "'>" . esc_html__( 'New action', 'silocreativo' ) . "</a>";
return $actions;
}
add_filter('user_row_actions', 'silocreativo_new_action', 10, 2);
Cómo veis añadimos un nuevo enlace con la acción «new_action». Cambia el nombre de la misma y personalízala para que te pueda servir en tu proyecto. Con esto ya tendríamos añadido el enlace, fíjate bien que también hemos pasado el ID del usuario para que podamos usarlos a porteriori (en nuestro caso para obtener el número de teléfono y poder envíarle el SMS).
Diseño y UX para las acciones personalizadas
Cada acción es un mundo y en cada proyecto que lo necesites seguramente el contenido o la función a ejecutarse será muy distinta. Sin embargo, todas ellas tienen algo en común, y es que tras hacer clic en el enlace necesitamos algún tipo de confirmación para que el usuario sepa que todo ha ido ok, un poco de UX nunca puede faltar 🙂
Para ello añadiremos la siguiente función con su add_action
correspondiente:
function silocreativo_new_action_notice() {
?>
<div class="updated">
<p><?php esc_html_e( 'Action has been done successfully', 'silocreativo' ); ?></p>
</div>
<?php
}
add_action( 'admin_notices', 'silocreativo_new_action_notice' );
Con esto indicamos que todo a ido ok, usando los avisos por defecto de WordPress, en nuestro caso el de éxito con un texto personalizado:
Otros ejemplos de enlaces personalizados para usuarios
La idea de usar estos enlaces para realizar acciones sencillas sin tener que pasar por la página de edición de cada usuario es usada por varios plugins. De hecho, la idea fue sugerida por el propio cliente ya que usaba en otro proyecto un plugin que añadía un enlace personalizado para volver a enviar el email de confirmación de nuevo usuario con el enlace para establecer la contraseña, se llama Resend Welcome email.
Espero que os haya servido de ayuda y apliquéis este tutorial a vuestros WordPress cuando necesitéis una forma sencilla de asociar acciones a cada usurio con un simple clic.
Muy interesante la idea y lo «sencillo» que puede ser aplicar acciones útiles para la gestión de usuarios. Sin embargo creo que este tipo de funcionalidades pertecen a un plugin y no deberían pertenecer al tema. Al fin y al cabo no resulta complicado crear un mini plugin para esto.
Saludos.
Saludos Victor,
Correcto, como se comenta justo encima del primer spinet de código, las dos opciones son incluirlo en el tema (tema hijo siempre mejor) o en un plugin propio.
Sin embargo, aunque lo ideal es no invadir el plugin territory con funciones en los temas, no siempre la solución idónea es incluirlo en un plugin, sobre todo si la acción que se va añadir está de alguna forma ligada al tema o usa una función del template, ya que si en el futuro cambiamos de tema, nuestra acción puede quedar huérfana y causar algún error. Mejor que dicha acción desaparezca cuando desactivemos el tema.
Lo dicho, la primera opción es siempre plugin, pero si analizamos la acción y puede causar errores en un futuro theme switching, tema hijo.
Gracias por comentar!
Saludos