Si bien es cierto que WordPress es un entorno de desarrollo bastante flexible, también lo es el hecho de que conocer más acerca de su funcionamiento te puede ayudar bastante a agilizar tus procesos, mejorar la integración con el sistema y la interacción con otros plugins, y en definitiva a desarrollar de forma más eficiente para WordPress.
Hace algún rato que quería presentar algunos de los trucos o buenas prácticas que he ido descubriendo o aprendiendo al desarrollar temas y/o plugins para WordPress; no espero despertar grandes revelaciones sino poner en discusión nuestras formas de trabajo diarias sobre este sistema.
Comencemos por algo sencillo, casi cosmético… Es algo que primero noté en la misma interfaz de administración de WordPress y que luego de empezar a utilizar en mis propios desarrollos me ha demostrado ser muy valioso: al enviar solicitudes al servidor, siempre utiliza la variable action
para determinar la acción que estás realizando.
Ya sea que estés enviando un $_POST
o solicitando algo por $_GET
, sabrás que action
siempre tendrá directa relación con lo que vayas a realizar. Esto resulta aún más conveniente si lo relacionas explícitamente al tipo de datos que estás trabajando: por ejemplo, si en tu plugin vas a crear un evento en un calendario, es bastante lógico que tu action
sea algo como add_calendar_event
, edit_calendar_event
al editar o remove_calendar_event
si lo vas a borrar (o simplemente add
, edit
y remove
como métodos de una clase).
Luego, al procesar el formulario puedes tener una estructura de control muy clara y ordenada, por ejemplo:
function calendar_actions(){ // primero, revisar si está definida la variable; al usar $_REQUEST quedamos cubiertos tanto para $_POST como $_GET if ( isset($_REQUEST['action'] ) { switch ( $_REQUEST['action'] ) { case 'add_calendar_event': // procesar acción de agregar evento al calendario calendar_event_add(); break; case 'edit_calendar_event': // procesar acción de edición de datos del evento calendar_event_edit(); break; case 'remove_calendar_event': // eliminar evento del calendario calendar_event_remove(); break; } } }
Si te das cuenta, las funciones que procesan cada acción también siguen un patrón: calendar
sería el nombre del plugin, event
es el objeto sobre el que estoy trabajando, y finalmente la acción que se realiza sobre cada objeto.
He visto plugins donde las acciones desencadenadas por formularios se determinan verificando combinaciones de parámetros que a la larga resultan poco comprensibles. Por ejemplo:
function calendar_actions(){ if ( !empty($_POST['start_date']) && $_POST['add'] == 'true' ) { calendar_add_event(); } elseif ( !empty($_GET['event_id']) && $_GET['remove'] == 'do' ) { calendar_event_remove(); } elseif ( !empty($_POST['event_id'] && $_POST['edit'] == 'true' ) { calendar_event_edit(); } }
A la larga, las combinaciones de parámetros se van haciendo cada vez más confusas. Por otra parte, la comprobación y validación de datos se corresponde mejor con las funciones ligadas a cada acción más que a la detección de qué función ejecutar.