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/
Buenos días Jhon.
Felicidades por los tutoriales, acabo de empezar en esto y estoy aprendiendo mucho.
Estoy montando una óptica on-line y para ciertos productos las variaciones llegan a ser cientos de miles, por esto he optado por campos personalizados con selectores. Con este tutorial los campos personalizados al publicarlos en el front_end no permite que el cliente final seleccione los valores del select, sólo publica los valores seleccionados en el escritorio.
Lo he hecho finalmente con un plugin: WooCommerce Custom Fields pero el resultado no me gusta, preferiría con código y ACF como se describe en este tutorial, ¿es posible que el cliente final pueda seleccionar los selectores?
Gracias
Hola, revisa este artículo: https://decodecms.com/campos-personalizados-en-productos-de-woocommerce/
hola amigo, gracias por tu ayuda, me falta agregar el campo MPN para mis productos de woocomerce, cuanto me cobras por echarme la mano. ya que hice los mismo pasos de aca pero no me sirvio para el campo MPN. saludos.
Hola, para este tipo de ayuda puedes comunicarte a través del formulario de contacto: https://decodecms.com/contacto/ . Saludos.
Hola Jhon. Gracias por la informacion. Espero me puedas ayudar. ¿Si no estoy usando advance custom fields aun asi se utiliza la función get_field? ¿Ese mismo codigo del filtro lo puedo pegar varias veces para incluir alrededor de 6 microdatos que me esta marcando facebook que me faltan para sincronizar el catalogo o como sería la estructura para hacerlo en menos lineas de código? Otro detalle que me di cuenta es que facebook dice que falta el microdato de image_link, el cual no encontré en schema.org, también me di cuenta que dice que me falta productID y otros como price, title, etc, pero al inspeccionar el codigo de la pagina del producto si veo que trae ese dato. Te agradezco de antemano tu apoyo. Saludos.
Hola, no podrás usar get_field(), sin embargo puedes revisar este artículo para usar y mostrar campos personalizados nativos de WordPress: https://decodecms.com/como-usar-los-campos-personalizados-en-wordpress/ , usarías la función get_post_meta() en su lugar.
Si te complicas con esto mejor busca algún plugin que te complete microdatos ya que es posible que tengas que añadir varios según lo que comentas.
Hola muy buen post. Pregunta. El plugin de yoast para woocommerce haría todo esto?. Agregar brands y d3mas campos ?
Hola, en realidad, el propio WooCommerce ya te crea los microdatos para un producto, pero este artículo trata sobre cómo agregar microdatos adicionales en caso lo requieras.
Hola, una consulta los Micro datos son utilizados por WooCommerce al momento de crear la orden o agregar el producto al carrito?
Hola, son usados por las máquinas de búsqueda como Google para dar información más precisa al usuario.
Hola Jhon.
Muchas gracias por tu ayuda. Se agradece enormemente en los tiempos que corren.
Quería comentarte que siguiendo tus pasos, Search Console me muestra que no recoge el dato de brand.
Sí miro el código sí aparece; “brand”:”Parfums Dusita”, pero Search Console me indica “El tipo de objeto del campo brand no es válido”, y me temo que es porque el @type es Thing. ¿Si es esto, como lo modifico a brand?
Muchas gracias.
Hola, al parece debe ser incluido el @type, por ejemplo:
Por lo tanto podrías probar con:
Saludos.