En un artículo anterior vimos cómo añadir campos personalizados en productos de WooCommerce, sin embargo no detallamos cómo agregar para estos campos adicionales los datos estructurados o microdatos, en este artículo veremos cómo realizar esto.
Generalidades
Usaremos el plugin Advanced Custom Fields para agregar el campo personalizado adicional para el producto, agregaremos un campo llamado Marca. En la siguiente imagen vemos como se ha creado el campo de marca.

Agregando valores para la marca
Al ingresar al detalle de un producto verás que aparece un campo adicional de marca, tal como se muestra en la siguiente imagen.

Microdatos por defecto para un Producto
WooCommerce crea microdatos usando Json, para nuestro ejemplo definiremos el microdato adicional «brand» para un producto de acuerdo a Schema.org
Por ejemplo el siguiente código muestra algunos microdatos en formato Json:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ItemList",
"url": "http://encurso/wordpress_5/producto/vneck-tee/",
"numberOfItems": "100",
"itemListElement": [{
"@type": "Product",
"image": "http://encurso/wordpress_5/wp-content/uploads/2019/02/vneck-tee.jpg",
"url": "http://encurso/wordpress_5/producto/vneck-tee/",
"name": "Camiseta de cuello en V"
},{
"@type": "Product",
"name": "..."
}
],
"offers": {
"@type": "Offer",
"price": "18"
}
...
}
</script>
A este código Json será necesario agregar «brand» con el nombre de la marca para un determinado producto.
Código para agregar Microdatos adicionales al Producto
El siguiente código agrega el microdato de marca a los microdatos ya existentes en el producto.
add_filter( 'woocommerce_structured_data_product', 'dcms_product_microdata', 10, 2 );
function dcms_product_microdata( $markup, $product ){
if ( function_exists('get_field')){
if ( get_field('marca')!='' ){
$markup['brand'] = get_field('marca');
}
}
return $markup;
}
En el código anterior:
- Usamos un hook de filtro llamado woocommerce_structured_data_product el cual hace referencia a la función dcms_product_microdata
- La función acepta dos parámetros, sólo modificaremos el $markup que es un array en donde se guarda los microdatos
- Comprobamos si la función get_field del plugin ACF existe
- A través de esta función obtenemos el valor del campo marca para un producto determinado
- Agregamos el valor obtenido en un nuevo elemento de array llamado brand
- Finalmente retornamos el array modificado
Resultado final
Como resultado obtendremos el código Json con el microdato de marca al final.
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ItemList",
"url": "http://encurso/wordpress_5/producto/vneck-tee/",
"numberOfItems": "100",
"itemListElement": [{
"@type": "Product",
"image": "http://encurso/wordpress_5/wp-content/uploads/2019/02/vneck-tee.jpg",
"url": "http://encurso/wordpress_5/producto/vneck-tee/",
"name": "Camiseta de cuello en V"
},{
"@type": "Product",
"name": "..."
}
],
"offers": {
"@type": "Offer",
"price": "18"
}
...
"brand": "Affliction"
}
</script>
Conclusión
Como has podido ver, siempre que agregues campos personalizados a tus productos es recomendable igualmente agregar estos campos como microdatos siguiendo las recomendaciones de schema.org.
¿Aún con dudas?, en el siguiente video se explica los puntos tratados anteriormente.
Muy útil tu artículo, me ha servido de ayuda 🙂
«Puedes agregar este código en el archivo functions.php de tu child theme o como parte del código de un plugin»
¿Se supone que un plugin de marcado deberia detectar los campos adicionales que explicas como por ejemplo el «Brand»? o varia segun el plugin?
Hola, si usas un plugin que agrega campos teóricamente debería agregar estos campos a los microdatos, en todo caso si no los agrega tendrías que hacerlo tal como comento en este artículo.
¿Como puedo agregar reviews? ….
Hola, puesto que las revisiones son ingresadas por el usuario a través de una interfaz, la forma más simple es que lo hagas con un plugin, por ejemplo con: Customer Reviews for WooCommerce
Perfecto. Todo fue bien y sin problema con el campo de marca «brand». Al querer agregar un nuevo campo «aggregateRating» repitiendo la operacion, functions.php da error fatal. ¿Como resuelvo añadir varios campos con sus correspondientes microdatos? Gracias. Un saludo.
Hola, tendrías que detallar un poco más el error que te aparece, puedes activar el modo debug y ver exactamente el mensaje de error. Sin embargo si estas usando algún plugin para Rating en WooCommerce ya tendría que agregarte el microdato el propio plugin.
Muchas gracias. Muy util.
Hola, por que wordpres 5.3 no viene tag y category en wocomerce?.
Hola Dani, no me queda claro a qué te refieres, en todas las versiones de WordPress se incluyen ambas taxonomías, Categorías y etiquetas, esto a nivel de WordPress sin embargo a nivel de WooCommerce igualmente tienes Categorías y Etiquetas para productos.
No me sale el tag y categoria en wocomerce pero en las entradas si.. desde que atualice wordpres..
Hola lo que comentas no tiene que ver con este artículo, de manera general prueba con esta url: https://tudominio.com/wp-admin/edit-tags.php?taxonomy=product_cat&post_type=product , cambia tu dominio.com, para las etiquetas podrías hacerlo cambiando el parámetro taxonomy a product_tag, no tiene que ver con la versión de WordPress, debes tener algún tipo de problema con algún plugin o algo que haya ido mal en la actualización. Si sigues con problemas puedes comentarme detalles en el formulario de contacto.
Hola buenas, no entiendo mucho de programación, tengo una tienda online y quiero poner datos estructurados, comprendo que woocomerce me da unos ya preestablecidos pero no completos del todo. Con el código que das e introducir los valores que me falten sobraría?? No hace falta borrar los que te da woocommerce por defecto, no?
Y otra pregunta,¿para añadir más valores cómo seria el código que hay que pegar debajo del de marca??
Hola, si no has realizado personalizaciones por código para el producto, los microdatos que te da WooCommerce deberían ser suficientes en tu caso. Para agregar campos adicionales puedes revisar: https://decodecms.com/campos-personalizados-en-productos-de-woocommerce/ . Saludos.
muchas gracias por tu articulo, muy currado.
He seguido todos tus pasos pero en la herramienta de datos estructurados de google me sigue diciendo que me falta el campo «brand»…llevo tiempo intentándolo solucionar si éxito 🙁
Si sabes de algo que pueda hacer…
gracias de antemano
Hola, esta información la ingresas usualmente a través de un plugin, el plugin que uses asegúrate de que ya incluya datos estructurados para la marca, puedes evaluar por ejemplo: https://es.wordpress.org/plugins/perfect-woocommerce-brands/ , ya te agrega los microdatos el mismo plugin por lo que no tienes que agregarlos manualmente.
Hola Jhon gracias por tus tutoriales son simple y al punto.
Yo he crado un ACF llamado “puntos” que son puntos por producto que se brindan para determinar según puntos acumulados que precio se aplicará finalmente al producto.
He visto tus ambos tutoriales sobre campos personalizados y microdatos, mi consulta es como puedo hacer para mostrar por cada producto la suma de puntos para que el cliente sepa que precio se aplicará finalmente a su total. Esa información la querría mostrar en finalizar compra y en el mail que llega tanto a cliente como admin. ¿Se puede hacer esto?
Hola, efectivamente faltaría aplicar los puntos en el total, posiblemente implique trabajar con más de un hook, has evaluado usar un plugin para esto?, veo por ejemplo que este podría servirte: https://docs.woocommerce.com/document/woocommerce-points-and-rewards/