WooCommerce no tiene ningún ajuste para ocultar los precios a los visitantes ni para dar a los mayoristas su propia tarifa: cada producto tiene un precio y lo ve todo el mundo. Para enseñar «Inicia sesión para ver los precios» hace falta un fragmento de código (o un plugin) que cambie el precio por un enlace y bloquee el carrito a quien no ha iniciado sesión. Para que un cliente profesional vea otro precio al entrar, hace falta un plugin de venta mayorista que añada un rol o un grupo y un segundo precio en cada producto.

Por qué pasa

  • WooCommerce tiene un solo precio por producto. Un precio normal y uno rebajado, los dos públicos. No hay precio por rol de usuario, por cliente ni por cantidad.
  • Solo existe el rol «Cliente». Todo el que se registra recibe el mismo rol, así que WooCommerce no distingue a una tienda o un distribuidor de un particular.
  • Ocultar el precio en pantalla no es ocultarlo. La mayoría de los fragmentos de código cambian solo el precio que se ve. El precio sigue en los datos estructurados del producto (el JSON-LD que lee Google), en la Store API (/wp-json/wc/store/v1/products) y en tu feed de Google, si tienes uno.
  • Los productos variables tienen otra puerta. Cada variación tiene su precio y su propia comprobación de «se puede comprar». Los fragmentos pensados para productos simples suelen dejar visible el precio de la variación y el botón de añadir al carrito.
  • La caché de páginas. Si tu caché guardó una página cuando aún mostraba los precios, los visitantes siguen viendo esa copia hasta que la vacías.

Cómo comprobarlo

  1. Abre tu tienda en una ventana privada, sin sesión. Mira la tienda, un producto simple y uno variable. Elige una variación: ¿aparece un precio?
  2. Intenta comprar igualmente. Añade ?add-to-cart=123 (con el ID de un producto real) a la dirección de tu tienda. Si el producto entra en el carrito, cualquiera puede seguir pidiendo.
  3. Mira los datos estructurados. Abre una ficha de producto, mira el código fuente (Ctrl+U) y busca "price". Si aparece, Google y los rastreadores de IA pueden leerlo.
  4. Mira la Store API. Abre https://tutienda.com/wp-json/wc/store/v1/products. El campo prices de cada producto es público salvo que un plugin lo quite.
  5. Entra con una cuenta de prueba de cliente profesional y comprueba que el precio que esperas sale en la ficha, en el carrito y en el correo del pedido.

Cómo arreglarlo

Para ocultar los precios a quien no ha iniciado sesión, sin plugin, añade esto al functions.php de tu tema hijo o a un plugin de fragmentos de código (haz antes una copia de seguridad y pruébalo en una copia de la tienda):

// Sin sesión se ve un enlace en lugar del precio.
add_filter( 'woocommerce_get_price_html', function ( $price, $product ) {
    if ( is_user_logged_in() ) {
        return $price;
    }
    $url = wc_get_page_permalink( 'myaccount' );
    return '<a href="' . esc_url( $url ) . '">Inicia sesión para ver los precios</a>';
}, 10, 2 );

// Sin sesión no se puede añadir nada al carrito (productos simples y variables).
add_filter( 'woocommerce_is_purchasable', function ( $ok ) {
    return is_user_logged_in() ? $ok : false;
} );
add_filter( 'woocommerce_variation_is_purchasable', function ( $ok ) {
    return is_user_logged_in() ? $ok : false;
} );

// Quita el precio de los datos estructurados para quien no tiene sesión.
add_filter( 'woocommerce_structured_data_product', function ( $markup ) {
    if ( ! is_user_logged_in() ) {
        unset( $markup['offers'] );
    }
    return $markup;
} );

Después vacía la caché de páginas (y la de Cloudflare, si la usas) y repite las comprobaciones de arriba. Hay dos cosas que este fragmento no hace: no quita los precios de la Store API y, sin offers, tus productos dejan de poder mostrar el precio en los resultados enriquecidos de Google. Si tu tema o tu maquetador pinta los precios con su propio widget, puede saltarse el filtro; revisa también esas páginas.

Si quieres cerrar la tienda entera a los visitantes, el modo «Próximamente» de WooCommerce (WooCommerce > Ajustes > Visibilidad del sitio) oculta las páginas de la tienda, pero está pensado para preparar el lanzamiento: no está hecho para dejar entrar a clientes normales con su cuenta. Para una tienda privada para profesionales hace falta un plugin.

Para dar a los profesionales su propio precio, usa un plugin de venta mayorista. El gratuito «Wholesale Prices for WooCommerce» (de Wholesale Suite), en WordPress.org, funciona así:

  1. Instálalo. Añade el rol «Wholesale Customer» (cliente mayorista).
  2. Ve a Usuarios, abre cada cliente profesional y cámbiale el rol a ese.
  3. Edita un producto. En la pestaña General, rellena el precio mayorista. En los productos variables, rellénalo en cada variación.
  4. Entra con uno de esos clientes y revisa la tienda, el carrito y el pago.

La versión gratuita tiene un solo rol mayorista. Varios grupos (tiendas, distribuidores, instaladores), descuentos por categoría, tramos por cantidad y pedido mínimo están en su versión de pago o en otros plugins.

Para el envío gratis o un método de pago solo para profesionales (la otra pregunta que más se repite), WooCommerce no filtra los métodos por rol. Hacen falta unas líneas de código en woocommerce_package_rates o un plugin que asigne métodos por rol o por grupo.

Cómo evitar que vuelva a pasar

El fragmento funciona hasta que una actualización del tema, un bloque nuevo o una regla de caché vuelven a enseñar los precios, y además te deja con un solo precio para todos. Ese hueco lo cubre nuestro plugin TradeCraft. Eliges si los visitantes sin sesión lo ven todo, ven la tienda sin precios («Inicia sesión para ver los precios», también en las variaciones y con el carrito bloqueado) o no ven nada (tienda privada que los manda a iniciar sesión). Pones a los clientes profesionales en grupos (Tiendas, Distribuidores…) y cada grupo tiene su precio en cada producto y variación, tramos por cantidad, descuentos por categoría, pedido mínimo, métodos de pago y de envío, y pago a plazo con límite de crédito. Las empresas solicitan su cuenta desde tu tienda y las apruebas con un clic, y «Precios como…» en la barra de administración te enseña la tienda como la ve cada grupo. No quita el precio de los datos estructurados, así que conserva la tercera parte del fragmento si eso te importa. Cuesta 49 USD al año para un sitio o 99 USD de por vida, y tiene una demo para probarlo. Si solo necesitas ocultar los precios a quien no inicia sesión, te basta con el fragmento.

Preguntas frecuentes

¿Se pueden ocultar los precios en WooCommerce sin plugin? Sí, con un fragmento de código que filtre el precio y bloquee el carrito a quien no ha iniciado sesión. WooCommerce no trae ningún ajuste para eso.

¿Google sigue viendo mis precios si los oculto? Sí, salvo que también los quites de los datos estructurados del producto. Ocultar el precio en pantalla no toca el JSON-LD.

¿Puedo tener un precio para particulares y otro para mayoristas? No con WooCommerce solo. Necesitas un plugin de venta mayorista o de precios por rol que añada un precio por rol o por grupo.

¿Por qué siguen saliendo los precios después de poner el código? Casi siempre es la caché, que sirve una copia vieja, o un widget del tema que pinta el precio sin pasar por el filtro de WooCommerce. Vacía todas las cachés y prueba en una ventana privada.

¿Los mayoristas necesitan un rol de usuario especial? Depende del plugin. Unos añaden un rol nuevo; otros mantienen el rol normal de cliente y ponen a los clientes en grupos.