Cómo trabajar con WordPress Metadata de Comentarios
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_metaupdate_comment_metaget_comment_metadelete_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.phpconfigurada en el directorio de tu tema, y está incluida en el archivofunctions.phpde 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.



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:



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.



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:



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:



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:



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:



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:
- Cree tres archivos separados: uno para cada uno de los tipos de API de metadatos que hemos examinado.
- 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.



