Este tutorial es para poder poner un mensaje en la ficha de producto de WooCommerce cuando el cliente ha comprado ese producto y nosotros lo hemos marcado como completado en pedidos.
Podemos poner cualquier mensaje como por ejemplo: Ya has adquirido este producto, te recordamos que ya compraste este producto… Yo en este ejemplo lo voy a poner para avisarle tanto de que lo tiene ya como que nos valore en una plataforma externa.
Ventajas
Implementar este aviso en WooCommerce es una estrategia poderosa que tiene múltiples beneficios:
- Evita compras duplicadas no deseadas, lo que mejora la satisfacción del cliente.
- Refuerza la confianza, mostrando que la tienda recuerda su historial de compras.
- Puede usarse con objetivos de marketing, como incentivar una nueva compra o una valoración.
Hoy te enseñaré cómo implementar esta funcionalidad en tu tienda WooCommerce, de una forma sencilla y sin afectar el rendimiento ni el diseño de la web.
Aviso tipo Amazon
En este caso vamos a inspirarnos en el Marketplace líder, que arriba del todo en la ficha de producto muestra un mensaje con la última fecha en la que se adquirió:

Para esto, vamos a añadir el siguiente código en nuestro functions.php o bien en nuestro plugin code snippets como explico aquí:
// Mostrar mensaje si el usuario ya compró el producto con el enlace correcto
add_action('woocommerce_before_single_product', 'mostrar_mensaje_compra_producto');
function mostrar_mensaje_compra_producto() {
if (is_user_logged_in() && is_product()) {
global $product, $wpdb;
$user_id = get_current_user_id();
$product_id = $product->get_id();
// Buscar el último pedido donde el usuario compró este producto
$query = "
SELECT p.ID, p.post_date
FROM {$wpdb->prefix}posts p
INNER JOIN {$wpdb->prefix}woocommerce_order_items oi ON p.ID = oi.order_id
INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON oi.order_item_id = oim.order_item_id
INNER JOIN {$wpdb->prefix}postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND pm.meta_key = '_customer_user' AND pm.meta_value = %d
AND oim.meta_key = '_product_id' AND oim.meta_value = %d
AND p.post_status IN ('wc-completed', 'wc-processing', 'wc-on-hold')
ORDER BY p.post_date DESC LIMIT 1
";
$order_data = $wpdb->get_row($wpdb->prepare($query, $user_id, $product_id));
if ($order_data) {
$order_id = $order_data->ID;
$order_date = date_i18n(get_option('date_format'), strtotime($order_data->post_date));
// Generar el enlace correcto para la vista de usuario
$order_link = wc_get_endpoint_url('view-order', $order_id, wc_get_page_permalink('myaccount'));
echo '<div class="woocommerce-info">';
echo '<strong>Compraste este producto el ' . esc_html($order_date) . '.</strong> ';
echo '<a href="' . esc_url($order_link) . '">Consulta el pedido</a>.';
echo '</div>';
}
}
}
Esto añadirá un mensaje a los clientes registrados arriba del todo en la ficha de producto, con enlace directo a su pedido por si lo quiere consultar. Puedes cambiar la ubicación del mensaje con los Hooks:

Aviso con enlace a valorar en Google u otra plataforma
// Mostrar mensaje si el usuario ya compró el producto con enlace a valorar en Google
add_action('woocommerce_before_single_product', 'mostrar_mensaje_compra_producto');
function mostrar_mensaje_compra_producto() {
if (is_user_logged_in() && is_product()) {
global $product, $wpdb;
$user_id = get_current_user_id();
$product_id = $product->get_id();
// Buscar el último pedido donde el usuario compró este producto
$query = "
SELECT p.ID, p.post_date
FROM {$wpdb->prefix}posts p
INNER JOIN {$wpdb->prefix}woocommerce_order_items oi ON p.ID = oi.order_id
INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON oi.order_item_id = oim.order_item_id
INNER JOIN {$wpdb->prefix}postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND pm.meta_key = '_customer_user' AND pm.meta_value = %d
AND oim.meta_key = '_product_id' AND oim.meta_value = %d
AND p.post_status IN ('wc-completed', 'wc-processing', 'wc-on-hold')
ORDER BY p.post_date DESC LIMIT 1
";
$order_data = $wpdb->get_row($wpdb->prepare($query, $user_id, $product_id));
if ($order_data) {
$order_date = date_i18n(get_option('date_format'), strtotime($order_data->post_date));
// URL de valoración en Google (sustituir con la tuya)
$google_review_link = 'https://g.page/r/YOUR_GOOGLE_BUSINESS_ID/review'; // Reemplaza con tu enlace de valoraciones
echo '<div class="woocommerce-info">';
echo '<strong>Compraste este producto el ' . esc_html($order_date) . '.</strong> ';
echo '<a href="' . esc_url($google_review_link) . '" target="_blank" rel="noopener noreferrer">Valóranos en Google</a>.';
echo '</div>';
}
}
}
Recuerda modificar tu ID de Google en el enlace: "YOUR_GOOGLE_BUSINESS_ID" con el enlace de valoraciones de Google de tu negocio.
Avisar de la compra con un objetivo
Por daros otra alternativa, os dejo un mensaje que sale de forma más discreta con un objetivo, en este caso que valore el producto!
Para esto, vamos a añadir el siguiente código en nuestro functions.php o bien en nuestro plugin code snippets como explico aquí.
// Función de utilidad para comprobar si un cliente ha comprado un producto (sólo para pedidos con estado "completado")
function customer_has_bought_product( $product_id, $user_id = 0 ) {
global $wpdb;
$customer_id = $user_id == 0 || $user_id == '' ? get_current_user_id() : $user_id;
$status = 'wc-completed';
if( ! $customer_id )
return false;
// Contar el número de productos
$count = $wpdb->get_var( "
SELECT COUNT(woim.meta_value) FROM {$wpdb->prefix}posts AS p
INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
INNER JOIN {$wpdb->prefix}woocommerce_order_items AS woi ON p.ID = woi.order_id
INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
WHERE p.post_status = '$status'
AND pm.meta_key = '_customer_user'
AND pm.meta_value = $customer_id
AND woim.meta_key IN ('_product_id','_variation_id')
AND woim.meta_value = $product_id
" );
// Devuelve un valor booleano si la cuenta es mayor que 0
return $count > 0 ? true : false;
}
add_action( 'woocommerce_before_add_to_cart_form', 'woo_review_discount_message');
function woo_review_discount_message() {
global $product;
if ( customer_has_bought_product( $product->get_id() ) && ! $product->is_type('variable') ) {
$user = wp_get_current_user();
echo '<span style="color:red"><div class="user-bought">Hola ' . $user->first_name . '! ya has comprado este producto. Nos puedes valorar tanto el producto como nuestro servicio en Revi.io.</div></span>';
}
}
Podemos cambiar tanto la ubicación del texto como el mensaje que queremos transmitir en la última parte del código. Quedando un resultado:

En este caso lo estoy usando como herramienta de marketing para conseguir valoraciones, pero tú lo puedes usar como quieras. ¡Así que depende de tu creatividad!
Otra forma es trabajar que el cliente repita la compra en WooCommerce.
Conclusiones
Implementar esta función en WooCommerce es sencillo, rápido y tiene un impacto positivo en la conversión y la experiencia del usuario.
- Mejorarás la UX, como hace Amazon.
- Facilitarás el acceso a pedidos anteriores.
- Incentivarás valoraciones y recompras.
- Aumentarás la confianza y satisfacción del cliente.
Ahora que tienes esta funcionalidad, piensa en cómo puedes usarla estratégicamente en tu negocio.
¿Se os ocurre alguna otra estrategia con este código? Escribidlo en comentarios junto con vuestras dudas





Deja una respuesta