Advertisement
  1. Code
  2. WordPress

Creando Meta Cajas de WordPress Mantenibles: Guardar y Recuperar

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Creating Maintainable WordPress Meta Boxes.
Creating Maintainable WordPress Meta Boxes: Verify and Sanitize
Creating Maintainable WordPress Meta Boxes: Refactoring

Spanish (Español) translation by Luis Chiabrera (you can also view the original English article)

A medida que nos acercamos al final de esta serie, tenemos dos temas más que cubrir:

  1. Guardar información en y recuperar información de la base de datos
  2. Refactorizando el código para que sea más mantenible para nosotros.

En el artículo anterior, analizamos la validación, el saneamiento y la implementación de esta funcionalidad para los elementos que hemos mostrado en el front-end. En este artículo, continuaremos el proceso guardando la información en la base de datos, recuperando la información y mostrándola en el front-end.

En el camino, también veremos algunas de las funciones integradas de la API de WordPress diseñadas para ayudarnos a que esto sea un poco más fácil para nosotros, así como algunos consejos para volver a revisar nuestro trabajo en la base de datos para verificar que nuestra información se esté guardando. exactamente como esperamos.

Nos queda un poco más para darle vida a este complemento, así que comencemos.

Guardando datos

Para poder mostrar los datos en el front-end, obviamente necesitamos ingresar primero a la base de datos. Ya que estamos trabajando con meta box, entonces podemos usar funciones que están disponibles a través de la API de Meta Box para guardar esta información.

Específicamente, vamos a trabajar con las siguientes funciones:

Hay otra función, add_post_meta, que también está disponible para escribir información en la base de datos; sin embargo, update_post_meta hace lo mismo si los datos no existen en la base de datos.

Otra pregunta que he visto cuando se trata de eliminar metadatos de publicaciones es ¿por qué? Es decir, ¿por qué eliminar información en lugar de guardar un valor vacío?

Puede argumentar que esto es una preferencia personal, y lo es, pero si está trabajando con un complemento elaborado que tiene varios campos diferentes y los campos no tienen ningún valor, entonces tiene sentido no mantener una fila vacía.

Además, a menos que la ausencia de un valor sea significativa para algo en la interfaz de usuario, tampoco hay razón para mantener un valor vacío, ya que estamos permitiendo que la base de datos refleje más de cerca la información que se muestra en la pantalla.

Mantener la interfaz de usuario, el código de la capa de la aplicación y la base de datos lo más consistente posible es útil cuando se trata de escribir un código de mantenimiento.

Entonces, dicho esto, veamos el proceso de guardar los campos para cada uno de nuestros campos de entrada.

1. Borrador

Recuerde de la publicación anterior que la pestaña Borrador contiene un textarea única que pretende ser un lugar para que los autores recopilen varias notas y URL de toda la web que sean relevantes para el contenido que están preparando para publicar.

Cuando dejamos este código por última vez, teníamos lo siguiente:

Aquí, estamos viendo si el contenido de la matriz $ _POST está poblado. Si es así, desinfectamos la información usando trim y esc_textarea.

En este punto, estamos listos para escribirlo en la base de datos, así que reemplacemos la línea que dice // Más por venir ... con el siguiente código (tenga en cuenta que veremos el código más a fondo después de el bloque):

Aquí, estamos usando la función update_post_meta para agregar o actualizar el contenido en la base de datos. Tenga en cuenta que la función toma tres parámetros:

  1. La ID de la publicación que se utiliza para asociar esta información con la publicación
  2. Una clave meta que se utiliza para identificar de forma única el valor
  3. El valor meta real asociado con la clave meta

Observe también que si el valor de la matriz $ _POST está vacío, verificamos si hay un valor para el borrador en la base de datos y, si existe, lo eliminamos.

2. Recursos

Debido a que ya hemos preparado todo el trabajo para sanear la información y hemos visto cómo actualizar y eliminar la información en la base de datos, hacer lo mismo para la pestaña Recursos es más de lo mismo.

La única excepción es que, dado que estamos tratando con un conjunto dinámico de información, debemos asociar dinámicamente la publicación con una ID única basada en la cantidad de recursos que estamos ahorrando.

En el post anterior, nuestro código se veía así:

Cuando se trata de procesar información de forma dinámica, un bucle foreach funciona muy bien; sin embargo, al guardar información, debemos asociar una clave única a cada valor.

Una opción sería configurar un bucle for para sufijo de la clave meta con una clave única (usando el iterador para cada valor en el bucle), pero esto puede causar problemas cuando se trata de eliminar información. Específicamente, si el usuario ingresa un valor para la primera, segunda y tercera entrada pero luego elimina la segunda entrada, dejando solo la primera y la tercera al actualizar la publicación, debemos eliminar adecuadamente esos valores vacíos y desplazar todos los registros en consecuencia.

Esto se puede hacer de varias maneras diferentes, pero en realidad es más fácil guardar una única matriz serializada en un índice único en lugar de intentar hacer algo sofisticado con las filas de la base de datos, las consultas, etc.

Como tal, actualizamos el código anterior para que se vea así:

Si echa un vistazo a la base de datos y mira esta clave específica, debería ver algo como esto almacenado como el valor:

Veremos cómo se desarrolla esto cuando recuperemos la información de la base de datos más adelante en este artículo. Tenga en cuenta también que debemos tener en cuenta el caso cuando un usuario ha eliminado todas las instancias de recursos.

Al igual que hicimos en la primera parte del artículo, simplemente eliminamos los metadatos de la publicación si existe un valor. Esto se puede hacer usando un código muy similar:

Ahora necesitamos guardar los valores para el último cuadro de meta.

3. Publicado

La pestaña final de la meta caja, la pestaña Publicado, será la más fácil de actualizar, ya que reúne todo lo que hemos visto hasta ahora en el artículo.

Específicamente, estamos iterando a través de una colección de valores, escribiéndolos en una matriz y luego serializando la matriz en la base de datos. Quizás lo más importante a tener en cuenta es que estamos usando una matriz asociativa y estamos indexando cada valor por el valor del ID de comentario.

Como veremos más adelante en este artículo, esto facilitará mucho la configuración de los valores en la interfaz de usuario.

Al igual que hicimos en la sección anterior, si no se especifica nada en la matriz $ _POST, verificamos la existencia de los valores en la base de datos y, si existen, los eliminamos:

Como se mencionó, este último ejemplo reúne todo lo que hemos visto en las dos últimas pestañas, por lo que debería ser un código relativamente claro para seguir en este punto.

Una palabra sobre la base de datos

Antes de continuar, tomemos un momento para comprender cómo podemos terminar solicitando información de la base de datos.

Digamos que tienes una publicación con el ID de 9000 (la tuya variará según tu configuración). Puede tomar ese ID y buscar en la tabla wp_postmeta para ver toda la metainformación asociada con la publicación.

The Post Meta Data Table

Además, puede especificar la clave para retirar solo la información asociada con la ID de la publicación y la clave.

Si solo especifica la ID de la publicación, verá toda la metainformación asociada con la publicación. Si solo especifica la clave, verá todas las ID de las publicaciones que contienen contenido para sus borradores. Si especifica la ID de la publicación y la clave, solo retirará la información del borrador que ha especificado para una sola publicación.

Hablando de recuperar datos, veamos los pasos necesarios para mostrar los metadatos de publicación en el panel de control de nuestro complemento.

Recuperando datos

Ahora que toda la información se ha guardado en la base de datos, podemos introducir un código que lo recuperará y lo mostrará en la pestaña correspondiente de cada complemento. Lo bueno de esto es que utilizará funciones y constructores (como get_post_meta y for) que ya hemos estado usando.

1. Borrador

Busque admin / views / partials / drafts.php. Asumiendo que has estado siguiendo todo hasta este punto, el código debería tener este aspecto:

Para completar este textarea, debemos realizar una llamada a get_post_meta utilizando la ID de la publicación actual y la clave que usamos para guardar la información anteriormente en este artículo. Echa un vistazo al siguiente código:

Tenga en cuenta que estamos pasando en tres parámetros:

  1. El primero es el ID de la publicación que se recupera mediante la función get_the_ID.
  2. La segunda es la clave que hemos especificado al guardar los datos para identificarlos de manera única.
  3. El tercero es un valor booleano verdadero que le dice a la función que nos devuelva el valor como una cadena en lugar de una matriz.

Si el valor no existe, simplemente devuelve una cadena vacía, por lo que el textarea está vacía.

2. Recursos

Para Recursos, hacemos una llamada similar; sin embargo, esta vez queremos recorrer los resultados para que podamos crear dinámicamente la interfaz de usuario.

Debido a la forma en que WordPress serializa la matriz, aún queremos que la información se devuelva en un formato de cadena (aunque será una matriz deserializada) que nos permitirá usar un bucle foreach para iterar a través de ella.

En resumen, recuperamos la información de la base de datos, la recreamos creando un elemento input para cada valor y luego lo representamos en la página.

Esto también nos permite eliminar elementos simplemente eliminando un valor y luego actualizando la publicación. A partir de ahí, la pantalla se volverá a mostrar de forma tal que no haya elementos de entrada vacíos.

3. Publicado

Podría decirse que esta es la parte más fácil del complemento. Dado que ya tenemos mucho código en la plantilla, lo único que realmente necesitamos hacer es determinar si el valor de la casilla de verificación está establecido en la matriz de metadatos.

Dado que estamos utilizando el ID de comentario como el índice numérico de la matriz, simplemente podemos verificar si el ID de comentario está contenido en la matriz de metaclave que se devuelve de los metadatos.

Así es cómo:

Tenga en cuenta que recuperamos el valor de la base de datos y, de nuevo, pasamos true como tercer valor.

A continuación, tomamos el ID de comentario actual y verificamos si ese valor está contenido en las claves de la matriz (mediante el uso de array_key_exists) de los metadatos posteriores que se devolvieron. Si es así, marcamos la casilla de verificación como marcada; De lo contrario, no hacemos nada.

Hasta la próxima

En este punto, tenemos un complemento totalmente funcional que cumple con todos los requisitos que nos propusimos construir a partir del primer artículo de la serie.

¿Pero es el complemento en sí mismo mantenible? Es decir, ¿cumple el objetivo principal de esta serie?

En cierto modo, sí, pero hay margen de mejora. Como parte del desarrollo tiene que ver con trabajar con el código que heredamos, vamos a ver cómo refactorizar parte del código que hemos escrito para que sea más fácil de entender y mantener.

Además, veremos las razones por las que estamos realizando algunas de las refactorizaciones que estamos haciendo. Después de todo, no tendría mucho sentido simplificar el código o moverlo sin ninguna justificación.

Pero antes de hacer eso, siga adelante con este artículo y observe el código del repositorio asociado de GitHub y deje sus comentarios, preguntas o comentarios generales a continuación.

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.