Hola,
He publicado la nueva web y ahora me ha aparecido un aviso de problemas con los datos estructurados y que tengo que especificar "offers", "review" o "aggregateRating" en los productos de la tienda.
¿Hay forma de hacerlo?
Gracias
Contenido solo visible a usuarios registrados
Hola Rafael.
Los datos Review y aggregateRating son opcionales, no afectan paar el SEO, de todas formas puedes probar añadiendo lo siguiente en el al plugin de Fragmentos de codigo:
add_filter( 'wpseo_json_ld_output', 'agregar_datos_estructurados_producto_yoastseo', 10, 1 );
function agregar_datos_estructurados_producto_yoastseo( $data ) {
// Verificar si estamos en la página de un producto de WooCommerce
if ( is_product() ) {
global $product;
// Obtener información del producto
$product_id = $product->get_id();
$product_name = $product->get_name();
$product_description = $product->get_description();
$product_sku = $product->get_sku();
$product_price = $product->get_price();
$product_url = get_permalink( $product_id );
$product_image = wp_get_attachment_image_src( get_post_thumbnail_id( $product_id ), 'full' );
// Obtener las revisiones del producto
$reviews = get_comments( array(
'post_id' => $product_id,
'status' => 'approve',
'type' => 'review'
) );
// Calcular la calificación promedio
$rating_total = 0;
foreach ( $reviews as $review ) {
$rating = get_comment_meta( $review->comment_ID, 'rating', true );
$rating_total += $rating;
}
$rating_average = count( $reviews ) > 0 ? $rating_total / count( $reviews ) : 0;
// Construir el array de datos estructurados
$product_data = array(
'@context' => 'http://schema.org/',
'@type' => 'Product',
'name' => $product_name,
'description' => $product_description,
'sku' => $product_sku,
'offers' => array(
'@type' => 'Offer',
'price' => $product_price,
'priceCurrency' => get_woocommerce_currency(),
'availability' => 'http://schema.org/InStock',
'url' => $product_url
),
'image' => array(
'@type' => 'ImageObject',
'url' => $product_image[0],
'width' => $product_image[1],
'height' => $product_image[2]
),
'review' => array(
'@type' => 'Review',
'aggregateRating' => array(
'@type' => 'AggregateRating',
'ratingValue' => $rating_average,
'reviewCount' => count( $reviews )
)
)
);
// Agregar los datos estructurados al array de datos de Yoast SEO
$data['@graph'][] = $product_data;
}
return $data;
}
Un. saludo
@pepesoler Hola,
¿Debo ponerlo como php o html? Al copiarlo en php, aparecen fragmentos en color rojo ¿es correcto?
Gracias
Que tal Rafael,
¿Debo ponerlo como php o html?
El fragmento de codigo compartido por mi compañero es un filtro con una funcion en PHP
Al copiarlo en php, aparecen fragmentos en color rojo ¿es correcto?
Si estas utilizando para gestionar los fragmentos de código un plugin como Code snippets, esta es la forma en la que marca la diferencia de algunos elementos, mas no es un error
Saludos!
Hola Rafael.
Nada, gracias a ti.
Dejo el hilo abierto por si necesitas retomarlo.
Un Saludo