WordPress Tips: Utiliza el parámetro action para determinar la acción que estás realizando

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_eventedit_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, eventes 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.