Atualizado em: 22 de Abril de 2026

Documentação: CCW

Contrato em PDF para WooCommerce (WooTatitas) — Guia de Integração para Desenvolvedores

Guia rápido para programadores que desejam usar este plugin como base em seus projetos.

Aviso importante

Este plugin pode mudar funcionalidades sem aviso prévio para acompanhar atualizações do WooCommerce.

Toda customização é de responsabilidade do desenvolvedor. Não edite os arquivos originais do plugin. Faça suas alterações em código externo:

  • um plugin próprio (preferencialmente must‑use),
  • um plugin adicional do seu projeto, ou
  • o functions.php de um tema filho.
  • Utilize hooks (actions/filters) documentados. Alterações diretas no plugin serão sobrescritas em atualizações.

1. Visão geral

O plugin gera contratos em PDF a partir de pedidos do WooCommerce. Ele atua principalmente no checkout, na finalização do pedido e na área de downloads do cliente, além de permitir envio do contrato por e-mail conforme a configuração administrativa.
Para desenvolvedores, os pontos de integração confirmados no código estão em três frentes: extensões via hooks próprios do plugin, consumo de funções PHP públicas já carregadas pelo plugin e integração com o fluxo do checkout via AJAX/JS e metadados do pedido no WooCommerce.
O plugin não expõe uma API REST pública própria, nem shortcodes, blocks do Gutenberg ou webhooks públicos dedicados. A integração confirmada é focada em PHP, WooCommerce, AJAX de frontend e customização do comportamento do template/armazenamento.

2. Pré-requisitos

Requisitos confirmados no plugin:

  • WordPress 6.0 ou superior
  • PHP 8.0 ou superior
  • WooCommerce ativo
  • WordPress não pode estar em modo Multisite
  • Permissão de escrita no ambiente para criação do diretório de contratos em wp-content ou no diretório alternativo definido por filtro
  • WP-Cron funcional é recomendado para os envios de e-mail agendados
  • Para configuração no painel, o usuário precisa ter capacidade manage_woocommerce

3. Arquitetura de integração

O fluxo confirmado no plugin é este:

  • O plugin carrega suas funções principais nobootstrap do WordPress.
  • No checkout, quando o plugin está ativo, ele injeta a prévia do contrato e, se configurado, o checkbox de aceite.
  • A prévia é atualizada via AJAX a partir dos dados atuais do formulário de checkout.
  • Ao finalizar o pedido, o plugin gera o PDF do contrato.
  • Depois disso, conforme a configuração administrativa:
    libera download na página de obrigado e/ou em downloads do WooCommerce e envia o contrato por e-mail após confirmação de pagamento

Pontos públicos confirmados para integração:

  • Action própria de bootstrap do plugin
  • Filters próprios para diretório de armazenamento e parâmetros do template
  • Funções PHP públicas carregadas globalmente
  • Endpoint AJAX público de prévia
  • Estrutura de frontend com IDs/classes fixos no checkout
  • Metadados de pedido úteis para leitura

Limites entre público e interno:

  • Público/integrável: hooks próprios, getters/funções utilitárias observáveis, AJAX de prévia, estrutura do checkout e metadados úteis do pedido.
  • Interno/não documentado aqui: licenciamento, atualização privada, validações protegidas, rotinas sensíveis de proteção, detalhes internos de armazenamento e mecanismos administrativos auxiliares.

4. Hooks disponíveis para desenvolvedores

wootatitas_ccw_bootstrap

Tipo: Action
Quando é executado: Durante plugins_loaded, com prioridade 5, após o bootstrap mínimo do plugin.

Parâmetros: Nenhum
Retorno: Não se aplica

Exemplo de uso:

add_action(‘wootatitas_ccw_bootstrap’, function () {
if (!function_exists(‘wootatitas_ccw_obter_configuracoes’)) {
return;
}

$config = wootatitas_ccw_obter_configuracoes();

if ($config[‘plugin_ativo’] === ‘sim’) {
// Seu código de integração aqui.
}
});

wootatitas_ccw_storage_base

Tipo: Filter
Quando é executado: Quando o plugin resolve o diretório base onde os contratos serão armazenados.

Parâmetros: $base (string) — diretório base calculado pelo plugin
Retorno: string — novo diretório base

Exemplo de uso:

add_filter(‘wootatitas_ccw_storage_base’, function ($base) {
return WP_CONTENT_DIR . ‘/meus-contratos-ccw’;
});

wootatitas_ccw_parametros_disponiveis

Tipo: Filter
Quando é executado: Quando o plugin monta a lista de parâmetros disponíveis para uso no template do contrato.

Parâmetros: $parametros_disponiveis (array) — array organizado por categorias, no formato Categoria => [placeholder => descrição]
Retorno: array — lista final de parâmetros disponíveis

Exemplo de uso:

add_filter(‘wootatitas_ccw_parametros_disponiveis’, function ($parametros_disponiveis) {
$parametros_disponiveis[‘Campos Personalizados do Projeto’] = array(
‘{projeto_codigo}’ => ‘Código interno do projeto’,
‘{projeto_responsavel}’ => ‘Responsável pelo projeto’,
);

return $parametros_disponiveis;
});

5. Funções, métodos ou APIs públicas para integração

wootatitas_ccw_obter_configuracoes()

Finalidade: Ler a configuração geral do plugin já com valores padrão.
Como usar: Chame a função após o plugin estar carregado.

Parâmetros: Nenhum

Retorno: array

Exemplo de uso:

if (function_exists(‘wootatitas_ccw_obter_configuracoes’)) {
$config = wootatitas_ccw_obter_configuracoes();

if ($config[‘plugin_ativo’] === ‘sim’) {
// Integração condicional.
}
}

wootatitas_ccw_deve_gerar_contrato($produto_id)

Finalidade: Verificar se um produto específico está dentro da regra atual de geração de contratos.

Como usar: Passe o ID do produto do WooCommerce.

Parâmetros: $produto_id (int) — ID do produto

Retorno: bool

Exemplo de uso:

if (function_exists(‘wootatitas_ccw_deve_gerar_contrato’)) {
$gera = wootatitas_ccw_deve_gerar_contrato(123);

if ($gera) {
// Produto elegível para contrato.
}
}

wootatitas_ccw_pedido_tem_produtos_contratuais($pedido_id)

Finalidade: Verificar se um pedido contém pelo menos um item que deve gerar contrato.
Como usar: Passe o ID do pedido.

Parâmetros: $pedido_id (int) — ID do pedido

Retorno: bool

Exemplo de uso:

if (function_exists(‘wootatitas_ccw_pedido_tem_produtos_contratuais’)) {
if (wootatitas_ccw_pedido_tem_produtos_contratuais($order_id)) {
// Seu fluxo complementar aqui.
}
}

wootatitas_ccw_obter_downloads()

Finalidade: Ler a configuração de disponibilização do contrato por download e e-mail.
Como usar: Útil para integrações que precisam respeitar a política definida no painel.

Parâmetros: Nenhum

Retorno: array

Exemplo de uso:

if (function_exists(‘wootatitas_ccw_obter_downloads’)) {
$downloads = wootatitas_ccw_obter_downloads();

if ($downloads[‘quando_disponibilizar’] === ‘download_email’) {
// Ajuste sua integração conforme a estratégia escolhida.
}
}

wootatitas_ccw_obter_template()

Finalidade: Obter o template atual do contrato.
Como usar: A função retorna o texto do template com placeholders.

Parâmetros: Nenhum

Retorno: string

Exemplo de uso:

if (function_exists(‘wootatitas_ccw_obter_template’)) {
$template = wootatitas_ccw_obter_template();
}

wootatitas_ccw_obter_parametros_disponiveis()

Finalidade: Obter a lista de placeholders disponíveis para uso no template.
Como usar: Útil para montar validações, documentação interna do projeto ou interfaces complementares.

Parâmetros: Nenhum

Retorno: array

Exemplo de uso:

if (function_exists(‘wootatitas_ccw_obter_parametros_disponiveis’)) {
$parametros = wootatitas_ccw_obter_parametros_disponiveis();

foreach ($parametros as $categoria => $itens) {
// Renderizar lista de placeholders
}
}

Observação: não foram identificadas classes públicas pensadas claramente para consumo externo. A integração confirmada é baseada em funções globais e hooks.

6. Endpoints, AJAX, REST API ou Webhooks

wootatitas_ccw_gerar_previa

Tipo: AJAX
Finalidade: Gerar a prévia do contrato no checkout com base no estado atual do formulário.

Parâmetros aceito:

  • action (string) — deve ser wootatitas_ccw_gerar_previa
  • nonce (string) — nonce do frontend do plugin
  • checkout_data (string) — formulário do checkout serializado

Resposta esperada:

  • Em sucesso, retorna a prévia do contrato em texto
  • Em erro, retorna mensagem de falha

Autenticação necessária:

  • Não exige usuário logado
  • Exige nonce válido do frontend do plugin

Exemplo de requisição:

jQuery.ajax({
url: wootatitas_ccw_frontend.ajax_url,
type: ‘POST’,
dataType: ‘json’,
data: {
action: ‘wootatitas_ccw_gerar_previa’,
nonce: wootatitas_ccw_frontend.nonce,
checkout_data: jQuery(‘form.checkout’).serialize()
}
});

Exemplo de resposta:

{
“success”: true,
“data”: {
“previa”: “CONTRATO DE PRESTAÇÃO DE SERVIÇOS\n\n…”,
“timestamp”: 1712345678
}
}

Não foram identificados endpoints REST públicos, webhooks públicos, shortcodes públicos ou blocks do Gutenberg para integração externa.

7. Estruturas de dados relevantes

7.1. Estrutura retornada por wootatitas_ccw_obter_configuracoes()

ChaveTipoDescrição
plugin_ativostringAtiva ou desativa a funcionalidade principal
gerar_parastringRegra de elegibilidade: todos, categorias ou produtos
categorias_selecionadasarrayIDs de categorias selecionadas
produtos_selecionadosarrayIDs de produtos selecionados
exigir_aceitestringDefine se o aceite é obrigatório
texto_aceitestringTexto exibido no checkbox de aceite
previa_contratostringDefine posição da prévia ou se não será exibida

7.2. Estrutura retornada por wootatitas_ccw_obter_downloads()

ChaveTipoDescrição
quando_disponibilizarstringEstratégia de entrega do contrato
email_assuntostringAssunto do e-mail
email_mensagemstringCorpo do e-mail

Valores confirmados para quando_disponibilizar:

ValorSignificado
download_apos_finalizardisponibiliza download após finalizar a compra
email_apenasenvia apenas por e-mail
download_emaildisponibiliza download e também envia por e-mail
7.3 Placeholders do template
O plugin trabalha com placeholders de texto. A lista completa pode ser obtida via wootatitas_ccw_obter_parametros_disponiveis() e filtrada via wootatitas_ccw_parametros_disponiveis.

Grupos confirmados no código:

  • campos nativos do checkout do WooCommerce
  • dados do pedido
  • dados de sistema
  • campos customizados detectados de outros plugins
  • dados do contratado ou dos contratados

Exemplos confirmados:

PlaceholderDescrição
{billing_first_name}nome do cliente
{billing_email}e-mail do cliente
{pedido_numero}número do pedido
{pedido_total}total do pedido
{pedido_itens_lista}lista detalhada dos itens
{contratado_razao_social}razão social do contratado
{contratado_email}e-mail do contratado
{site_nome}nome do site
{data_atual}data atual
7.4 Objeto JS de frontend

No checkout, o plugin expõe o objeto global wootatitas_ccw_frontend:

ChaveTipoDescrição
ajax_urlstringURL do admin-ajax.php
noncestringnonce para a prévia
configobjectconfiguração útil para o frontend
stringsobjectmensagens de interface
7.5 Âncoras de DOM úteis no checkout
Seletores confirmados:
SeletorUso
#wootatitas-ccw-preview-containercontainer da prévia
#wootatitas-ccw-preview-contentconteúdo da prévia
#wootatitas-ccw-aceite-containercontainer do aceite
#wootatitas-ccw-aceitecheckbox de aceite
7.6 Metadados de pedido úteis
O plugin grava metadados no pedido. Os campos abaixo são úteis para leitura em integrações do próprio site:
Meta keyUso
_wootatitas_ccw_aceiteindica se houve aceite
_wootatitas_ccw_aceite_datadata/hora do aceite
_wootatitas_ccw_aceite_ipIP registrado no aceite
_ccw_contrato_geradoindica se o contrato foi gerado
_ccw_contrato_data_geracaodata/hora da geração
_ccw_download_disponivelindica liberação para download
_ccw_download_liberado_emdata/hora da liberação

Observação: o plugin também grava outros metadados internos. Para integração, prefira ler apenas os necessários e evite depender de chaves internas não documentadas aqui.

8. Exemplos práticos de integração

Exemplo 1: adicionar placeholders próprios ao template

add_filter(‘wootatitas_ccw_parametros_disponiveis’, function ($parametros) {
$parametros[‘Integração do Projeto’] = array(
‘{codigo_contrato_interno}’ => ‘Código interno do ERP’,
‘{responsavel_comercial}’ => ‘Responsável comercial’,
);

return $parametros;
});

Exemplo 2: customizar o diretório base de armazenamento

add_filter(‘wootatitas_ccw_storage_base’, function ($base) {
return WP_CONTENT_DIR . ‘/documentos-contratuais’;
});

Exemplo 3: verificar elegibilidade de um produto em código do tema

add_action(‘wootatitas_ccw_bootstrap’, function () {
if (!function_exists(‘wootatitas_ccw_deve_gerar_contrato’)) {
return;
}

$produto_id = 123;

if (wootatitas_ccw_deve_gerar_contrato($produto_id)) {
// Exibir aviso, badge ou lógica complementar.
}
});

Exemplo 4: ler o aceite salvo no pedido

add_action(‘woocommerce_admin_order_data_after_order_details’, function ($order) {
$aceite = $order->get_meta(‘_wootatitas_ccw_aceite’);
$data = $order->get_meta(‘_wootatitas_ccw_aceite_data’);

if ($aceite === ‘sim’) {
echo ‘

Aceite do contrato: Sim

‘;
echo ‘

Data do aceite: ‘ . esc_html($data) . ‘

‘;
}
});

Exemplo 5: disparar a prévia manualmente em customização de checkout

jQuery(function ($) {
$(document.body).on(‘updated_checkout’, function () {
$.post(wootatitas_ccw_frontend.ajax_url, {
action: ‘wootatitas_ccw_gerar_previa’,
nonce: wootatitas_ccw_frontend.nonce,
checkout_data: $(‘form.checkout’).serialize()
});
});
});

9. Boas práticas

  • Verifique function_exists() antes de chamar funções do plugin.
  • Faça integrações depois de plugins_loaded ou usando wootatitas_ccw_bootstrap.
  • Prefira os hooks e getters do plugin em vez de ler opções diretamente no banco.
  • Não grave diretamente em tabelas internas do plugin.
  • Não dependa de caminhos físicos de arquivos nem de detalhes de armazenamento interno.
  • Ao usar wootatitas_ccw_parametros_disponiveis, mantenha o formato esperado: categoria => placeholders.
  • No frontend, reutilize ajax_url e nonce já expostos pelo plugin; não fixe valores manualmente.
  • Em customizações de checkout, considere o evento updated_checkout do WooCommerce para manter a prévia sincronizada.
  • Evite disparar chamadas AJAX em excesso, porque a prévia já é atualizada com frequência durante a edição do checkout.
  • Se sua integração depender de envio por e-mail após mudança de status, mantenha o WP-Cron funcionando corretamente.

10. Limitações e observações

O plugin permite integrar principalmente o fluxo de contrato no checkout, a leitura de estado do contrato no pedido, a customização dos placeholders do template e a adaptação do diretório de armazenamento.

Até o momento, não foram identificados no código:

  • API REST pública própria
  • shortcodes públicos
  • blocks do Gutenberg
  • webhooks públicos
  • comandos WP-CLI públicos
  • custom post types próprios
  • taxonomias próprias
  • sistema formal de template override por arquivos de tema

Também existem rotas e ações administrativas usadas pelo painel do plugin, mas elas não foram tratadas aqui como interface pública para terceiros.

Recursos de licenciamento, atualização protegida, validações privadas e detalhes sensíveis de proteção não fazem parte da superfície pública de integração e não devem ser usados como base para customizações.

O plugin depende de configuração administrativa prévia para funcionar. Sem isso, a integração pode estar tecnicamente carregada, mas sem gerar contratos na prática.

11. Resumo técnico

O plugin oferece integração real por hooks próprios, funções PHP globais, AJAX de prévia no checkout, metadados de pedido e pontos de customização do template e do diretório de armazenamento.
O nível de extensibilidade é bom para integrações em tema, plugin complementar e ajustes de fluxo no WooCommerce, mas não há uma API pública ampla em REST, shortcode ou block.

Os principais cuidados são: integrar só após o bootstrap do plugin, usar os getters públicos, evitar dependência de estruturas internas e não basear customizações em partes protegidas ou administrativas.

Como instalar

Veja nosso guia de como instalar nosso plugin:

Compre nosso plugin

Gostou do que viu? Compre o nosso plugin:

0
    0
    Comprando...
    Nenhum plugin sendo comprado no momento.