14. The WP Functions Library (III). El Custom Fields Metabox

A las fichas de The WP Functions Library les vamos a añadir los metadatos. Para ello crearemos un metabox exclusivo de nuestro Custom Post Type, en el que, con un sencillo formulario, introduciremos la información adicional de las fichas.

NOTA PREVIA: Este artículo se fundamenta, basicamente, en el artículo Metaboxes en WordPress, cómo crearlos, de DaríoBF, y, por supuesto, el Codex WP.

 

Añadir un metabox a nuestras fichas

Es muy fácil, al gancho acción ‘add_meta_boxes’ le enganchamos una función add_meta_box(), de la siguiente manera:

Ante todo, quiero recordar el tema del prefijado, que en mi caso guarda la coherencia con la función para crear el post type, stmtwpfl_.

Ahora, vamos a ver los argumentos de la función add_meta_box():

  • $id. Cadena requerida, con el id del meta box.
  • $title. Cadena requerida, con el título del meta box.
  • $callback. Función de llamada de vuelta requerida, que genera el meta box con el contenido deseado.
  • $screen. Puede ser una cadena, una matriz o un WP_Screen, opcional, con la que se indica dónde se mostrará el meta box. En nuestro caso, obviamente, le hemos indicado ‘stmtwpfl’ que es el nombre con el que registramos nuestras fichas de Custom Post Type.
  • $context. Cadena opcional que puede tener tres posibles valores: ‘normal’‘side’‘advanced’. Por defecto es ‘advanced’, y el resultado cambia según la pantalla de edición. En este caso, hemos indicado ‘side’, para que apareciera en la parte derecha de la pantalla de edición (aprovechamos que no tenemos los metaboxes de ‘Formato’, ‘Categorías’, ‘Etiquetas’ ni ‘Imagen destacada’.
  • $priority. Cadena opcional que puede tener tres valores: ‘high’‘low’‘default’. El valor ‘high’ hace que prevalezca su prioridad a la del resto de los elementos que hay a su alrededor, por lo que se pone por encima del meta box ‘Publicar’. De ahí que lo he preferido por debajo, mediante el valor ‘default’.
  • $callback_args. Matriz opcional para paso de argumentos a la función llamada con $callback. Nosotros la hemos omitido.

El resultado actual, es el siguiente:

custom-fields-metabox-1

 

Añadir los metadatos al metabox

Recordemos los metadatos que queríamos añadir a nuestras fichas:

  • Versión
  • Autor
  • Creación
  • Fuentes
  • Modificación
  • Relacionado

Además teníamos los archivos adjuntos (attachments) que los veremos más adelante.

Para que nos aparezcan estos metadatos en el metabox que hemos creado, primero cambiaremos la función add_meta_box(), indicándole una nueva función para la creación del metabox, así:

add_meta_box( ‘stmtwpfl_metabox’, ‘Meta datos de la ficha’, ‘stmtwpfl_funcion_metadatos’, ‘stmtwpfl’, ‘side’, ‘default’);

donde hemos cambiado el tercer parámetro, de ‘stmtwpfl_funcion_metabox’ a ‘stmtwpfl_funcion_metadatos’.

Esto ahora nos llamará a la función siguiente:

Y nos dará el siguiente resultado:

custom-fields-metabox-2

Un pequeño truco es asignar una class=”widefat” a los inputs que contendrán un contenido más largo. Tomarán todo el ancho del metabox.

 

Rescatar los metadatos de la base de datos

Bien. Más de uno ya se habrá dado cuenta que aquí la variable $text no sirve de nada. Obviamente, si es una ficha nueva, no tendrá metadatos. Pero si estamos editando una ficha ya existente, deberemos saber cuáles son.

Para eso, modificaremos nuestra función stmtwpfl_funcion_metadatos(), quedando así:

Con la función get_post_custom ( $post->ID ) recuperamos los datos en una matriz $metadatos asociativa, de la que recuperamos cada uno en las siguientes líneas, para después mostrarlos en los campos del formulario.

 

Seguridad en los formularios WP

Gracias a Linux Hispano voy a poder explicaros el siguiente punto.

Al crear un formulario en WP, en realidad estamos añadiendo un punto de entrada a nuestro sistema, con lo que es un punto conflictivo en cuanto a seguridad.

Para mitigar este problema, WP proporciona un mecanismo llamado nonce, que viene de number used once, número usado una sola vez.

Con nonce se crea una clave secreta que se comprueba en cada paso del código que se ejecuta.

Los pasos del nonce son los siguientes:

  • Generamos un nonce.
  • Pasamos el nonce del formulario al script que lo recibe
  • En el script, lo primero que hacemos es verificar el nonce antes de hacer cualquier otra cosa.

wp_nonce_field( $action, $name, $referer, $echo )

  • $action. Cadena opcional que indica el contexto en el que está.
  • $name. Cadena opcional que es el nombre del nonce. El receptor lo recibirá vía $_POST[$name]. Por defecto es ‘_wpnonce’.
  • $referer.
  • $echo

Nosotros lo aplicamos justo antes de crear el formulario:

 

Guardar los metadatos en la base de datos

Igual que antes de mostrar el formulario rescatamos los metadatos de la base de datos, en algún momento debemos guardarlos en la misma.

Esto lo hacemos mediante el gancho de acción ‘save_post’ que se produce cuando clicamos ‘Publicar’, ‘Actualizar’ o ‘Sólo guardar’.

Al ejecutar nuestra función stmtwpfl_guardar_metadatos( $post_id ), primero comprobaremos que no se está haciendo un autoguardado, verificaremos el nonce y nos aseguraremos que el usuario tiene permisos para editar el post.

Una vez verificadas todas estas condiciones, procedemos a guardar los diferentes campos mediante la función update_post_meta().

Al final, nuestro código queda así:

 

Conclusiones

Seguimos nuestra hoja de ruta prevista. Hemos visto cómo crear nuestros custom post types y les hemos añadido los custom fields mediante metaboxes particulares.

En el próximo artículo veremos las taxonomías, que aplicaremos a nuestras fichas particulares.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *