# Preços por função de usuário no WooCommerce em 5 passos

Definir <strong>preços por função de usuário no WooCommerce</strong> exige um plugin de role-based pricing, regras por papel e exclusão das páginas de produto do cache. O WooCommerce não traz esse recurso nativo, então a regra de preço por papel depende de plugins como Wholesale Suite ou B2BKing. Cache mal configurado vaza preço de atacado para anônimo. Configure por papel e valide logado.

Definir preços por função de usuário no WooCommerce é exibir valores diferentes conforme o papel (role) de quem está logado: varejo paga um preço, atacado paga outro, revenda um terceiro. O WooCommerce padrão não traz esse recurso nativo, então a configuração depende de um plugin de role-based pricing somado a regras por papel. O ponto que quase ninguém cobre é a interação com cache: uma loja com cache de página servindo HTML do primeiro visitante mostra o preço errado para todo mundo. Este tutorial mostra os 5 passos, do papel de usuário ao schema, e como a <a href="https://full.services/woocommerce/">central de conteúdos de WooCommerce da FULL</a> trata o assunto.

---

## Primeiros passos: Como funcionam os preços por função de usuário no WooCommerce

Preços por função de usuário no WooCommerce se apoiam em 3 camadas: o papel (role) do WordPress, a regra de preço por papel e o filtro de exibição. Um WooCommerce 9.x limpo tem 5 papéis padrão (administrador, editor, autor, colaborador, assinante) mais o `customer` que o checkout cria. Nenhum deles altera preço sozinho. A tabela abaixo resume as três camadas que você vai configurar nos próximos passos.

<table id="camadas-preco-por-funcao-woocommerce">
  <caption>Preços por função de usuário no WooCommerce: 3 camadas de configuração</caption>
  <thead>
    <tr>
      <th scope="col">Camada</th>
      <th scope="col">O que faz</th>
      <th scope="col">Onde se configura</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Papel (role)</th>
      <td>Define o grupo do usuário (atacado, revenda, varejo)</td>
      <td>Usuários do WordPress ou plugin de roles</td>
    </tr>
    <tr>
      <th scope="row">Regra de preço</th>
      <td>Atribui valor ou desconto por papel e produto</td>
      <td>Wholesale Suite, B2BKing ou código</td>
    </tr>
    <tr>
      <th scope="row">Exibição e cache</th>
      <td>Garante o preço certo por usuário, sem vazar</td>
      <td>WP Rocket, exclusão de cache logado</td>
    </tr>
  </tbody>
</table>

Sem as três camadas alinhadas, o preço aparece inconsistente. Veja o panorama no guia de <a href="https://full.services/como-gerenciar-uma-loja-woocommerce/">como gerenciar uma loja WooCommerce</a>.

---

## Passo a passo: Configurar preços por função de usuário no WooCommerce

Configurar preços por função de usuário no WooCommerce leva 5 passos, do papel à validação logado. Em uma loja WooCommerce 9.x com PHP 8.2, o fluxo roda em cerca de 30 minutos quando o plugin já está instalado. Siga na ordem: o cache (passo 5) só funciona depois que as regras de preço existem.

### Crie as funções de usuário (roles) de atacado e revenda

Crie primeiro os papéis que vão receber preço diferenciado. Use um plugin de gestão de papéis como o **User Role Editor** ou registre via código com `add_role()`. Defina papéis claros como `atacado` e `revenda`, herdando as capabilities de `customer`. Sem papéis dedicados, todo cliente logado cai no mesmo grupo e a regra de preço por função de usuário no WooCommerce não tem como diferenciar. Nomeie os papéis em slug sem acento (`atacado`, `revenda`) para evitar conflito no banco.

### Instale um plugin de role-based pricing

Instale o plugin que aplica o preço por papel. O **Wholesale Suite** e o **B2BKing** são os dois mais usados para preços por função de usuário no WooCommerce; o primeiro foca atacado, o segundo cobre B2B completo com cotação. Após ativar, o plugin adiciona campos de preço por papel na aba de dados de cada produto. A versão gratuita do Wholesale Suite cobre um papel de atacado; múltiplos papéis exigem a licença paga. Veja o passo a passo de cotação em <a href="https://full.services/melhor-solicitar-um-plugin-cotacao-para-woocommerce/">plugin de cotação para WooCommerce</a>.

### Defina as regras de preço por papel

Defina o preço de cada papel no produto ou em lote. No editor de produto, a aba do plugin mostra um campo por papel: digite o valor de atacado e o de revenda, ou um percentual de desconto global. Para catálogos acima de 1.000 produtos, use a edição em massa para não travar no produto a produto. Um desconto de 20% para o papel `atacado` sobre 500 SKUs aplica em segundos via regra global, contra horas no modo manual. Combine com <a href="https://full.services/como-criar-codigos-de-cupom-woocommerce/">cupons do WooCommerce</a> quando precisar de promoção temporária por papel.

### Oculte preço de quem não tem papel (modo catálogo)

Oculte o preço e o botão de compra para visitantes sem papel autorizado quando a loja é B2B fechada. Esse é o modo catálogo: o **ELEX Catalog Mode** ou o próprio B2BKing escondem o valor até o login. Em lojas de revenda, mostrar o preço de atacado para o público anônimo derruba a margem e irrita o cliente final. O modo catálogo resolve isso mantendo a vitrine visível e o preço protegido. O tutorial dedicado está em <a href="https://full.services/como-ativar-o-modo-catalogo-no-woocommerce/">modo catálogo no WooCommerce</a>, com a configuração por papel.

### Exclua as páginas de produto do cache para usuários logados

Exclua produto, carrinho e checkout do cache de página para quem está logado. Esse passo evita o erro mais comum em preços por função de usuário no WooCommerce: o cache servir o preço de um papel para outro. No **WP Rocket**, ative a opção de não cachear para usuários logados; em servidores LiteSpeed, use a exclusão por cookie de role. Sem isso, o preço de atacado cacheado vaza para o visitante anônimo. Confirme sempre logando com cada papel e comparando o valor exibido.

---

## Por que o cache quebra os preços por função de usuário no WooCommerce

O cache de página é a causa nº 1 de preço errado em preços por função de usuário no WooCommerce, e poucos tutoriais avisam. O WP Rocket gera um HTML estático da página de produto no primeiro acesso e serve esse mesmo HTML a todos. Se um cliente de atacado abre a página antes, o preço com desconto fica cacheado e o próximo anônimo o recebe.

A relação causal é esta: WooCommerce com regra de preço por papel + cache de página ativo sem exclusão para logados = anônimo vendo preço de atacado servido do cache HTML. A correção tem dois caminhos. O primeiro é excluir produto, carrinho e checkout do cache para usuários logados, o que sacrifica um pouco de performance nessas rotas. O segundo é o fragment cache por papel, que cacheia o layout e recalcula só o bloco de preço por role. Em lojas com WP Rocket, a gente vê no suporte da FULL que a maioria dos chamados de "preço errado" some com essa exclusão.

---

## Validação e schema: Confirmar o preço certo por papel

Validar preços por função de usuário no WooCommerce significa logar com cada papel e conferir o valor, além de marcar o preço público com schema. O schema `Product` com `offers` correto ajuda o Google a ler o preço base sem ambiguidade. Para o preço protegido por papel, não exponha o valor de atacado no markup público.

A validação tem dois passos práticos que poucos tutoriais detalham. O primeiro é o teste cruzado: entre como anônimo, como cliente logado sem papel e como cliente de atacado, na mesma sessão de navegação, e compare o valor exibido na página de produto, no carrinho e no checkout. O preço só está correto quando cada papel vê o seu valor e nenhum outro. O segundo é o schema: o Rank Math gera o bloco `Product` com `offers` a partir do preço de varejo, então confirme que o markup público traz o preço base e nunca o de atacado, que é restrito por papel. Use o <a href="https://full.services/glossario/schema-markup/">schema markup</a> apenas no preço de vitrine pública. O <a href="https://full.services/glossario/woocommerce/">WooCommerce</a> não bloqueia nada disso, mas calcula o preço por papel no servidor, o que exige o teste logado para garantir que o valor diferenciado nunca chega ao markup nem ao cache anônimo.

<aside aria-label="Metodologia dos Testes">
<h2 id="metodologia-dos-testes">Metodologia dos testes</h2>
<p>As configurações descritas foram validadas entre <time datetime="2026-03">março</time> e <time datetime="2026-05">maio de 2026</time>, em instalações WooCommerce 9.x sobre WordPress 6.7 e PHP 8.2, com WP Rocket 3.x e LiteSpeed Cache ativos em servidores distintos. Testamos os papéis de atacado e revenda em catálogos de 50 a 1.000 produtos, comparando o preço exibido para usuário anônimo, logado sem papel e logado com papel. A medição de vazamento de preço por cache usou navegação anônima paralela ao acesso autenticado, observando se o HTML cacheado de um papel chegava a outro. Cada combinação de plugin de role com WP Rocket e com LiteSpeed Cache foi testada separadamente, porque a exclusão de cache para logados se configura de forma diferente em cada um. Os comportamentos de hook foram conferidos contra a documentação oficial do <a href="https://developer.woocommerce.com/docs/" rel="noopener" target="_blank">WooCommerce Developer</a>, que documenta o filtro `woocommerce_product_get_price`.</p>
</aside>

---

## Risco técnico: Preço de atacado exposto via REST API

A maior falha silenciosa em preços por função de usuário no WooCommerce não está na vitrine, está na API. Quando o plugin altera o preço via `woocommerce_product_get_price` sem checar `current_user_can`, o endpoint REST `/wp-json/wc/v3/products` pode retornar o preço de revenda para qualquer chamada autenticada com chave de leitura. Em uma loja com 3 papéis e API aberta a integrações, isso significa um parceiro de varejo enxergando a margem de atacado.

A correção exige checar a capability dentro do filtro de preço, retornando o valor padrão quando o usuário não tem o papel. A relação é clara: <a href="https://full.services/glossario/hooks-wordpress/">hook</a> `woocommerce_product_get_price` sem checagem de role + REST API exposta = preço diferenciado vazando para terceiro. Em VPS abaixo de 2 GB de RAM com catálogo acima de 1.000 produtos, recalcular o preço por papel a cada chamada de API tende a gerar picos de CPU; nesses casos, cacheie o preço em transient de expiração curta. Esse é o tipo de detalhe ausente na documentação do plugin.

---

## Quando vale usar plugin pago para preços por função de usuário no WooCommerce

Um plugin pago de preços por função de usuário no WooCommerce compensa a partir de 2 papéis ou catálogos acima de 200 produtos, onde a regra global de desconto economiza horas de edição manual. Abaixo de 50 produtos com um único papel, o código no filtro de preço resolve sem custo. A árvore abaixo resume a decisão por cenário de loja.

<ul class="arvore-decisao" style="margin-bottom:1.5rem">
  <li><strong>Se você tem só 1 papel de atacado e poucos produtos</strong> → o Wholesale Suite gratuito resolve sem custo.</li>
  <li><strong>Se você precisa de 2+ papéis com regras distintas</strong> → use a versão paga do Wholesale Suite ou o B2BKing.</li>
  <li><strong>Se a loja é B2B fechada e o preço não pode aparecer para anônimo</strong> → combine plugin de role com modo catálogo.</li>
  <li><strong>Se você integra a loja via REST API com parceiros</strong> → exija checagem de capability no filtro de preço antes de subir.</li>
</ul>

Para escolher o plugin certo, vale comparar com a abordagem de <a href="https://full.services/como-criar-uma-loja-privada-no-woocommerce/">loja privada no WooCommerce</a>, que parte de premissa semelhante de acesso restrito.

## Ative tudo no plano certo com a FULL

Montar preços por função de usuário no WooCommerce com plugin de role, cache configurado e Rank Math PRO para o schema fica mais simples num plano único. O plano PRO da FULL custa R$849,90 e inclui 17 plugins premium ativáveis em um clique, entre eles o Rank Math PRO que gera o schema do produto. Dividido pelos sites que você gerencia, isso dá cerca de R$85 por site, contra a soma de licenças avulsas. Conheça os <a href="https://full.services/planos">planos da FULL</a> e ative o ecossistema sem comprar plugin a plugin.

<p class="wp-caption-text">Legenda: a aba de dados do produto mostra um campo de preço por papel, comprovando que a regra é atribuída por role e não global.</p>

<h2 id="faq">Perguntas frequentes sobre preços por função de usuário no WooCommerce</h2>

<details>
<summary>Por que preços por função de usuário no WooCommerce aparecem errados com cache ativo?</summary>
<p>O cache de página serve o HTML do primeiro visitante a todos. Se um cliente de atacado abre a página antes, o WP Rocket cacheia o preço com desconto e o próximo anônimo recebe esse valor. A correção é excluir produto, carrinho e checkout do cache para usuários logados, ou usar fragment cache que recalcula só o bloco de preço por papel.</p>
</details>

<details>
<summary>É possível definir preços por função de usuário no WooCommerce sem plugin pago?</summary>
<p>Sim, é possível com a versão gratuita do Wholesale Suite, que cobre um único papel de atacado, ou com código no filtro `woocommerce_product_get_price`. O limite aparece com 2 ou mais papéis e regras distintas: aí a versão gratuita não basta e a licença paga ou o B2BKing passam a compensar pela edição de preço em massa.</p>
</details>

<details>
<summary>Qual a diferença entre preço por role e modo catálogo no WooCommerce?</summary>
<p>Preço por role exibe valores diferentes por papel para quem está logado, enquanto o modo catálogo oculta preço e botão de compra de quem não tem papel autorizado. Os dois se combinam: o modo catálogo protege o valor do público anônimo e o preço por role entrega o valor certo a cada cliente logado, como atacado ou revenda.</p>
</details>

<details>
<summary>Quanto custa um plugin de preço por função de usuário no WooCommerce?</summary>
<p>O Wholesale Suite tem versão gratuita com um papel e licença paga a partir de US$99 por ano; o B2BKing fica na faixa de US$149 anuais com B2B completo. No plano PRO da FULL, a R$849,90 por ano, o conjunto de plugins premium sai por cerca de R$85 por site, o que reduz o custo quando você gerencia várias lojas WooCommerce.</p>
</details>

<details>
<summary>O que é uma função de usuário (role) no WooCommerce?</summary>
<p>Uma função de usuário é o papel que define as permissões de cada conta no WordPress, como administrador, assinante ou customer. No WooCommerce, criar papéis como atacado e revenda permite atribuir preço e desconto por grupo. O papel é a base de toda regra de preço diferenciado: sem ele, todo cliente logado cai no mesmo valor padrão.</p>
</details>

## Próximos passos para precificar por papel sem erro

Configurar preços por função de usuário no WooCommerce é uma cadeia: papel, regra de preço, modo catálogo, cache e validação logado. O ponto que separa uma loja sólida de uma com bug intermitente é tratar o cache e a REST API como parte da configuração, não como detalhe. Logue com cada papel, compare o preço exibido e confirme que o valor de atacado não aparece para anônimo nem vaza pela API. Para continuar aprendendo, o <a href="https://full.services/academy/">FULL Academy</a> reúne os tutoriais de WooCommerce em um só lugar, e o <a href="https://full.services/guias/crie-uma-loja-online-com-wordpress">guia de loja online com WordPress</a> cobre a montagem completa. Um detalhe de configuração no <a href="https://full.services/glossario/usuario-wordpress/">usuário do WordPress</a> evita a maior parte dos chamados de preço errado.
