1. Code
  2. Coding Fundamentals
  3. Rest API

Cómo trabajar con WordPress Metadata de Comentarios

A lo largo de esta serie, hemos mirado en un número de los metadatos de las APIs que ofrece WordPress. Esto incluye la API Post Meta y la Meta API del usuario. Hoy vamos a completar la serie mirando el API de comentarios de WordPress.
Scroll to top
This post is part of a series called 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)

A lo largo de esta serie, hemos mirado en un número de los metadatos de las APIs que ofrece WordPress. Esto incluye la API Post Meta y la Meta API del usuario. Hoy vamos a completar la serie mirando el API de comentarios de WordPress.

Tenga en cuenta que esto es lo que ofrece la API de metadatos final WordPress. A partir de WordPress 4.4, ahora hay una API de metadatos a término. Para comprenderlo completamente, es importante comprender taxonomías, términos y sus relaciones dentro del contexto de WordPress. En una próxima serie, cubriré exactamente eso.

Pero hoy vamos a centrarnos en administrar los metadatos asociados a los comentarios. Si no ha leído nada más en esta serie hasta este momento, le recomiendo que revise lo que hemos cubierto hasta ahora.

Si todos están atrapados, entonces comencemos.

El WordPress Comment Meta API

A lo largo de esta serie, hemos utilizado la definición de metadatos de WordPress como nuestra base para comprender cómo se representa esta información en el contexto de nuestro entorno.

Específicamente, hemos dicho:

Los metadatos 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 en cada publicación individual con la que está asociada la información.

Para mantener la coherencia con el resto del contenido que hemos visto a lo largo de esta serie, esta definición se aplica a los metadatos de comentarios, al igual que con los metadatos posteriores y los metadatos del usuario.

Lo bueno de esto es que una vez que haya manejado las distintas API de metadatos que hemos cubierto, no debería sorprendernos mucho cómo funciona la funcionalidad de otros metadatos. Puede haber algunas cosas diferentes dependiendo de qué API esté usando, pero la esencia de la funcionalidad será la misma.

Y, como verá, este sigue siendo el caso con la API de metadatos de comentarios.

Trabajando con la API de metadatos de comentarios

Al igual que con las otras API que hemos examinado a lo largo de esta serie, hay cuatro funciones principales que vamos a explorar:

  • add_comment_meta
  • update_comment_meta
  • get_comment_meta
  • delete_comment_meta

Por ahora, es probable que sepa qué esperar cuando se trata de, digamos, las diferencias entre agregar metadatos de comentarios y actualizar metadatos de comentarios. O, por ejemplo, trabajando con eliminar metadatos de comentarios.

Eso no cambia el hecho de que vale la pena explorar cada una de estas funciones de API en detalle para asegurarse de que hemos cubierto todo lo que hay que saber al trabajar con ellas.

Para el resto de este artículo, asumo lo siguiente:

  • Está ejecutando un entorno de desarrollo local con un servidor web, servidor de base de datos y PHP.
  • Tienes una copia de WordPress instalada.
  • Tienes una copia de tutsplus-metadata.php configurada en el directorio de tu tema, y está incluida en el archivo functions.php de tu tema.
  • Usted tiene su interfaz de usuario IDE y base de datos de elección disponible.

Como he usado en los artículos anteriores, estoy usando las siguientes aplicaciones:

Finalmente, todos los metadatos con los que trabajaremos se almacenan en la tabla de base de datos wp_commentmeta, por lo que todas las capturas de pantalla que vea de la base de datos serán de esa tabla en particular.

An empty comment metadata tableAn empty comment metadata tableAn empty comment metadata table

A diferencia de otras tablas de metadatos que hemos visto, la tabla wp_commentmeta comienza vacía (suponiendo que esté trabajando con una versión relativamente nueva de WordPress).

Esto es bueno, ya que nos dará una especie de borrón y cuenta nueva para usar al examinar las diversas funciones de la API. Tenga en cuenta que para todos los ejemplos a continuación, nos aseguraremos de que todo esto suceda en la publicacion Hello World!. Esta publicación tiene la ID de 1. Si desea utilizar otra página, simplemente reemplace 1 con la ID de la publicación en cuestión.

Con todo eso en su lugar, comencemos a ver lo que está disponible.

Agregar comentario Meta

Para comenzar a agregar metadatos a nuestros comentarios, es importante echar un vistazo a la tabla wp_comments para ver qué comentarios ya existen. Si está trabajando con una nueva instalación de WordPress, entonces probablemente verá un solo registro:

A single default WordPress commentA single default WordPress commentA single default WordPress comment

Este es el comentario predeterminado que se envía con WordPress, y servirá para los ejemplos que usaremos.

Si, por otro lado, está trabajando con una base de datos llena de comentarios, ¡no hay problema! Todo lo que necesita saber es con qué comentario está trabajando (a través de su ID), y asegúrese de que sea coherente con el código que usamos a continuación.

Al igual que con otras API que hemos revisado en esta serie, agregar metadatos a los comentarios se presenta en dos formas: única y no única. Vamos a revisar ambos.

Agregar metadatos únicos

La función add_comment_meta acepta tres parámetros y un cuarto parámetro opcional. Si pasa true como el cuarto parámetro, los metadatos solo se agregarán si la meta clave especificada no existe.

¿Tener sentido? Vamos a ver. Primero, configuraremos una función que agregará algunos metadatos asociados con el primer comentario (pero solo lo hará en la publicación que tenga el ID de 1):

1
<?php
2
3
add_filter( 'the_content', 'tutsplus_add_unique_comment_meta' );
4
function tutsplus_add_unique_comment_meta( $content ) {
5
6
    if ( 1 === get_the_ID() ) {
7
  	add_comment_meta( 1, 'twitter_handle', 'tommcfarlin', true );
8
	}
9
10
	return $content;
11
12
}

Tenga en cuenta que he pasado el parámetro verdadero. Así que cada vez que actualizo la página, WordPress verá que quiero que este valor sea único para que no agregue más información a la tabla de la base de datos asociada con esa clave meta.

Agregar metadatos no únicos

Si, por otro lado, quiero asociar varios valores con la misma clave meta, eliminaría el parámetro verdadero. Por ejemplo, use el siguiente código:

1
<?php
2
3
add_filter( 'the_content', 'tutsplus_add_comment_meta' );
4
function tutsplus_add_comment_meta( $content ) {
5
6
    if ( 1 === get_the_ID() ) {
7
		add_comment_meta( 1, 'random_value', rand() );
8
	}
9
10
	return $content;
11
12
}

Y luego actualiza la página, por ejemplo, tres veces. Si todo va según lo esperado, puede ver tres registros nuevos, cada uno de los cuales contiene un número aleatorio generado por la llamada a rand() en el argumento del valor meta.

Multiple values with the same meta keyMultiple values with the same meta keyMultiple values with the same meta key

Es bastante fácil mantenerse derecho, ¿verdad? Si desea un valor único asociado con una sola clave, pase "true" como el cuarto argumento opcional; de lo contrario, no especifique nada.

Actualizando el comentario Meta

Si desea actualizar los metadatos de comentarios existentes, entonces es importante conocer el ID del comentario, la clave meta y el valor meta. Esto significa que WordPress mirará la clave meta especificada y la asociará con el valor meta especificado.

1
<?php
2
3
add_filter( 'the_content', 'tutsplus_update_comment_meta' );
4
function tutsplus_update_comment_meta( $content ) {
5
6
    if ( 1 === get_the_ID() ) {
7
		update_comment_meta( 1, 'unique_value', time() );
8
	}
9
10
	return $content;
11
12
}

Si el metavalor existe, entonces se sobrescribirá. Si el valor meta no existe, entonces se creará. Observe en la última oración que hay un poco de funcionalidad que puede usar al agregar metadatos: si desea tener una información única escrita en la tabla de metadatos, puede usar update_comment_meta y la escribirá como un valor único.

Esto puede dar como resultado un código poco confuso (ya que se lee como si estuviera actualizando algo que no existe), pero también le permite exigir que solo exista un solo registro para la meta clave dada.

¿Qué sucede cuando hay una metakey asociada con varios valores meta? En ese caso, necesita saber el valor que está buscando reemplazar. En algunos casos, puede saber exactamente qué es esto. En otros casos, es posible que deba recuperar la información para encontrarla (que trataremos en la próxima sección).

Suponiendo que queremos actualizar uno de los registros que hemos creado, como uno de los números aleatorios que vimos en el ejemplo anterior, podemos buscarlo usando el front-end de la base de datos:

An updated random value related to multiple keysAn updated random value related to multiple keysAn updated random value related to multiple keys

Y especifíquelo como el valor anterior en el siguiente código:

1
<?php
2
3
add_filter( 'the_content', 'tutsplus_update_specific_meta' );
4
function tutsplus_update_specific_meta( $content ) {
5
6
    if ( 1 === get_the_ID() ) {
7
		update_comment_meta( 1, 'unique_value', time(), '17123683' );
8
	}
9
10
	return $content;
11
12
}

Después de eso, podemos actualizar la página, echar un vistazo a nuestra base de datos y ver el cambio. Tenga en cuenta que el trabajo que acabamos de hacer es relevante para un entorno de desarrollo y no es la forma en la que debería trabajar en la producción.

En su lugar, puede necesitar ejecutar una consulta o recuperar un conjunto de valores antes de actualizarlos. Esto nos lleva al siguiente tema.

Recuperando el comentario Meta

Siempre que esté recuperando metadatos de comentarios, debe decidir si desea recuperar un solo valor o todos los valores asociados con la meta clave especificada.

Quizás otra forma de ver esto es la siguiente: si se han agregado varias piezas de metadatos con la misma clave meta (que cubrimos en la sección Agregar metadatos únicos más arriba), entonces es probable que desee recuperar toda la colección de registros.

Si, por el contrario, solo desea recuperar un registro porque sabe que es único o porque se creó con la función update_comment_meta, quiere que WordPress se lo devuelva en un solo valor.

La función get_comment_meta requiere tres argumentos y un cuarto opcional dependiendo de lo que desee recuperar.

Recuperando una matriz

Digamos que está buscando recuperar una colección de todos los valores asociados con una sola clave meta. Para hacer esto, haría una llamada a get_comment_meta y especificaría el ID del comentario y la clave meta.

1
<?php
2
3
add_filter( 'the_content', 'tutsplus_get_comment_meta' );
4
function tutsplus_get_comment_meta( $content ) {
5
6
    if ( 1 === get_the_ID() ) {
7
8
		$arr_metadata = get_comment_meta( 1, 'unique_value', true );
9
		var_dump( $arr_metadata );
10
11
	}
12
13
	return $content;
14
15
}

En el código anterior, lo estamos imprimiendo en el navegador web, pero podría trabajar con estos datos de la forma que desee una vez que lo haya recuperado. Sin embargo, lo más importante que hay que notar es que el valor se devuelve como una matriz.

Recuperando un valor único

Si desea recuperar un solo valor, solo necesita especificar el ID del comentario y la clave meta en la función get_comment_meta. Si está tratando con una clave meta con múltiples valores, entonces el primer valor que se creó es lo que se devolverá.

Por ejemplo, supongamos que hay tres registros asociados con una meta clave, y solo desea recuperar un valor. Tu código se verá así:

1
<?php
2
3
add_filter( 'the_content', 'tutsplus_get_one_comment_meta' );
4
function tutsplus_get_one_comment_meta( $content ) {
5
6
    if ( 1 === get_the_ID() ) {
7
8
		$arr_metadata = get_comment_meta( 1, 'random_value', true );
9
		var_dump( $arr_metadata );
10
11
	}
12
13
	return $content;
14
15
}

Y el valor resultante se verá algo así:

1
string(9) "967432645"

Alternativamente, si sabe que los datos son únicos, el código seguirá siendo el mismo, al igual que el valor devuelto.

La única diferencia es que el primer ejemplo se obtuvo de un conjunto de registros múltiples, y el segundo ejemplo se recuperó de un solo registro. También tenga en cuenta que si se trata de un valor único, se le devolverá como una matriz, pero una única matriz de índice.

Esto es importante tener en cuenta porque si planeas hacer cualquier tipo de comparación, especialmente a un valor de un tipo diferente, como un entero, entonces necesitarás tomar el valor de la matriz, y es probable que desees hacer un tipo conversión antes de hacer una comparación.

Eliminando el Meta del comentario

Eliminar metadatos es una operación sencilla: requiere el ID del comentario, una clave meta y un metavalor opcional.

Si no especifica el valor meta, se eliminarán todos los registros asociados con la clave meta. Sin embargo, si especifica el valor meta, solo se eliminará ese único registro.

Eliminando valores únicos

A los fines de este ejemplo, supongamos que sabemos que existe una sola pieza de metadatos para una meta clave dada. Esto significa que la clave meta debe ser única para cada usuario, por lo que quizás use algo así como una identificación generada de manera única, una marca de tiempo o algo similar.

Para eliminar un valor único, simplemente pasamos el ID del comentario y la clave meta:

1
<?php
2
3
add_filter( 'the_content', 'tutsplus_remove_unique_comment_meta' );
4
function tutsplus_remove_unique_comment_meta( $content ) {
5
6
    	if ( 1 === get_the_ID() ) {
7
			delete_comment_meta( 1, 'unique_value' );
8
		}
9
10
		return $content;
11
12
}

Antes de ejecutar este código, la base de datos debe tener un aspecto similar a este:

Metadata in the comment metadata tableMetadata in the comment metadata tableMetadata in the comment metadata table

Después de actualizar la página, eche un vistazo a la base de datos y verá que el registro se ha eliminado y la base de datos debería tener este aspecto:

A unique value having been removedA unique value having been removedA unique value having been removed

Hablaremos un poco más sobre las precauciones que deben tomarse al eliminar datos en la siguiente sección.

Eliminar valores no únicos

En otras situaciones, digamos que hay múltiples valores asociados con una sola clave meta. Lo hemos visto muchas veces a lo largo de este artículo. Si desea eliminar todos los registros asociados con una clave meta, entonces no necesita especificar un valor meta.

Es decir, si solo pasa una ID de comentario y una clave meta a la función delete_comment_meta, eliminará todos los fragmentos de metadatos de comentarios. Escribe y ejecuta el siguiente código:

1
<?php
2
3
add_filter( 'the_content', 'tutsplus_remove_comment_metadata' );
4
function tutsplus_remove_comment_metadata( $content ) {
5
6
    if ( 1 === get_the_ID() ) {
7
		delete_comment_meta( 1, 'random_value' );
8
	}
9
10
	return $content;
11
12
}

Actualiza tu página y luego revisa la base de datos. Si no hubo problemas, su base de datos debe estar libre de todos los registros anteriores que tenían esa clave meta:

No random values in the comment metadata tableNo random values in the comment metadata tableNo random values in the comment metadata table

Pero recuerde que eliminar datos de una base de datos puede ser peligroso, especialmente si elimina accidentalmente algo que nunca quiso eliminar. Para ello, es importante mantener copias de seguridad de su base de datos en entornos de producción para que siempre pueda restaurarla si algo sale mal.

Además, esto demuestra por qué es tan importante tener un entorno de desarrollo local y un entorno de ensayo para probar antes de implementar el código en un entorno de producción.

El código fuente completo

Como se proporciona a lo largo de toda esta serie, aquí hay una copia de todo el código fuente que hemos cubierto en este artículo. Está completamente documentado e incluye comentarios que no se muestran en algunas de las secciones anteriores.

1
<?php
2
/**

3
 * This file shows how to work with the common Comment Meta API functions.

4
 *

5
 * Namely, it demonstrates how to use:

6
 * - add_comment_meta

7
 * - update_comment_meta

8
 * - get_comment_meta

9
 * - delete_comment_meta

10
 *

11
 * Each function is hooked to 'the_content' so that line will need to be

12
 * commented out depending on which action you really want to test.

13
 *

14
 * Also note, from the tutorial linked below, that this file is used form

15
 * demonstration purposes only and should not be used in a production

16
 * environment.

17
 *

18
 * Tutorial:

19
 * https://code.tutsplus.com/wie-man-mit-metadaten-von-wordpress-post-arbeitet--cms-25715t

20
 *

21
 * @version    	1.0.0

22
 * @author		Tom McFarlin

23
 * @package		tutsplus_wp_metadata

24
 */
25
26
/* add_filter( 'the_content', 'tutsplus_add_unique_comment_meta' ); */
27
/**

28
 * Adds a unique meta key and meta value for a user's Twitter handle

29
 * to the comment metadata table associated with the comment having

30
 * the ID of 1.

31
 *

32
 * @param  string $content The content of the post.

33
 * @return string $content THe content of the post.

34
 */
35
function tutsplus_add_unique_comment_meta( $content ) {
36
37
	if ( 1 === get_the_ID() ) {
38
		add_comment_meta( 1, 'twitter_handle', 'tommcfarlin', true );
39
	}
40
41
	return $content;
42
43
}
44
45
/* add_filter( 'the_content', 'tutsplus_add_comment_meta' ); */
46
/**

47
 * Adds a unique meta key and random meta value

48
 * to the comment metadata table associated with the comment having

49
 * the ID of 1.

50
 *

51
 * @param  string $content The content of the post.

52
 * @return string $content THe content of the post.

53
 */
54
function tutsplus_add_comment_meta( $content ) {
55
56
	if ( 1 === get_the_ID() ) {
57
		add_comment_meta( 1, 'random_value', rand() );
58
	}
59
60
	return $content;
61
62
}
63
64
/* add_filter( 'the_content', 'tutsplus_update_comment_meta' ); */
65
/**

66
 * Updates unique meta key and unique meta value for

67
 * to the comment metadata table associated with the comment having

68
 * the ID of 1.

69
 *

70
 * @param  string $content The content of the post.

71
 * @return string $content THe content of the post.

72
 */
73
function tutsplus_update_comment_meta( $content ) {
74
75
	if ( 1 === get_the_ID() ) {
76
		update_comment_meta( 1, 'unique_value', time() );
77
	}
78
79
	return $content;
80
81
}
82
83
/* add_filter( 'the_content', 'tutsplus_update_specific_meta' ); */
84
/**

85
 * Updates a unique meta key and random meta value with a specified value

86
 * to the comment metadata table associated with the comment having

87
 * the ID of 1.

88
 *

89
 * @param  string $content The content of the post.

90
 * @return string $content THe content of the post.

91
 */
92
function tutsplus_update_specific_meta( $content ) {
93
94
	if ( 1 === get_the_ID() ) {
95
		update_comment_meta( 1, 'random_value', time(), '17123683' );
96
	}
97
98
	return $content;
99
100
}
101
102
/* add_filter( 'the_content', 'tutsplus_get_comment_meta' ); */
103
/**

104
 * Gets an array of the comment metadata associated with the meta key

105
 * in the comment metadata table associated with the comment having

106
 * the ID of 1.

107
 *

108
 * @param  string $content The content of the post.

109
 * @return string $content THe content of the post.

110
 */
111
function tutsplus_get_comment_meta( $content ) {
112
113
	if ( 1 === get_the_ID() ) {
114
115
		$arr_metadata = get_comment_meta( 1, 'unique_value' );
116
		var_dump( $arr_metadata );
117
118
	}
119
120
	return $content;
121
122
}
123
124
/* add_filter( 'the_content', 'tutsplus_get_all_comment_meta' ); */
125
/**

126
 * Gets an array of all the meta values associated with the specified meta key

127
 * in the comment metadata table associated with the comment having

128
 * the ID of 1.

129
 *

130
 * @param  string $content The content of the post.

131
 * @return string $content THe content of the post.

132
 */
133
function tutsplus_get_all_comment_meta( $content ) {
134
135
	if ( 1 === get_the_ID() ) {
136
137
		$arr_metadata = get_comment_meta( 1, 'random_value' );
138
		var_dump( $arr_metadata );
139
140
	}
141
142
	return $content;
143
144
}
145
146
/* add_filter( 'the_content', 'tutsplus_get_one_comment_meta' ); */
147
/**

148
 * Gets a single value from a set of values associated with a meta key

149
 * in the comment metadata table associated with the comment having

150
 * the ID of 1.

151
 *

152
 * @param  string $content The content of the post.

153
 * @return string $content THe content of the post.

154
 */
155
function tutsplus_get_one_comment_meta( $content ) {
156
157
	if ( 1 === get_the_ID() ) {
158
159
		$arr_metadata = get_comment_meta( 1, 'random_value', true );
160
		var_dump( $arr_metadata );
161
162
	}
163
164
	return $content;
165
166
}
167
168
/* add_filter( 'the_content', 'tutsplus_remove_unique_comment_meta' ); */
169
/**

170
 * Removes a unique meta value associated with the specified key

171
 * to the comment metadata table associated with the comment having

172
 * the ID of 1.

173
 *

174
 * @param  string $content The content of the post.

175
 * @return string $content THe content of the post.

176
 */
177
function tutsplus_remove_unique_comment_meta( $content ) {
178
179
	if ( 1 === get_the_ID() ) {
180
		delete_comment_meta( 1, 'unique_value' );
181
	}
182
183
	return $content;
184
185
}
186
187
/* add_filter( 'the_content', 'tutsplus_remove_comment_metadata' ); */
188
/**

189
 * Removes all meta values associated with the specified key

190
 * to the comment metadata table associated with the comment having

191
 * the ID of 1.

192
 *

193
 * @param  string $content The content of the post.

194
 * @return string $content THe content of the post.

195
 */
196
function tutsplus_remove_comment_metadata( $content ) {
197
198
	if ( 1 === get_the_ID() ) {
199
		delete_comment_meta( 1, 'random_value' );
200
	}
201
202
	return $content;
203
204
}

Tenga en cuenta que si incluye esto con el código del resto de los artículos de la serie, deberá tener cuidado. Como todo está registrado con el mismo gancho, puede terminar con resultados extraños.

Para combatir esto, recomiendo uno de los siguientes dos escenarios:

  1. Cree tres archivos separados: uno para cada uno de los tipos de API de metadatos que hemos examinado.
  2. Comente las llamadas add_filter, a excepción de aquellas con las que está trabajando actualmente.

Cualquiera de estos hará que sea más fácil trabajar con todo el código que hemos cubierto hasta ahora.

Conclusión

Ya sea que esté trabajando con una API de metadatos o una de las otras API, cada desarrollador de WordPress siempre debe tener acceso rápido al Codex de WordPress para investigar rápidamente qué API están disponibles y cómo deben usarse.

A medida que hemos trabajado en esta serie, debería ver cómo la API diseñada en torno a los metadatos es consistente. Esto lo convierte en una poderosa y fácil de usar API para ampliar parte de la funcionalidad principal de WordPress.

Además, mencioné que hay otra API de metadatos que se introdujo en WordPress 4.4. Planeo cubrir eso en una próxima serie, pero requerirá un examen de algunas de las otras funcionalidades basadas en él.

Por ahora, hemos cubierto mucho material para ayudarlo a subir de nivel sus habilidades de WordPress existentes. Hasta el próximo artículo, recuerde que todos mis cursos y tutoriales están disponibles en mi página de perfil, y puede leer más artículos sobre desarrollo de WordPress y WordPress en mi blog.

WordPress tiene una economía activa. Existen temas, complementos, bibliotecas y muchos otros productos que lo ayudan a construir su sitio y proyecto. La naturaleza de código abierto de la plataforma también la convierte en una excelente opción desde la que puede mejorar sus habilidades de programación. Cualquiera que sea el caso, puede ver todo lo que tenemos disponible en Envato Marketplace.

Siéntase libre de seguirme en Twitter también en @tommcfarlin, donde hablo sobre varias prácticas de desarrollo de software, muchas de las cuales son relevantes para el desarrollo web y muchas de las cuales están específicamente orientadas a WordPress.

Al igual que con todos mis artículos, no dude en dejar cualquier pregunta o comentario en el feed a continuación, y trataré de responder a cada uno de ellos.

Recursos