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

Cómo trabajar con WordPress Metadata de Posts

by
Read Time:20 minsLanguages:
This post is part of a series called How to Work with WordPress Metadata.
How to Work With WordPress Metadata
How to Work With WordPress User Metadata

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

En el primer post de esta serie, he dado una visión general de todos los tipos de metadatos ofrecidos por WordPress, donde se mantiene, y lo que vamos a estar cubriendo a lo largo de esta serie.

Además, definí qué metadatos es; Su papel dentro de WordPress, y cómo es relevante para nosotros como desarrolladores. Pero la introducción estaba destinada a ser sólo eso: una encuesta de lo que vamos a cubrir a lo largo del resto de esta serie.

Comenzando en este post, vamos a comenzar a explorar el WordPress Post Meta API para ver por qué es útil, lo que podemos hacer con él, y cómo aprovechar los métodos ofrecidos a través de la aplicación de WordPress.

Descargo de responsabilidad para todos

En primer lugar, si usted es un desarrollador avanzado, entonces no es probable que esta serie de tutoriales va a ser de mucha ayuda para usted. En cambio, está orientado más hacia aquellos que han trabajado un poco con temas, tal vez ajustado algún código de complemento, y están dispuestos a dar un paso más añadiendo alguna información adicional a los puestos (o los tipos de post) que componen su proyecto.

En segundo lugar, tenga en cuenta que los ejemplos de código de este tutorial no se utilizan en un entorno de producción. En su lugar, el código que vamos a ver no está destinado a ser utilizado en cualquier lugar que cualquier persona tiene acceso público al sitio.

Ahora mismo, estoy planeando cubrir técnicas más avanzadas para este tema después de que trabajemos nuestra manera a través de esta serie. Pero por ahora, sólo nos ocuparemos de trabajar con la API.

¿Por qué sin embargo? ¿Cuál es el retraso en la cobertura de información adicional? En pocas palabras, tiene que ver con la seguridad del sitio web. Específicamente, cada vez que estamos escribiendo información en la base de datos, tenemos que asumir que los datos no están en un formato que sea seguro para nosotros almacenar; Tenemos que desinfectar los datos.

Hay un conjunto totalmente diferente de APIs para desinfectar los datos que debemos explorar que funcionarán conjuntamente con las API de metadatos, pero este no es el tutorial para hacerlo.

Lo sé, puede sonar un poco frustrante hablar de estas API sin poder aprovecharlas. Recuerde, sin embargo, esto está destinado a ser una introducción a la API. Los tutoriales deben proporcionar suficiente información para que usted pueda empezar a trabajar con los metadatos de post en su máquina, pero también debe dejar suficientes preguntas para que podamos profundizar en el tema en una futura serie de artículos.

Con eso dicho, vamos a seguir adelante y empezar con el WordPress Post Meta API. Y te advierto: Este es un tutorial largo.

Introducción a la API

Antes de examinar el código, es importante asegurarse de que tiene las herramientas necesarias para examinar la base de datos en la que se ejecuta la instalación de WordPress. Algunas de las herramientas disponibles incluyen:

Pero siéntete libre de usar lo que más te guste. Siempre y cuando pueda ver los datos en la base de datos, ya está listo.

A continuación, vamos a entender cómo WordPress define post metadatos. Según el Codex:

WordPress tiene la capacidad de permitir que los autores de los mensajes asignen campos personalizados a una publicación. Esta información extra arbitraria se conoce como metadatos.

Los meta-datos se manejan con pares clave / valor. La clave es el nombre del elemento de metadatos. El valor es la información que aparecerá en la lista de metadatos de cada publicación individual a la que está asociada la información.

En términos más sencillos, WordPress nos permite escribir información personalizada en la base de datos, asociarla con cualquier publicación que nos gustaría y luego recuperarla según sea necesario. Además, la información se almacena utilizando pares clave / valor únicos.

Escribir nuestros propios metadatos

Si esto le suena extraño, ni siquiera se preocupe por ello. La idea es que para cada valor que almacenas, está relacionado con una llave única (al igual que un pomo de puerta tiene una llave única para desbloquearla).

La clave es cómo podemos recuperar el valor de la publicación. Pero esto plantea una pregunta: ¿Qué sucede si un post tiene múltiples metadatos asociados con él? Es decir, si un post determinado puede tener múltiples fragmentos de metadatos almacenados junto a él, ¿cómo recuperamos metadatos únicos?

Como veremos cuando comencemos a ver algunos de los ejemplos de código a continuación, además de usar la clave utilizada al almacenar datos, también necesitamos pasar el ID único de la publicación a la función.

Nada funciona mejor que verlo en acción, sin embargo. Asumiendo que tienes WordPress configurado en tu máquina local y que estás bien con la edición de functions.php en el núcleo de tu tema por defecto, vamos a empezar.

Para referencia

Estaré utilizando las siguientes herramientas: 

Lo más importante es que está ejecutando WordPress y el tema mencionado anteriormente.

Por último, si estás más cómodo con otro IDE y base de datos front-end, eso está bien.

Hemos cubierto una gran cantidad de información en la introducción de este artículo, pero será muy útil ya que comenzamos a buscar no sólo en el Post Meta API, sino también las otras API. Así que mantén esta mente. También me referiré a este artículo en artículos futuros.

Vamos a cavar en la API.

Una nota muy importante

La forma en que vamos a incorporar el código no es la forma profesional de realizar cambios en el tema, implementar esta funcionalidad o interactuar con una API. Estamos haciendo esto para los primeros pasos de un principiante en el desarrollo de WordPress.

En una serie de seguimiento, vamos a tomar el trabajo que hemos hecho en esta serie y extraerlo en un complemento más fácil de mantener que también incluye un mayor enfoque en la capacidad de mantenimiento, seguridad y mucho más.

Por ahora, nos estamos enfocando en los aspectos básicos de la API.

Preparando el Tema

Recuerde que estoy usando una instalación básica de WordPress junto con el tema twentysixteen para las demostraciones que vamos a ver a lo largo de este tutorial y el resto de los tutoriales de la serie.

En segundo lugar, vamos a hacer cambios en functions.php. Esto no suele ser el mejor lugar para hacer este cambio; Sin embargo, asegúrese de haber leído la nota anterior antes de continuar.

Dicho esto, supongamos que tiene su servidor en ejecución, su IDE y listo, y functions.php en su editor. Aunque su captura de pantalla puede parecer un poco diferente, debería parecerse a esto:

functionsphpfunctionsphpfunctionsphp

El reto de trabajar con functions.php es que ya está lleno de código que ayuda a potenciar el tema existente. Aunque en última instancia, moveremos nuestro código a un complemento en una futura serie, por lo menos tomemos el primer paso para crear nuestro archivo para que podamos autocontenerse nuestro código.

Uso de su IDE de elección:

  1. Cree un archivo nuevo en el directorio raíz del tema twentysixteen.
  2. Nombre el archivo tutsplus-metadata.php.

Una vez hecho esto, deberías tener algo así en tu sistema de archivos:

tutsplus-metadataphptutsplus-metadataphptutsplus-metadataphp

Finalmente, debemos asegurarnos de incluir esto en functions.php. Para ello, agregue la siguiente línea de código justo debajo de la etiqueta PHP de apertura.

Vuelve a cargar tu navegador. Si todo va bien, deberías ver el tema exactamente como antes de agregar tu archivo a functions.php.

Ahora, vamos a trabajar.

Empezando

Recordemos nuestra discusión anterior que necesitamos tres cosas para agregar metadatos a la base de datos:

  1. Una identificación postal
  2. Una clave única con la que podemos identificar los metadatos
  3. Un valor con el que vamos a almacenar que queremos recuperar más tarde

Para este tutorial, todo lo que nos interesa hacer es agregar metadatos que aparecerán en el valor predeterminado Hello World. Post que viene de serie en cada instalación de WordPress.

Digamos que queremos agregar algunos metadatos que incluyan nuestro nombre. Así que la meta clave que vamos a utilizar es my_name y el valor que vamos a utilizar es lo que su nombre es. En mi caso, es "Tom McFarlin".

Lo primero que queremos hacer es definir una función que se engancha en el contenido the_content. Esto nos permitirá publicar nuestro texto cuando se ejecute la función. Si no está familiarizado con los ganchos, lea esta serie.

Su código inicial debe tener este aspecto:

Al ejecutar este código, la cadena "[We are here.]" Debe aparecer por encima del contenido de la publicación antes de cualquier otra cosa, y sólo debería suceder en el Hello World!. Esto se debe a que estamos comprobando para asegurarnos de que el ID es 1 antes de echo la cadena.

Tenga en cuenta que la versión final del código compartido al final de esta publicación se completará con comentarios. Hasta entonces, estaré explicando qué está haciendo el código al agregar cada pieza nueva a nuestro código.

Adición de metadatos

Ahora vamos a añadir algunos metadatos reales. Para ello, agregue este código en el cuerpo del condicional para estar seguro de que lo estamos haciendo para Hello World. Puesto que ya estamos comprobando el ID de 1 en el condicional, entonces podemos simplemente eliminar el código que agregamos en la sección anterior y actualizarlo.

Dentro del cuerpo del condicional, haremos una llamada a la función API add_post_meta que se ve así:

Sería bueno si pudiéramos hacer algo con esta información. Antes de hacer eso, sin embargo, hay más información que necesitamos cubrir. Es decir, acerca de la actualización de los metadatos (y de cómo difiere de la adición de metadatos), junto con algunos matices que no puede esperar al tratar con la API.

Actualización de metadatos

Hay una sutil diferencia entre agregar metadatos y actualizar metadatos. ¿Sabes cómo una clave identifica un valor que está asociado con él? Bueno, eso es parcialmente exacto.

Cuando llama a add_post_meta, está creando una entrada cada vez que realiza la llamada. Así que en nuestro código anterior, si actualizas la página tres veces, entonces vas a ver algo como esto:

addpostmetaaddpostmetaaddpostmeta

Curioso, ¿verdad? Recordemos lo que el Codex dice:

     Tenga en cuenta que si la clave dada ya existe entre los campos personalizados de la publicación especificada, se agrega otro campo personalizado con la misma clave, a menos que el argumento $unique se establezca en true, en cuyo caso no se realizarán cambios.

Ah, hay un parámetro opcional que acepta la función. Es un booleano llamado $unique, y nos permite pasar true si sólo queremos asegurarnos de que el valor agregado es único.

Es posible que desee eliminar sus registros existentes en este momento. Si no, está bien—sólo usa un valor diferente para la clave my_name.

Esto significa que podríamos actualizar nuestro código para que parezca lo siguiente:

Ahora solo estás creando una sola entrada. Además, si intenta cambiar el valor de esa clave en el código, entonces no se sobrescribirá en la base de datos. Una vez que la escritura de los metadatos del post se ha completado, se almacena como era la primera vez.

Pero no tiene por qué ser así, y ahí es donde update_post_meta entra en juego. De hecho, update_post_meta se podría utilizar más que add_post_meta, dependiendo de su caso de uso.

Antes de echar un vistazo al código, echa un vistazo a lo que el Codex tiene que decir:

La función update_post_meta() actualiza el valor de una meta clave existente (campo personalizado) para la publicación especificada.
Esto se puede utilizar en lugar de la función add_post_meta(). Lo primero que hará esta función es asegurarse de que $ meta_key ya existe en $post_id. Si no lo hace, add_post_meta ($post_id, $meta_key, $meta_value) se llama en su lugar y su resultado se devuelve.

¿Lo captaste? Se puede "utilizar en lugar de add_post_meta", que es útil porque esto significa:

  1. Si los metadatos de post ya existen para una clave determinada,   
  2. Si utiliza update_post_meta,
  3. Sobreescribirá el valor anterior.

En este punto, puede que desee eliminar la información que tiene en su base de datos, o crear un nuevo par de claves y valores. Esto significa que podemos actualizar nuestro código para que parezca lo siguiente:

Esto trae consigo algunos peligros inherentes.

Es decir, si sobrescribes un valor que nunca pretendías sobrescribir, ese valor desaparecerá y no podrá recuperarse (a menos que realices trabajos más sofisticados fuera del alcance de esta serie).

Sin embargo, hay un argumento final opcional para update_post_meta, y ese es el argumento $prev_value. Es decir, puede especificar qué valor desea sobrescribir.

Tome, por ejemplo, el caso en el que tiene varios registros con la misma clave creada con add_post_meta y desea actualizar sólo uno de esos registros. Para actualizar esos datos, pasaría el valor correspondiente a ese registro.

¿Cual es la diferencia?

La diferencia entre add_post_meta y update_post_meta puede considerarse sutil, pero depende de su caso de uso.

Trataré de descifrarlos lo más sencillamente posible aquí porque, aunque pueda parecer complicado dados los ejemplos que hemos visto anteriormente, es más sencillo cuando lo exponen todo.

  • add_post_meta es útil cuando se desea introducir un registro en la base de datos. Si el valor ya existe, entonces el nuevo valor puede o no ser escrito. Si pasa true por el parámetro $unique de la función, entonces sólo se creará el primer registro y nada lo reemplazará excepto update_post_meta.
  • update_post_meta se puede utilizar en lugar de add_post_meta y siempre sobrescribirá el valor anterior que existía. Si está trabajando con varios registros creados por add_post_meta, es posible que deba especificar un valor anterior que desee sobrescribir.

Y eso es todo. Por supuesto, todavía tenemos que tratar de recuperar los registros de la base de datos y mostrarlos en la pantalla.

Obtencion de metadatos

Cuando se trata de obtener metadatos de post, hay dos cosas principales que debe recordar:

  1. Los metadatos se pueden obtener como una cadena.
  2. Los metadatos se pueden recuperar como una matriz.

A veces depende de cómo almacenaste la información original; Otras veces se basa en cómo desea trabajar con él.

Antes de examinar las diversas formas en que podemos recuperar la información, veamos primero la llamada básica de la API para hacerlo. En concreto, estoy hablando de get_post_meta. Si has estado siguiendo a lo largo hasta ahora, entonces la comprensión de la API debe ser relativamente fácil.

La función acepta tres parámetros:

  1. El ID de la publicación
  2. La clave de metadatos
  3. Un valor booleano opcional para si desea recuperar el valor como una cadena o como una matriz (donde una matriz es el valor predeterminado si no se especifica nada)

Del Codex:

Recuperar el campo meta de una publicación. Será una matriz si $single es falso. Será el valor del campo de metadatos si $single es true.

Parece bastante fácil. Así que dado que el último bit de nuestro código fuente se encuentra ahora mismo, yo diría que podemos recuperar la información haciendo una llamada como get_post_meta( get_the_ID(), 'my_name' );.

El código, tal como está arriba, devolverá una matriz.

Valores Múltiples

Siempre que escuche la frase "varios valores", puede ser útil pensar en una matriz o algún tipo de recolección de datos en el lenguaje de programación que está utilizando.

En nuestros ejemplos, piense cuando almacenamos la misma clave varias veces usando add_post_meta. Como un refresco, aquí estaba lo que parecía la base de datos:

addpostmeta view of databaseaddpostmeta view of databaseaddpostmeta view of database

Si tuviera que recuperar la información por su clave, ¿qué recibiría? : Como no especificaba que quería una cadena, volvería una matriz de todos los registros. Esto me permitiría iterar a través de cada uno de ellos.

Si, por otro lado, yo fuera a especificar verdadero para querer volver una cadena, entonces sólo obtendría la primera fila que se creó usando add_post_meta.

Para ello, si está buscando recuperar varios valores para una determinada clave, su código se vería así

Tenga en cuenta que estoy usando var_dump para que sea más fácil ver qué información está regresando de WordPress dentro del navegador; Sin embargo, soy más fanático de usar un depurador, que es algo que podemos discutir en un post futuro.

Valores Únicos

Ahora digamos que desea obtener valores individuales almacenados para una publicación. En este caso, todavía necesita el ID de publicación y la clave de metadatos; Sin embargo, también necesitará proporcionar true como el tercer parámetro para get_post_meta.

Como se mencionó anteriormente, si se trata de una situación en la que se han creado varias filas con add_post_meta, se recuperará la primera fila que se creó; Sin embargo, si está utilizando esta función junto con update_post_meta, obtendrá un valor de cadena de los datos almacenados.

Dado que hemos cubierto la primera, pero no hemos cubierto esta última, aquí está el aspecto del código:

Y luego obtendrá el valor que guardó como valor meta al realizar una llamada a la función. Es bastante simple en comparación con tener que trabajar con un conjunto de registros y matrices que pueden o no pueden contener información similar.

Eliminación de metadatos

El último bit de trabajo con metadatos de post tiene todo que ver con ser capaz de eliminarlo. Es fácil, pero sólo hay algunos matices que necesitamos entender para asegurarnos de que lo estamos haciendo de manera efectiva.

Pero primero, aquí está la definición del Codex:

Esta función elimina todos los campos personalizados con la clave especificada o la clave y el valor de la publicación especificada.

Corto, dulce y al punto. La función acepta tres argumentos:

  1. El ID de la publicación
  2. La meta clave
  3. El meta valor

El valor meta es opcional, pero es útil si ha estado trabajando con add_post_meta y desea eliminar una de las entradas específicas creadas por múltiples llamadas a esa función (como hemos visto en otras partes a lo largo de este tutorial).

Aunque realizar una llamada a delete_post_meta es tan simple como pasar un ID de publicación, la meta key y el valor meta opcional, la función devuelve un valor booleano que indica si los datos se han eliminado o no.

El código de ejemplo para eliminar algunos de los metadatos de publicación que hemos estado viendo hasta ahora podría tener este aspecto:

Sin embargo, su implementación puede variar. Si está trabajando con varias piezas de metadatos y si desea verificar que se ha eliminado correctamente, puede envolver el código en un estado condicional.

Un ejemplo final de código

A continuación encontrará un fragmento de código largo y documentado que debería representar la mayoría de lo que hemos hablado en este tutorial. Tenga en cuenta que las funciones se enganchan en el contenido the_content.

Esto es sólo para fines de demostración para que pueda activar fácilmente el disparo de estas funciones cada vez que carga una página en particular.

Normalmente, encontrará funciones de metadatos asociadas con otros ganchos como save_post y operaciones similares, pero este es un tema para trabajos más avanzados. Tal vez cubriremos eso en otra serie a finales de este año.

Conclusión

Cada una de las funciones de la API está disponible en el WordPress Codex, por lo que si desea saltar adelante y hacer un poco más de lectura antes del próximo artículo de la serie, entonces no dude en hacerlo.

Como se mencionó anteriormente, esta es una introducción a la Meta Meta API de WordPress. A través de la información proporcionada en el Codex, en este tutorial, y en el código fuente proporcionado, deberías poder comenzar a escribir contenido adicional en la base de datos relacionada con cada una de tus publicaciones.

Recuerde, sin embargo, esto es para propósitos de demostración ya que tenemos más información que cubrir. Específicamente, necesitamos examinar la sanitización de datos y la validación de datos. Aunque tenemos temas adicionales que abordar primero (como metadatos de usuario, metadatos de comentario, etc.), pasaremos a temas más avanzados pronto.

En última instancia, estamos tratando de sentar las bases para que los futuros desarrolladores de WordPress construyan desde cuando avancen y trabajen en soluciones para otros, para sus agencias o incluso para sus proyectos.

Dicho esto, estoy deseando continuar con esta serie. Recuerde que si está empezando, puede consultar mi serie sobre cómo empezar con WordPress, que se centra en temas específicamente para principiantes de WordPress.

Mientras tanto, si usted está buscando otras utilidades para ayudarle a construir su creciente conjunto de herramientas para WordPress o para el código para estudiar y ser más versado en WordPress, no se olvide de ver lo que tenemos disponible en Envato Market.

Recuerda, puedes coger todos mis cursos y tutoriales en mi página de perfil, y puedes seguirme en mi blog y / o Twitter en @tommcfarlin donde hablo de varias prácticas de desarrollo de software y cómo podemos emplearlas en WordPress.

Por favor, no dude en dejar cualquier pregunta o comentario en el feed de abajo, y trataré de responder a cada uno de ellos.

Recursos

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.