Cada palabra cuenta, incluso antes del precio.
En el mundo del ecommerce, donde un botón mal ubicado o una palabra ambigua pueden costarte una venta, los detalles no son detalles. Son estrategia. Y uno de esos microdetalles con macroimpacto es la forma en que presentas tus precios.
¿“Desde 25€” suena igual que “25€”? ¿Y qué tal “15€ por unidad” frente a un simple “15€”? La diferencia es sutil… pero decisiva. Como quien cambia una sonrisa por una carcajada: el fondo es el mismo, pero la impresión no.
Y ojo, porque el precio es casi siempre el primer lugar donde mira un cliente en una ficha de producto. Es el anzuelo visual que determina si el visitante se queda a leer… o se va a buscar en otra parte. Por eso, el cómo lo presentas no es solo una cuestión de estética, sino de estrategia.
En este artículo te muestro cómo puedes añadir prefijos y sufijos personalizados a los precios en WooCommerce sin recurrir a plugins externos. Solo tú, tu tienda… y unas líneas de código bien puestas.
Índice
¿Cuándo tiene sentido usar un prefijo o sufijo en el precio?
Esta funcionalidad es muy útil en las siguientes situaciones:
- Venta por unidades o packs: mostrar “por unidad”, “por lote”, “por m²”, etc.
- Precios desde: ideal para tiendas que venden servicios, presupuestos o productos personalizados (ej. “Desde 50€”).
- Comunicación clara en mercados B2B o internacionales: donde se necesita añadir etiquetas como “+ IVA”, “sin impuestos” o similar.
- Ofertas o precios promocionales: usar un sufijo como “hasta fin de stock” o “precio especial”.
Al aplicarlo bien, puedes generar confianza, mejorar la transparencia y reducir dudas en la mente del comprador.
Estrategia: cómo aprovecharlo para vender más
Aquí te dejo algunas formas en que puedes usar esta personalización de precios como herramienta estratégica:
Objetivo | Estrategia con prefijo/sufijo |
---|---|
Aumentar conversiones | Añade claridad: “por unidad”, “por servicio”, etc. |
Mejorar percepción de valor | Usa prefijos como “Desde”, para dar margen de precio |
Evitar malentendidos legales | Aclara si el precio incluye o no impuestos |
Comunicar promociones | Sufijos como “hasta agotar existencias” |
Segmentar audiencias | Diferencia precios B2C y B2B con etiquetas personalizadas |
Implementar en WooCommerce
Para una personalización total, he decidido crear un campo editable en cada producto, para configurarlo a nuestro gusto. Como siempre, la funcionalidad es gratis y la puedes añadir en el functions.php de tu Child Theme o en tu plugin de funcionalidades como explico aquí.
Por producto
// Añadir campos personalizados en la pestaña General del producto
add_action('woocommerce_product_options_pricing', 'agregar_prefijo_sufijo_precio_personalizado');
function agregar_prefijo_sufijo_precio_personalizado() {
woocommerce_wp_text_input(array(
'id' => '_custom_price_prefix',
'label' => 'Prefijo del precio',
'desc_tip' => true,
'description' => 'Texto que aparece antes del precio, como por ejemplo "Desde".',
));
woocommerce_wp_text_input(array(
'id' => '_custom_price_suffix',
'label' => 'Sufijo del precio',
'desc_tip' => true,
'description' => 'Texto que aparece después del precio, como por ejemplo "por unidad".',
));
}
add_action('woocommerce_admin_process_product_object', 'guardar_prefijo_sufijo_precio_personalizado');
function guardar_prefijo_sufijo_precio_personalizado($product) {
if (isset($_POST['_custom_price_prefix'])) {
$product->update_meta_data('_custom_price_prefix', sanitize_text_field($_POST['_custom_price_prefix']));
}
if (isset($_POST['_custom_price_suffix'])) {
$product->update_meta_data('_custom_price_suffix', sanitize_text_field($_POST['_custom_price_suffix']));
}
}
add_filter('woocommerce_get_price_html', 'mostrar_prefijo_sufijo_en_precio', 10, 2);
function mostrar_prefijo_sufijo_en_precio($price, $product) {
$prefix = $product->get_meta('_custom_price_prefix');
$suffix = $product->get_meta('_custom_price_suffix');
if (!empty($prefix) || !empty($suffix)) {
$price = sprintf('%s %s %s', esc_html($prefix), $price, esc_html($suffix));
}
return $price;
}
Ahora en los Datos del producto, en general verás el siguiente campo a editar:

Obteniendo el siguiente resultado:

Por categoría
Puede resultar tedioso hacerlo producto por producto, si quieres aplicarlo solo a una categoría, te dejo aquí un código para crearlo desde la edición de categorías. En este caso añado un check por si no quieres mostrar el sufijo y prefijo en el catálogo, solo en los productos.
add_action('product_cat_add_form_fields', 'campos_personalizados_categoria_precio', 10);
add_action('product_cat_edit_form_fields', 'campos_personalizados_categoria_precio_edit', 10, 2);
function campos_personalizados_categoria_precio() {
?>
<div class="form-field">
<label for="precio_prefix">Prefijo del precio</label>
<input type="text" name="precio_prefix" id="precio_prefix" />
<p class="description">Texto antes del precio para todos los productos de esta categoría.</p>
</div>
<div class="form-field">
<label for="precio_suffix">Sufijo del precio</label>
<input type="text" name="precio_suffix" id="precio_suffix" />
<p class="description">Texto después del precio para todos los productos de esta categoría.</p>
</div>
<div class="form-field">
<label><input type="checkbox" name="ocultar_en_listado" value="yes" /> Ocultar en archivos, carrito y checkout</label>
<p class="description">Si se marca, no se mostrará el prefijo y sufijo en páginas de archivo, carrito ni checkout.</p>
</div>
<?php
}
function campos_personalizados_categoria_precio_edit($term, $taxonomy) {
$prefix = get_term_meta($term->term_id, 'precio_prefix', true);
$suffix = get_term_meta($term->term_id, 'precio_suffix', true);
$ocultar = get_term_meta($term->term_id, 'ocultar_en_listado', true);
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="precio_prefix">Prefijo del precio</label></th>
<td>
<input type="text" name="precio_prefix" id="precio_prefix" value="<?php echo esc_attr($prefix); ?>" />
<p class="description">Texto antes del precio para todos los productos de esta categoría.</p>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="precio_suffix">Sufijo del precio</label></th>
<td>
<input type="text" name="precio_suffix" id="precio_suffix" value="<?php echo esc_attr($suffix); ?>" />
<p class="description">Texto después del precio para todos los productos de esta categoría.</p>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label>Ocultar en archivos, carrito y checkout</label></th>
<td>
<input type="checkbox" name="ocultar_en_listado" value="yes" <?php checked($ocultar, 'yes'); ?> />
<p class="description">Si se marca, no se mostrará el prefijo y sufijo en páginas de archivo, carrito ni checkout.</p>
</td>
</tr>
<?php
}
add_action('edited_product_cat', 'guardar_campos_categoria_precio', 10, 2);
add_action('create_product_cat', 'guardar_campos_categoria_precio', 10, 2);
function guardar_campos_categoria_precio($term_id, $tt_id) {
update_term_meta($term_id, 'precio_prefix', sanitize_text_field($_POST['precio_prefix'] ?? ''));
update_term_meta($term_id, 'precio_suffix', sanitize_text_field($_POST['precio_suffix'] ?? ''));
update_term_meta($term_id, 'ocultar_en_listado', isset($_POST['ocultar_en_listado']) ? 'yes' : 'no');
}
add_filter('woocommerce_get_price_html', 'mostrar_prefijo_sufijo_por_categoria', 20, 2);
function mostrar_prefijo_sufijo_por_categoria($price, $product) {
if (is_admin()) return $price;
$categories = wp_get_post_terms($product->get_id(), 'product_cat');
if (empty($categories)) return $price;
// Usamos la primera categoría que tenga datos válidos
foreach ($categories as $cat) {
$prefix = get_term_meta($cat->term_id, 'precio_prefix', true);
$suffix = get_term_meta($cat->term_id, 'precio_suffix', true);
$ocultar = get_term_meta($cat->term_id, 'ocultar_en_listado', true);
$en_pagina_listado = is_shop() || is_product_category() || is_product_tag() || is_cart() || is_checkout();
if ($en_pagina_listado && $ocultar === 'yes') {
return $price;
}
if (!empty($prefix) || !empty($suffix)) {
return sprintf('%s %s %s', esc_html($prefix), $price, esc_html($suffix));
}
}
return $price;
}
Ahora al editar una categoría tendrás estos campos:

Conclusiones
Personalizar cómo se presentan los precios no es un capricho estético: es una herramienta de persuasión silenciosa. Permite guiar la percepción, evitar confusión y, en muchos casos, cerrar una venta que parecía tambalearse.
Y lo mejor: no necesitas instalar otro plugin que ralentice tu web. Solo necesitas intención… y este pequeño truco.
¿Quieres llevar esta idea más lejos —mostrar el prefijo y sufijo también en el carrito, checkout o correos automáticos? Déjamelo en comentarios. Hay muchas formas de vender, pero las mejores son las que nadie nota… excepto en el resultado.
Deja una respuesta