Woocommerce – Como añadir marcaje “brand” en el schema products. (En versión cuento)

Woocommerce – Como añadir marcaje “brand” en el schema products. (En versión cuento)

Como sabréis, Woocommerce, sin ningún otro plugin, no te hace el marcaje json-ld del campo “brand” porque Woocommerce no incluye la marca de producto por defecto. De hecho necesitarás el plugin WooCommerce Brands para añadir la marca en woocommerce.

¿Que hay otros plugins mejores para hacer esto? Quizás si, quizás no, por ahora lo vamos a probar con este plugin que es el oficial. Si conocéis alguno que ya integre el marcaje de “marca” en los datos estructurados, ¡Bingo! pero era el plugin que el cliente tenía instalado y no le podía cambiar por otro.

Para explicar esto lo voy hacer al estilo “cuento de los 3 cerditos”.

El primer cerdito, hacer una guarrada entre microdata y json-ld

El primer cerdito, que valga la redundancia era muuuy guarro, que incluso metía metas en div y luego los ocultaba…  Buscó varias maneras para añadir la marca a un producto, mediante microdata, y repito, muuuy a lo guarro, metió este código en woocommerce/templates/single-product/meta.php :

<?php if ( is_singular( 'product' ) ) {

            $brand = array_shift( wc_get_product_terms( $product->id, 'product_brand', array( 'fields' => 'names' ) ) );
            
            echo '<div style="display:none" itemscope itemtype="http://schema.org/Product">';
            echo '<meta itemprop="brand" content="' . $brand . '">';
}
?>

Pero esto le generaba un marcaje de Product independiente, porqué el nativo de woocomerce está hecho en json-ld, y ERROR, si el marcaje de product ya estaba hecho en json-ld no puedes ser más listo y meterle un microdata allí a ver si se lo come, pues no. Te genera dos marcajes independientes de Product, ¿resultado? El marcaje del producto era incompleto para crear la tarjeta enriquecida, de la que todos estamos enamorados. Así que vino el lobo llamado “Tester”, sopló y.. voló.

El segundo cerdito, añadir el marcaje en json-ld dentro del archivo correspondiente

El segundo cerdito pensó, mejor no voy contra del sentido común y añado un campo en el marcaje json-ld en el product schema del woocommerce. Pero voy a encontrar primero dónde está.

Se fué donde woocommerce crea estos datos estructurados de producto y allí le insertó este marcaje de marca, para hacerlo de este modo hay que ir al archivo: /woocommerce/includes/class-wc-structured-data.php y allí añadir en la línea 214 aprox:

$brand = array_shift(wc_get_product_terms($product->id, 'product_brand', array( 'fields' => 'names' ) ));
$markup['brand'] = $brand;

¿Qué pasó? Bingo ya funcionaba, el marcaje de “brand” dentro del schema product estaba bien, no me creaba un schema independiente de marca ni otro duplicado de producto.  Peeero un dia, la casa Woocommerce se tubo que rehabilitar (con una actualización) y los cambios hechos aquí, se fueron a la p… Pues si, volvió el lobo y “ñam ñam”.

Y ahora, la pregunta, ¿es el mejor método? El tercer cerdito tenía la respuesta.

El tercer cerdito y el definitivo, añadir esta función json-ld en un archivo de funciones propio (hasta que venga un programador mega-pro y se coma esto que digo con pantumaca.)

Seguro que el tercer cerdito no tiene la razón absoluta, pero este cerdito fue el más precavido de todos y se compró un seguro, este seguro se llamaba: “trabajar un poquito más, no mucho”. Esto implicó que el 3r cerdito tubo que bajarse un plugin de My custom functions para añadir allí las funciones php y que no se viera afectado por actualizaciones ni de theme ni de plugin. Resultó que aún había cerditos más trabajadores que se creaban plugins propios de funciones para plugins, pero cómo la finalidad era la misma, así que metió la función allí y santas pascuas.

Seguimos marcando producto, ahora con el modelo, y ahora me pregunto yo: ¿Qué marcaje de modelo de producto le dá más relevancia google? mpn, sku, productId,model.