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

Comienzo de una serie de entradas sobre buenas prácticas, tips, trucos y/o consejos para desarrollar de forma más eficiente sobre WordPress. En esta entrega:

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.

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

  1. hola ,si me pudieses ayudar pues tengo una duda:como crear un plugin que utilice mis propias tablas?gracias.

    1. Hola roman,

      Lo principal es conocer la clase wpdb (disponible como global $wpdb) que es la que en WordPress gestiona la conexión con la base de datos.

      Para esto tiene varios métodos, como $wpdb->get_results() para ejecutar cualquier consulta “SELECT” —también hay métodos más específicos como $wpdb->get_var() y $wpdb->get_row()—, $wpdb->query() que te permite ejecutar cualquier tipo de consulta, y $wpdb->prepare() que sirve para escapar datos y así evitar ataques de inyección SQL.

      Para crear las tablas, necesitas crear un callback que se ejecute al activar el plugin; puedes revisar esta página de la wiki donde se cubre el tema en más detalle:
      http://codex.wordpress.org/Creating_Tables_with_Plugins

      Si solamente necesitas guardar algunas opciones, resulta más práctico utilizar la API de opciones: http://codex.wordpress.org/Options_API

      Por otra parte, si necesitas guardar metadatos de posts, usuarios o taxonomías, cada uno de estos objetos cuenta con una API de metadatos.

      Conviene más usar tablas propias cuando tienes algún requerimiento muy específico (por ejemplo, relaciones entre distintas taxonomías o entre múltiples usuarios y posts, o entre distintos usuarios) o anticipes que el volumen de datos será muy grande y necesitas columnas con tipos de datos específicos.

      Slds!

    2. Gracias felipe.es la primera vez q choco con wordpress,y no tenia ni idea de como usar mis propias tablas, pues tengo q hacer un proyecto sobre un direcctorio telefonico con algunos requerimientos.Disculpa la molestia y de nuevo gracias no sabes cuanto me has allanado el camino. Atentamente roman

    3. hola felipe, voy avanzado en el plugin. pero he estado buscado varios formularios pero ninguno se ajusta, asi que los estoy creado pero ahora he chocado con otra piedra, y queria pedirte si me pudieses aclarar: como puedo procesar mis formularios?gracias y disculpa la molestia.atentamente roman

    4. Como estás creando y usando tus propias tablas, te conviene organizar todo lo relacionado con el formulario en un plugin.

      Para procesar el formulario, debes “engancharte” en el proceso de ejecución de WordPress. En tu caso, quizás lo mejor sea utilizar la acción “init”, que se ejecuta tras autenticar el usuario pero antes de hacer consultas de posts o enviar cabeceras HTTP.

      Luego es cosa de obtener los valores enviados en el formulario mediante $_POST o $_GET

      Puedes ver un ejemplo sencillo en:
      http://codex.wordpress.org/Plugin_API/Action_Reference/init

      Saludos!

Comments are closed.

%d bloggers like this: