Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Plugins
Code

Adjuntar Archivos a Tus Entradas Usando Campos Meta Personalizados en WordPress, Parte 1

by
Length:MediumLanguages:

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

Durante el curso de estos dos próximos artículos, veremos cómo podemos mejorar la API de WordPress para definir nuestros propios campos meta para adjuntar una documento (por ejemplo un PDF) a nuestras páginas en WordPress. También veremos cómo eliminar adecuadamente archivos para borrarlos de nuestras entradas.

Hace pocos meses, Christopher Davis demostró cómo crear Custom WordPress Write/Meta Boxes (http://wp.tutsplus.com/tutorials/plugins/how-to-create-custom-wordpress-writemeta-boxes/). Como hemos mencionado en este artículo, los campos personalizados son una característica increíblemente potente que nos permite añadir varias piezas de información adicional a nuestras entradas y páginas en WordPress.

Por supuesto, no estamos limitados a añadir únicamente texto, botones de radio o casillas de verificación. También podemos adjuntar imágenes y archivos a las entradas, páginas y otros tipos de entradas sacando provecho así de los campos meta personalizados; en cualquier caso, trabajar con tipos de archivos requiere un poco más de código para gestionar adecuadamente la carga y la eliminación de los archivos. 

Antes de seguir, es importante advertir que en esta serie se asume que estamos trabajando con el Tema Twentyeleven. Aunque el código funcionará con cualquier tema de WordPress, con esto nos aseguramos de que todos estamos trabajando con el mismo código y debería ser más fácil seguir el tutorial.


Definir El Campo Meta Personalizado

Primero, vamos a crear el campo personalizado de la entrada. Específicamente, el campo personalizado debería…

  • Estar disponible tanto para las páginas como para las entradas
  • Aparecer junto al editor de enradas
  • Aceptar la entrada de un archivo

Ahora, localiza el archivo functions.php en el directorio raíz del tema Twentyeleven. Haremos todos nuestros cambios al final del archivo. Vamos a empezar definiendo una función llamada add_custom_meta_boxes y ésta será registrada con el hook dd_meta_boxes.

Luego, definimos nuestro campo meta personalizado. Primero, escribiremos el código tras el cual explicaré lo que éste hace:

Observa que las dos siguientes llamadas a la función add_meta_box son idénticas.

  • El primer parámetro es el ID del campo meta. Esto se usa en el momento de guardar el valor.
  • El segundo parámetro es la etiqueta. Este valor aparece en el título situado sobre el campo meta
  • El tercer valor es la función de respuesta a la llamada usada para definir la estructura del código que aparecerá en el campo meta. Vamos a hacerlo en un momento.
  • El cuarto valor le indica a WordPress el tipo de entrada en la que debe aparecer el campo meta personalizado. Como queremos que aparezca tanto en entradas como en páginas, lo definimos dos veces.
  • El último parámetro define dónde queremos que aparezca el campo meta. Puede ser lateral, avanzado o normal. Nosotros hemos seleccionado lateral, de forma que aparecerá al lado del editor de entradas

Configurar las Respuestas

Ahora mismo, el campo personalizado no hace nada. De hecho, ni siquiera muestra nada:

Esto se debe a que no hemos definido la respuesta a la función empleada para generar el código para el campo meta. Para conseguir esto, necesitamos definir una función con el nombre que hemos indicado anteriormente. Específicamente: 'wp_custom_attachment'.

El campo de entrada debería aceptar un PDF, así que daremos una pequeña descripción y el elemento de entrada adecuado para aceptar archivos:

La primera línea de código define un valor entero para validar y securizar adecuadamente nuestra carga.

Después, simplemente establecemos el código para mostrar el campo de entrada.

Ya tenemos un campo meta personalizado con un aspecto decente, aunque todavía no funciona.


Guardar El Archivo

Ahora estamos preparados para guardar el archivo. Primero, necesitamos crear una función que enganche con el hook save_post. Vamos a definirlo ya:

Aunque esta función realmente no guarda el valor, todavía no, al menos, sí que incluye un fragmento de código que asegura que estamos preparados para guardar el archivo. Específicamente, la función se asegura de que el valor entero este presente, de que no está dándose un guardado automático, y de que el usuario que está intentando guardar datos dispone de permisos para hacerlo.

Ahora ya estamos listos para empezar a validar y guardar el archivo. Cuando se trata de guardar meta datos personalizados basados en archivos, tenemos que introducir código adicional para manejar adecuadamente idiosincrasias propias de la carga de archivos. Primero, definimos el código y después lo explicaremos. La función debería parecerse a lo siguiente:

El nuevo bloque de código hace varias cosas. Aunque los comentarios han sido proporcionados para proporcionar claridad, aquí tienes una explicación de lo que está sucediendo:

  • Primero, nos aseguramos de que la cadena del archivo está vacía
  • Después, configuramos la cadena para indicar los tipos de archivo admitidos y verificamos que el archivo cargado pertenece a uno de ellos
  • Luego, usamos wp_upload_bits para copiar el archivo al servidor
  • Y por último, si hubiese cualquier error, detenemos la ejecución y se los mostramos al usuario.

Una nota sobre wp_upload_bits (http://codex.wordpress.org/Function_Reference/wp_upload_bits)Esta función es una alternativa a la wp_handle_upload (http://codex.wordpress.org/Function_Reference/wp_handle_upload). Según mi experiencia, wp_handle_upload ha dado algunos problemas con ciertas configuraciones de servidor, por ejemplo en ocasiones ha dado un falso negativo. Con esto me refiero a que ha indicado que existe un problema con la carga del archivo cuando, en realidad, el archivo fue verdaderamente cargado.


Enlazar el Archivo

Ahora deberíamos estar preparados para proporcionar un enlace al archivo de nuestras entradas y páginas. En el directorio del tema Twentyeleven, localiza los dos archivos single.php y page.php. Cada archivo contiene una línea de código parecida a esta:

Justo bajo esta línea, necesitaremos solicitar la información del campo meta personalizado haciendo lo siguiente:

Específicamente, esta función está solicitando los datos meta identificados por 'wp_custom_attachment' asociados con este ID de entrada. Claro, ¿no? El último parámetro le está indicando a WordPress que queremos recuperar el resultado en forma de cadena (la alternativa es un formato de array y está fuera del ámbito de este tutorial).

El bloque de código final debería parecerse a esto:

Ahora, intenta cargar un archivo para una página o entrada. Abre la entrada o página en tu navegador. Asumiendo que todo ha ido correctamente, observarás que… ooops… realmente no tienes la ruta a un archivo.


Actualizar El Formulario de la Entrada

El problema es que, por defecto, el elemento del formulario usado para guardar toda la información de la entrada y sus datos asociados no acepta tipos de archivos. Esto puede solucionarse añadiendo una función más que se engancha en el ciclo de la página de WordPress.

Esto unirá el atributo enctype al elemento de formulario del editor de entrada de forma que la carga de archivos no sea admitida.

Ahora, vamos a intentar subir un archivo de nuevo. Localiza tu entrada o página con el campo meta personalizado e intenta cargar un PDF. Todo funciona bien, deberías ser capaz de navegar a la entrada y/o página y ver la URL que nos dirige al archivo.


Unirlo Todo

El último paso es el más fácil. A continuación, vamos a revisar los archivos single.php y page.php y envolver la llamada a la solicitud de datos personalizados meta en un ancla que se parece a esto:

En este momento deberías ser capaz de adjuntar un PDF personalizado a tu página y tener un enlace al final del contenido de la página que nos proporciona un enlace de descarga. En el próximo artículo, veremos como podemos mejorar el estilo para el ancla de descarga así como eliminar el archivo de la página usando la API de WordPress.

Mientras, intenta experimentar modificando el campo meta más aún. Por ejemplo, intenta incluir una etiqueta personalizada para proporcionar contenido al enlace.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.