7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. WordPress

Crear campos personalizados para archivos adjuntos en WordPress

Scroll to top
Read Time: 9 mins

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

Los campos personalizados en Wordpress hacen que sea fácil personalizar tu tema en una variedad de formas; además, son fáciles de implementar en entradas y páginas. Por otro lado, implementar los archivos adjuntos lleva un poco más de trabajo, lo que requiere que leas y descifres el código fuente del núcleo para hacerlos funcionar. En este tutorial, vamos a explorar el uso de un par de ganchos de WordPress que no están documentados para hacer que este proceso sea mucho más fácil.


Prefacio: Acerca de los ganchos

Ambos ganchos han existido desde WordPress 2.5, y se aplican en wp-admin/includes/media.php, no obstante, permanecen infrautilizados en la comunidad, muy probablemente porque no están documentados en el Codex. A continuación se muestra dónde se aplican los ganchos en el código del núcleo, lo que nos permite saber qué será pasado a las funciones que añadamos a cada gancho.

attachment_fields_to_edit

  • $form_fields es una matriz especial que describiremos en detalle en un momento.
  • $post es el archivo adjunto a modo de objeto (los archivos adjuntos son tratados como objetos de entrada en WordPress).

attachment_fields_to_save

  • $post es el archivo adjunto en forma de matriz (los archivos adjuntos son tratados como objetos de entrada en WordPress).
  • $attachment es la parte de los datos adjuntos del formulario $_POST que incluirá la configuración de los campos a través del gancho attachment_fields_to_edit.

Nota: Ten cuidado en tu código, ya que $post se envía a una función a modo de objeto y a la otra en forma de matriz.

Consejos de nomenclatura de campos personalizados

Los nuevos campos añadidos se guardarán como meta de una entrada, de la misma forma que se guarda la sección de campos personalizados de la pantalla de edición de la entrada/página. Los campos prefijados con un guión bajo (_my_custom_field) no aparecerán en el menú desplegable de los campos personalizados disponibles en la pantalla de la entrada/página; sí se mostrarán todos los demás campos meta existentes en la entrada. Podemos usar este conocimiento para ocultar los campos que estemos añadiendo al formulario multimedia, si no son relevantes para las entradas/páginas.

Existe una regla similar a tener en cuenta al elegir la clave de la matriz $form_fields que se usará para tu nuevo campo. Si utilizas un guión bajo aquí ($form_fields['_my_custom_field']), el campo será omitido y no se añadirá al formulario.

Por lo tanto, para mostrar nuestros campos en el formulario de medios, y además, no hacerlo en la lista desplegable de los campos personalizados de la página/entrada, debemos combinar ambos métodos. Para esto necesitaremos las funciones de edición y guardado que vamos a crear. Para el gancho 'attachment_fields_to_edit' estableceremos las claves $form_fields de manera que no lleven como prefijo un guión bajo, y para el gancho 'attachment_fields_to_save' prefijaremos nuestros campos con un guión bajo antes de guardarlos como meta de entrada. Esta es una solución alternativa que vale la pena hacer con el fin de no enturbiar la interfaz de nuestros usuarios con información innecesaria.


Gancho 1: attachment_fields_to_edit

A continuación se muestra un ejemplo sobre cómo añadir tus propios campos personalizados al formulario de datos adjuntos.

La matriz $form_fields tiene varias opciones para incluir diferentes tipos de entradas y contenido personalizado. A continuación he compilado los diversos métodos con anotaciones y capturas de pantalla sobre cómo se representan en el formulario.

Entrada de texto

Se representa en el formulario de la siguiente manera:

Área de texto

Se representa en el formulario como:

Campo oculto

Los campos ocultos se compilan juntos y se generan al final del formulario.

Otros tipos de campo

Si necesitas un tipo de entrada distinta a 'text', 'textarea' o 'hidden', utiliza 'html' que te permite pasar tu propio contenido personalizado para usarlo en el elemento de entrada de tu elección. Al crear tu propio html de entrada, es importante establecer correctamente el atributo 'name' en el elemento, para que el campo sea pasado más adelante a la función que guarda los datos. Quieres algo como esto: name = "attachments[$post->ID][my_custom_key]".

Representa en el formulario como:

Atributos especiales

Existen varios atributos especiales que puedes añadir a tus campos personalizados para mejorarlos.

helps - Este atributo añade una cadena de ayuda al campo personalizado.

Esto se representa en el formulario de la siguiente manera:

required - Este atributo marcará el campo como necesario; pero se trata sólo de una referencia visual. Más adelante tendremos que escribir código en la función que guarda los datos para que funcione realmente como campo requerido.

Se representa en el formulario de la siguiente manera:

extra_rows - este atributo te permite añadir una matriz de filas justo después del campo personalizado. El marcado para cada elemento de matriz se muestra a continuación: la clave de matriz se convertirá en la clase del td y el valor es el contenido:

Se representa en el formulario de la siguiente manera:

tr - Mientras extra_rows solo te permite añadir celdas de tabla directamente bajo el elemento de entrada del campo personalizado, este atributo te permite crear filas completas.

La tabla a la que añadiremos una fila tiene dos columnas, así que tenlo en cuenta al usar este método. Y esto no tiene por qué ser un campo de formulario, simplemente podrías añadir una fila que explique los siguientes campos, añadir todos tus campos manualmente, o cualquier otra cosa.

Se representa en el formulario de la siguiente manera:


Gancho 2: attachment_fields_to_save

Guardar los campos personalizados es un proceso mucho más sencillo que añadirlos al formulario; simplemente comprueba si tu campo está establecido y actualiza su valor como post meta. Vuelve a prefijar tu campo con un guión bajo al guardarlo para ocultarlo en la pantalla de edición de la entrada/página.

Aquí también puedes añadir errores que se mostrarán automáticamente bajo tu campo en el formulario. La matriz $post['errors'] se combina con la matriz $form_fields antes de enviarse a través del gancho attachment_fields_to_edit.

Nota con respecto a los errores personalizados: Existen un par de errores en WordPress de larga duración (a partir de la versión 3.0-RC3) que tienen que ver con la visualización de los errores personalizados.

  1. Uno evitará que tus mensajes de error personalizados aparezcan en la página de edición de medios individuales.
  2. El otro error se encuentra en la ventana emergente modal para los elementos multimedia utilizados en la pantalla de edición de la entrada/página. Aquí, los errores se muestran
    el único problema es verlos desde el inicio. Después de guardar, serás dirigido automáticamente a la
    la pestaña 'Galería' donde existe un listado minimizado de elementos multimedia. Si haces clic en "Mostrar" para abrir tu nuevo recurso,
    verás tus mensajes de error en el formulario. El problema es que si hay errores, se supone que ese formulario de elementos
    debería estar abierto de forma predeterminada. Hay un error en el css donde la clase 'startopen' (que está presente en el elemento si
    hay errores que mostrar) tiene el valor de 'display:none' en algunos lugares en las principales hojas de estilo.

He enviado parches para ambos de estos problemas (#13810 & #13838), y me han dicho que van a ser revisados y subsanados en la versión 3.1. Así que por ahora, no confíes demasiado en tus mensajes de error, solo alégrate de saber cómo trabajar con ellos para cuando sean de mayor utilidad en un futuro cercano.


Otras ideas

Es posible que desees incluir algunos de tus campos solo en archivos adjuntos de audio, o simplemente en las imágenes adjuntas a la página principal. Para personalizar aún más los formularios de tus adjuntos, ajusta simplemente tus campos especiales en instrucciones distintivas para las funciones de edición y de guardado.

Si se te ocurre alguna manera inteligente de utilizar los campos personalizados con archivos adjuntos, ¡compartelo con nosotros a través de los comentarios!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.