Pular para o conteúdo

Plugin WordPress - Garagem

Exiba os imóveis do Garagem CRM no WordPress: busca (filtros, localização, paginação, ordenação), página do imóvel e Anuncie seu imóvel — tudo sincronizado automaticamente.

WordPress.org: wordpress.org/plugins/garagem · Slug: garagem · Compatível com as diretrizes do diretório de plugins

Última atualização: 2026-09-22


O Garagem é um plugin WordPress que conecta seu site ao Garagem CRM via Sites API. Ele renderiza os imóveis no servidor (SSR), garantindo que o conteúdo seja indexável por buscadores, e adiciona interatividade via JavaScript progressivo.

  • Configuração em minutos — Instale, configure o Site ID, adicione um shortcode
  • Sempre atualizado — Imóveis sincronizados em tempo real com o CRM
  • Funciona com qualquer tema — Grade responsiva que se adapta ao layout
  • Busca inteligente — Filtros por tipo, quartos, preço, bairro e mais
  • Páginas de imóveis — Página do imóvel com galeria, descrição, características, formulário de captação de lead (definido no Garagem CRM) e URL completa (ex: /imoveis/sp/sao-paulo/bela-vista/id-145242)
  • Imóveis similares — Na página do imóvel, lista de imóveis similares ao que está sendo visualizado
  • Captura de leads — Formulário integrado ao CRM em cada imóvel
  • Anuncie seu imóvel — Fluxo multi-step de seller lead com shortcode dedicado
  • SEO completo — HTML real, Open Graph, Twitter Cards e JSON-LD estruturado
  • Cache inteligente — WordPress Transients, compatível com plugins de cache
  • Funciona sem JavaScript — Cards, imagens, preços e paginação renderizados no servidor
RequisitoMínimo
WordPress6.0+
PHP7.4+
Conta GaragemCom site publicado

Há três formas principais:

Via WordPress.org (recomendado para novos sites):

  1. Abra wordpress.org/plugins/garagem
  2. Baixe o ZIP ou instale direto pelo painel: Plugins → Adicionar novo → busque por Garagem → Instalar agora → Ativar

Via Garagem CRM:

  1. Acesse Configurações → Canais → Sites → selecione seu site
  2. Abra a seção Integração WordPress
  3. Clique em Baixar plugin

Via URL direta (ZIP hospedado):

https://garagem.site/api/wp-plugin/download
  1. No painel do WordPress, vá em Plugins → Adicionar novo → Enviar plugin
  2. Selecione o arquivo garagem-properties.zip (ou o ZIP baixado do Garagem CRM)
  3. Clique em Instalar agora e depois Ativar

O plugin é instalado na pasta garagem/ (slug do WordPress.org).

  1. Vá em Configurações → Garagem
  2. Configure o Site ID (disponível em Configurações → Canais → Sites no Garagem CRM)
  3. Clique em Testar conexão para verificar
  4. Ajuste as opções de exibição conforme necessário
  5. Clique em Salvar alterações

Adicione um shortcode em qualquer página do WordPress:

  • [garagem_search] para busca e listagem
  • [garagem_property code="145242"] para um imóvel específico
  • [garagem_seller_lead] para o fluxo de Anuncie seu imóvel

O Site ID identifica qual site do Garagem será exibido no WordPress.

  1. No Garagem CRM, acesse Configurações → Canais → Sites
  2. Selecione o site desejado
  3. O Site ID aparece na seção Integração WordPress com botão de copiar
  4. Ou copie da URL: https://app.garagem.ai/configuracoes/sites/{SITE_ID}

O plugin oferece três shortcodes com objetivos diferentes:

  • [garagem_search] — busca e listagem de imóveis
  • [garagem_property] — página completa de um imóvel específico
  • [garagem_seller_lead] — formulário de captação de imóvel (anuncie seu imóvel)

Exibe a grade ou carrossel de imóveis, com filtros, busca (texto e localização), ordenação e paginação. É o shortcode principal da busca.

[garagem_search]
AtributoValoresPadrãoDescrição
displaygrid, carouselgridModo de exibição
layoutconfortavel, compacto, denso, ultra-densoconfortavelDensidade dos cards (não se aplica ao carousel)
property_clickpage, detaildetailAção ao clicar: abrir página ou painel de detalhes
limitNúmero (1-100)12Imóveis por página
hide_searchtrue, falsefalseOcultar formulário de busca e barra de resultados (contagem/ordenação/filtros) — exibe somente a grade de imóveis
new_tabtrue, falsefalseAbrir links de imóveis em nova aba
[garagem_search]

Grade padrão com busca, filtros e 12 imóveis por página.

[garagem_search display="carousel"]

Carousel horizontal de imóveis, ideal para a homepage.

[garagem_search layout="compacto" limit="24" hide_search="true"]

Lista compacta de 24 imóveis, sem formulário de busca.

[garagem_search property_click="detail" new_tab="true"]

Ao clicar, abre um painel lateral com detalhes. Links abrem em nova aba.

Exibe a página completa de um imóvel específico: galeria de fotos, descrição, características, localização e formulário de contato.

[garagem_property code="145242"]
AtributoTipoObrigatórioDescrição
codestringSimCódigo do anúncio (número exibido com # nos cards)

O código do anúncio é o número visível nos cards de imóveis (ex: #145242). Também pode ser encontrado na listagem de anúncios dentro do Garagem CRM.

Exibe o fluxo completo de captação de proprietário (seller lead), com passos para endereço, dados do imóvel, opções de fotos, agendamento e envio ao CRM.

[garagem_seller_lead]
AtributoValoresPadrãoDescrição
photo_moduleenabled, disabledsite configHabilita/desabilita módulo de fotos
photo_modesCSV (upload,schedule,later)site configOpções disponíveis no step de fotos
schedule_disabled_daysCSV (0-6)site configDias bloqueados para agendamento
weekday_time_slotsCSV (09:00,10:00,...)site configHorários para dias úteis
weekend_time_slotsCSV (10:00,11:00,...)site configHorários para fim de semana
property_fieldsCSV (saleValue:required,...)site configCampos do step 2 (uso manual; editor continua como fonte padrão)
background_colorHex colorsite configCor de fundo do bloco
text_colorHex colorsite configCor de texto do bloco
[garagem_seller_lead]
[garagem_seller_lead photo_module="disabled"]
[garagem_seller_lead weekday_time_slots="15:00,16:00" weekend_time_slots="10:00"]

O Garagem CRM inclui um gerador interativo de shortcodes para facilitar a configuração.

  1. No CRM, acesse Configurações → Canais → Sites → selecione o site
  2. Abra a seção Integração WordPress
  3. Use o gerador para configurar visualmente os atributos
  4. Copie o shortcode gerado e adicione na página do WordPress

O gerador permite alternar entre os shortcodes [garagem_search], [garagem_property] e [garagem_seller_lead].


As configurações em Configurações → Garagem servem como valores padrão. Atributos definidos diretamente no shortcode sobrescrevem essas configurações.

ConfiguraçãoDescrição
Site IDUUID do site no Garagem CRM (obrigatório)
Google Maps API KeyOpcional. Sem chave, o [garagem_seller_lead] carrega o mapa em https://maps.fndn.ai/sdk.js. Com chave, esse loader é trocado por maps.googleapis.com
ConfiguraçãoDescrição
Cor primáriaCor de botões, paginação e links. Aplicada no servidor (funciona sem JavaScript). O texto se adapta automaticamente ao contraste
ConfiguraçãoDescrição
LayoutDensidade dos cards: Confortável, Compacto, Denso, Ultra-denso
Modo de exibiçãoGrade ou Carousel
Clique no imóvelAbrir página ou painel de detalhes
Itens por páginaQuantidade de imóveis por página (1-100)
ExibiçãoExibir somente lista (oculta busca e barra de resultados)
Abrir em nova abaLinks de imóveis abrem em nova aba

A opção Abrir imóveis dentro do WordPress (em Páginas de imóveis) afeta a busca: ao clicar em um card na listagem, o visitante vai para a página do imóvel no WordPress em vez de ser redirecionado ao site Garagem. Cada imóvel ganha uma URL própria (ex: https://seusite.com/imoveis/sp/sao-paulo/bela-vista/id-145242), com galeria, descrição, características e formulário de captação de lead configurado no Garagem CRM.

ConfiguraçãoDescrição
HabilitarAbrir imóveis dentro do WordPress (ao clicar no card da busca)
Página basePágina WordPress cujo slug será o caminho base das URLs da página do imóvel (ex: “imoveis”)

O breadcrumb na página do imóvel (Início → Estado → Cidade → Bairro → #código) usa links para a Página base — a página WordPress selecionada em Página base. Essa página pode ser a mesma em que está o shortcode [garagem_search] ou outra. Ao clicar em Estado, Cidade ou Bairro, o visitante vai para a URL da Página base com filtros de localização na query string (ex: ?loc=SP/São Paulo/Bela Vista). Se na Página base houver [garagem_search], verá a listagem filtrada; caso contrário, verá o conteúdo dessa página.

Atenção: Requer permalinks configurados em modo “Nome do post” (ou qualquer modo diferente de “Simples”). Vá em Configurações → Links permanentes para ajustar.

ConfiguraçãoDescrição
Duração (segundos)Padrão 300. Vale só quando uma resposta é gravada sem TTL próprio. Busca, configuração, imóvel e localidades usam os tempos fixos da tabela em Cache e Performance

O cache usa WordPress Transients e é compatível com plugins como WP Super Cache, W3 Total Cache e similares.

AçãoDescrição
Testar conexãoVerifica se o Site ID está correto e acessível
Limpar cacheRemove todos os dados em cache do plugin

As funcionalidades estão organizadas por shortcode para ficar claro onde cada uma se aplica.

  • Busca e filtros — Busca textual (título, descrição, bairro, cidade), tipo de imóvel, tipo de transação (venda/aluguel), quartos, faixa de preço, localização (estado, cidade, bairro) e ordenação. Os filtros são refletidos na URL (query string) para compartilhamento e SEO.
  • Layouts de grade — confortavel, compacto, denso, ultra-denso (atributo layout). Controla a densidade dos cards.
  • Carousel — Com display="carousel", exibe imóveis em carousel horizontal com setas; ideal para destaques na homepage.
  • Painel de detalhes (drawer) — Com property_click="detail", ao clicar em um card abre um painel lateral com os detalhes sem sair da página de busca.
LayoutDescrição
confortavelCards grandes com imagem destacada
compactoCards médios, mais imóveis por linha
densoCards menores, máxima densidade
ultra-densoCards mínimos, ideal para muitos imóveis

[garagem_property] — Conteúdo da página do imóvel

Seção intitulada “[garagem_property] — Conteúdo da página do imóvel”

O shortcode [garagem_property code="…"] renderiza o mesmo conteúdo da página do imóvel (galeria, descrição, características, preço, localização, formulário de lead, similares) em qualquer página ou post onde você colocá-lo. Serve para embutir um imóvel específico fora da busca.

A funcionalidade Páginas de imóveis (“Abrir imóveis dentro do WordPress”) é independente: ela afeta a busca. Quando habilitada, ao clicar em um card na listagem ([garagem_search]), o visitante vai para a página do imóvel no WordPress (uma URL por imóvel, ex: /imoveis/sp/sao-paulo/bela-vista/id-145242), com o mesmo conteúdo que o shortcode [garagem_property] exibe.

Conteúdo (shortcode e página do imóvel):

  • Galeria de fotos com navegação e tela cheia
  • Descrição completa
  • Características do imóvel e do condomínio
  • Informações de preço (venda/aluguel, condomínio, IPTU)
  • Localização (bairro, cidade, estado)
  • Formulário de captação de lead (configurado no Garagem CRM)
  • Imóveis similares
  • Fluxo multi-step com validações por etapa
  • Captura de endereço e dados do proprietário
  • Configuração de campos do imóvel (step 2) via editor/site config
  • Opções de fotos: upload, agendar ou depois
  • Agendamento com dias/horários configuráveis
  • Estados de envio, sucesso e erro

O plugin gera SEO completo automaticamente, sem necessidade de configuração adicional.

Para a página do imóvel, o plugin injeta:

  • <title> otimizado: “Apartamento em Copacabana - 2 quartos • 75m² • R$ 850.000 | Imobiliária”
  • <meta name="description"> com descrição do imóvel (até 160 caracteres)
  • <link rel="canonical"> com URL canônica
  • Open Graph (og:title, og:description, og:image, og:url, og:site_name)
  • Twitter Cards (twitter:card, twitter:title, twitter:description, twitter:image)

O plugin gera schemas Schema.org para rich results no Google:

Página do imóvel:

  • RealEstateListing — Com nome, descrição, imagens, preço e tipo de transação
  • Accommodation — Tipo (Apartment/House), quartos, banheiros, área, endereço, coordenadas
  • Offer / OfferForLease — Preço em BRL
  • BreadcrumbList — Navegação hierárquica (Início → Estado → Cidade → Bairro → Imóvel). Os links apontam para a Página base (configuração do plugin) com filtros de localização na query string.

Página de busca:

  • ItemList — Lista dos imóveis com posição, nome, URL e preço
  • BreadcrumbList — Navegação (Início → Página de imóveis)

Todo o conteúdo é renderizado no servidor como HTML real. Buscadores indexam:

  • Cards de imóveis com título, preço, características e imagem
  • Paginação com links de navegação
  • Breadcrumbs de localização
  • Conteúdo completo da página do imóvel

JavaScript apenas adiciona interatividade (galeria fullscreen, filtros dinâmicos, captura de leads). A cor primária é aplicada no servidor via CSS inline, funcionando corretamente mesmo sem JavaScript.


  • Página de busca/listagem — É a própria página do WordPress onde você colocou o shortcode [garagem_search]. A URL é a da página (ex: https://seusite.com/imoveis/). Os filtros (tipo, preço, localização, etc.) vão na query string (ex: ?loc=SP/São Paulo/Bela Vista&listing_type=venda), não em segmentos do path. Não há URLs segmentadas tipo /imoveis/venda/ ou /imoveis/sp/sao-paulo/ que o WordPress interprete como páginas distintas.

  • Página do imóvel — Quando Páginas de imóveis está habilitado, cada imóvel tem uma URL amigável no path, no formato:

    • /{slug-da-pagina-base}/id-145242 (acesso direto pelo código), ou
    • /{slug-da-pagina-base}/sp/sao-paulo/bela-vista/id-145242 (path com localização para SEO).
    • /{slug-da-pagina-base}/venda/sp/sao-paulo/bela-vista/id-145242 quando o tenant anuncia venda e aluguel, o detalhe unificado está desligado e includeListingType não é false. O segmento é venda ou aluguel.

    O slug-da-pagina-base é o da página selecionada em Página base (ex: “imoveis”). O breadcrumb na página do imóvel usa links para a Página base, com parâmetros de localização na query string.


O plugin utiliza WordPress Transients com TTLs por tipo de dado:

DadoTTL PadrãoMotivo
Configuração do site5 minutosRaramente muda
Resultados de busca1 minutoImóveis podem ser atualizados
Detalhes do imóvel5 minutosDados estáveis
Localizações30 minutosMudanças muito raras

O campo Duração (segundos) em Configurações → Garagem → Cache não substitui esses TTLs. Eles estão fixos no cliente PHP. O campo só entra quando o cache é gravado sem um TTL explícito.

Compatível com plugins de cache populares:

  • WP Super Cache
  • W3 Total Cache
  • LiteSpeed Cache
  • WP Rocket
  • Cloudflare

Use o botão Limpar cache na página de configurações, ou limpe via código:

Garagem_Cache::clear_all();

O plugin consome os seguintes endpoints da Sites API:

EndpointUso no Plugin
GET /api/sites/resolveConfiguração e teste de conexão
POST /api/sites/{siteId}/searchBusca e listagem de imóveis
GET /api/sites/{siteId}/property/{id}Detalhes do imóvel
GET /api/sites/{siteId}/locationsLocalizações para filtros e URLs
POST /api/webhooks/sites/{siteId}/leadsEnvio de leads (property + seller lead)
POST /api/webhooks/sites/{siteId}/photosUpload de fotos do seller lead

Notas rápidas:

  • As chamadas usam HTTPS.
  • Endpoints de leitura (resolve, search, property, locations) retornam dados públicos e passam por cache local (WordPress Transients).
  • Endpoints de submit (/webhooks/sites/{siteId}/leads e /webhooks/sites/{siteId}/photos) recebem input público por design do plugin.

Security note: os endpoints de submit aplicam validação server-side, honeypot e rate limit. Não inclua segredos (tokens/chaves) em tema, JavaScript público ou payloads de exemplo.


Além dos shortcodes, o plugin expõe helpers para integração em tema/plugin custom, sem acoplar layout.

  • garagem_get_property_lead_submit_url(array $args = [])
  • garagem_the_property_lead_submit_url(array $args = [])
  • garagem_get_seller_lead_submit_url(array $args = [])
  • garagem_the_seller_lead_submit_url(array $args = [])

$args suportados:

  • redirect_to (opcional): URL de retorno no fluxo action
  • response (opcional): use json para fluxo fetch
  • include_status_token (opcional, bool): inclui token one-time para leitura de status pós-redirect

Se redirect_to não for enviado, o plugin usa a URL atual da request.

Notas de segurança:

  • O fluxo de submit é público por design (sem nonce obrigatório) e aplica validação server-side, honeypot e rate limit.
  • Flags da request nesse fluxo são lidas de $_POST/$_GET com sanitização explícita (sem leitura ampla de $_REQUEST).
  • garagem_get_lead_submit_status(): ?array
  • garagem_has_lead_submit_error(): bool
  • garagem_get_lead_submit_message(string $fallback = ''): string
  • garagem_get_seller_lead_config(array $args = [])

Retorna config já normalizada para uso em templates custom:

  • showPhotoModule
  • photoOptions
  • photoSchedulingConfig (disabledDays, weekdayTimeSlots, weekendTimeSlots)
  • fieldsConfig.step2Fields (com constraints)
  • propertyTypeOptions, cores e chave de maps

Para depuração sem cache:

garagem_get_seller_lead_config( array( 'force_refresh' => true ) );

No fluxo de submit seller, o plugin aceita:

  • fotos como arquivo (photos[] ou file) em multipart/form-data
  • campos de agendamento (photoScheduling_date, photoScheduling_time)

As fotos são validadas e enviadas para:

  • POST /api/webhooks/sites/{siteId}/photos

Depois, as URLs resultantes entram no payload final enviado para:

  • POST /api/webhooks/sites/{siteId}/leads

Além dos shortcodes, o plugin expõe helpers de leitura para construir busca/listagem e detalhe no tema com semântica WordPress-like.

  • garagem_query_properties(array $args = [])
  • garagem_get_properties(array $args = [])
  • garagem_have_properties()
  • garagem_the_property()
  • garagem_reset_propertydata()

Métodos úteis do objeto Garagem_Query:

  • have_properties()
  • the_property()
  • get_property_data()
  • reset_properties()
  • get_properties_pagination()
  • garagem_get_search_params(int $per_page = 12)
    Lê e normaliza parâmetros da URL (query, paginação, filtros e ordenação).
  • garagem_get_search_query_args(int $per_page = 12)
    Converte parâmetros normalizados no payload pronto para API.
  • garagem_get_search_filter_params()
    Retorna o contrato público dos filtros (tipo, multi, chave de URL).
  • garagem_get_search_filter_options(array $args = [])
    Retorna opções de facets para montar selects/checkboxes no tema.
  • garagem_get_search_page_url(int $page, ?array $search_params = null)
    Gera URL de paginação preservando filtros ativos.

garagem_get_search_filter_options() aceita:

  • per_page
  • search_params
  • use_current_filters (default: false)
  • use_current_query (default: false)
  • include_counts (default: true)
  • garagem_property(array $args = [])

Argumentos aceitos:

  • code (opcional): código explícito do imóvel.
  • include (opcional): blocos que devem ser populados. Default: ['data'].
  • exclude (opcional): chaves de topo ou caminhos com ponto para remoção. Exemplo: ['data.imageUrls', 'data.propertyFeatures'].
  • force_refresh (opcional, bool): ignora cache em blocos que suportam refresh, incluindo contexto de imóvel resolvido por rota e configuração de lead.

Shape de retorno (sempre estável):

  • data: payload canônico do imóvel (valores raw preservados).
  • urls: URLs derivadas (ex.: URL pública do imóvel).
  • lead: contexto de lead (config, submitUrls).
  • meta: metadados de resolução (found, source, code, errorCode, errorMessage).

Regras:

  • Valores canônicos não são transformados (boolean continua boolean, número continua valor raw).
  • Traduções ficam em campos paralelos (ex.: propertyTypeLabel), sem sobrescrever os ids canônicos.
  • Esta API não adiciona preço formatado (priceFormatted).

As micro-template-tags antigas de property foram removidas para manter um único ponto de entrada: garagem_property().

<?php
$search_params = garagem_get_search_params( 12 );
$query_args = garagem_get_search_query_args( 12 );
$query = garagem_get_properties( $query_args );
$filter_params = garagem_get_search_filter_params();
$filter_options = garagem_get_search_filter_options(
array(
'search_params' => $search_params,
)
);
if ( $query instanceof Garagem_Query && garagem_have_properties() ) :
while ( garagem_have_properties() ) :
garagem_the_property();
$property = garagem_property(
array(
'include' => array( 'data', 'urls' ),
)
);
$title = (string) ( $property['data']['propertyTitle'] ?? '' );
$url = (string) ( $property['urls']['property'] ?? '' );
?>
<a href="<?php echo esc_url( $url ); ?>"><?php echo esc_html( $title ); ?></a>
<?php
endwhile;
garagem_reset_propertydata();
endif;

Exemplo de contexto único do imóvel (data + urls + lead)

Seção intitulada “Exemplo de contexto único do imóvel (data + urls + lead)”
<?php
$property = garagem_property(
array(
'include' => array( 'data', 'urls', 'lead' ),
'exclude' => array( 'data.imageUrls', 'data.propertyFeatures' ),
)
);
if ( ! empty( $property['meta']['found'] ) ) :
$data = $property['data'];
?>
<h1><?php echo esc_html( (string) ( $data['propertyTitle'] ?? '' ) ); ?></h1>
<p><?php echo esc_html( (string) ( $data['propertyTypeLabel'] ?? $data['propertyType'] ?? '' ) ); ?></p>
<p><?php echo esc_html( (string) ( $property['urls']['property'] ?? '' ) ); ?></p>
<?php
endif;

O plugin consulta a API do Garagem a cada requisição (com cache). Quando você adiciona, atualiza ou vende um imóvel no CRM, a mudança aparece no WordPress assim que o cache expira (padrão: 1-5 minutos).

Sim. O plugin usa uma grade CSS responsiva que se adapta a qualquer tema. Você pode customizar a cor primária nas configurações ou sobrescrever classes CSS no seu tema.

Posso usar múltiplos shortcodes na mesma página?

Seção intitulada “Posso usar múltiplos shortcodes na mesma página?”

Sim. Você pode combinar shortcodes, por exemplo:

[garagem_search display="carousel" limit="6" hide_search="true"]
[garagem_search layout="compacto" limit="24"]

Isso exibe um carousel de destaques seguido de uma grade completa.

Não. O plugin apenas busca dados públicos de imóveis. Nenhum cookie é criado, nenhum dado de visitante é coletado e nenhuma informação pessoal é enviada a serviços externos. O envio de dados (nome, e-mail, telefone e dados do imóvel) ocorre somente quando o visitante envia voluntariamente um formulário de lead no site.

Sim. Todas as classes CSS do plugin usam o prefixo garagem-. Você pode sobrescrever no seu tema:

.garagem-card {
/* personalizar card */
}
.garagem-search-bar {
/* personalizar busca */
}
.garagem-property-single {
/* personalizar página do imóvel */
}
  1. Verifique a conexão em Configurações → Garagem → Testar conexão
  2. Limpe o cache do plugin
  3. Verifique se o site está publicado no Garagem CRM
  4. Ative SCRIPT_DEBUG no wp-config.php para carregar scripts não-minificados:
define( 'SCRIPT_DEBUG', true );

O plugin é distribuído com a pasta raiz garagem/ (slug do WordPress.org):

garagem/
├── garagem-properties.php # Arquivo principal (bootstrap, assets, rewrite rules)
├── includes/
│ ├── class-garagem-api.php # Cliente HTTP para a Sites API
│ ├── class-garagem-cache.php # Cache via WordPress Transients
│ ├── class-garagem-shortcodes.php # Registro e renderização de shortcodes
│ ├── class-garagem-admin.php # Página de configurações no admin
│ ├── class-garagem-seo.php # Meta tags, Open Graph, JSON-LD
│ ├── class-garagem-url-handler.php # URLs SEO-friendly (parse e geração)
│ ├── class-garagem-search-params.php # Conversão de filtros → API params
│ └── renderers/ # Componentes de renderização HTML (SSR)
│ ├── class-garagem-render-card.php
│ ├── class-garagem-render-search.php
│ ├── class-garagem-render-property.php
│ ├── class-garagem-render-gallery.php
│ ├── class-garagem-render-features.php
│ ├── class-garagem-render-pagination.php
│ └── ...
├── templates/
│ └── single-property.php # Template da página do imóvel
├── assets/ # CSS/JS minificados (produção)
└── src/ # CSS/JS fonte (desenvolvimento)

O plugin expõe window.garagemConfig para os scripts:

{
siteId: "uuid-do-site",
siteUrl: "https://seusite.com/", // Vazio se páginas de imóveis desabilitadas
propertyBasePath: "imoveis",
apiBase: "https://cdn.fndn.ai/site/api/sites",
itemsPerPage: 12,
primaryColor: "#0a0a0a", // null se não definido; também aplicada no servidor (SSR) para funcionar sem JS
newTab: false,
i18n: { loading: "Carregando...", noResults: "Nenhum imóvel encontrado.", ... }
}
Hook/FiltroTipoDescrição
garagem_properties_enqueue_assetsactionEnfileira CSS e JS do plugin
pre_get_document_titlefilterSobrescreve <title> em páginas de imóveis
template_includefilterCarrega template de página individual
query_varsfilterRegistra garagem_property_code
OpçãoTipoPadrãoDescrição
garagem_site_idstring""UUID do site
garagem_google_maps_api_keystring""Chave do Google Maps (seller lead)
garagem_default_colorstring""Cor primária (hex)
garagem_default_layoutstringconfortavelLayout padrão
garagem_default_displaystringgridModo de exibição padrão
garagem_default_property_clickstringdetailAção ao clicar
garagem_items_per_pageinteger12Itens por página
garagem_default_hide_searchbooleanfalseOcultar busca
garagem_default_new_tabbooleanfalseNova aba
garagem_property_pagesbooleanfalsePáginas de imóveis ativas
garagem_property_base_pageinteger0ID da página base
garagem_property_destination_pageinteger0ID da página de destino para layout custom da rota de imóvel
garagem_cache_durationinteger300Duração do cache (segundos)

Runbook de Entrega (localhost -> compliance -> SVN)

Seção intitulada “Runbook de Entrega (localhost -> compliance -> SVN)”

Este runbook define o fluxo oficial de entrega do plugin com 4 etapas gateadas. Nao deve haver release em WordPress.org/SVN sem aprovacoes das etapas anteriores.

Objetivo: implementar o shortcode novo (ex.: seller lead) e integracoes necessarias.

Saida minima da etapa:

  • shortcode renderiza em pagina WordPress sem erro
  • fluxo de submit funcional para os endpoints previstos
  • sem regressao em [garagem_search] e [garagem_property]

Gate para avancar:

  • aprovacao tecnica local da implementacao

Etapa 2 - Testar e validar completamente no localhost

Seção intitulada “Etapa 2 - Testar e validar completamente no localhost”

Ambiente oficial de validacao:

  • http://localhost:8080/wp-admin/

Checklist obrigatorio:

  1. Regressao dos fluxos atuais
    • busca/listagem ([garagem_search])
    • pagina/detalhe ([garagem_property])
    • lead/agendamento existente no detalhe
  2. Fluxo completo do novo shortcode
    • validacoes por etapa
    • sucesso/erro de submit
    • cenarios com e sem fotos/agendamento (quando aplicavel)
  3. Admin
    • Testar conexão
    • Limpar cache
    • defaults de configuracao
  4. Sem JavaScript (degradacao)
    • pagina nao quebra e o conteudo essencial continua acessivel
  5. Re-test pos-fix
    • toda correcao feita nesta etapa deve ser revalidada

Gate para avancar:

  • todos os cenarios criticos aprovados manualmente no localhost

Etapa 3 - Validar conformidade WordPress.org e readiness de release

Seção intitulada “Etapa 3 - Validar conformidade WordPress.org e readiness de release”

Objetivo: garantir que o que foi implementado e testado esta pronto para distribuicao.

Checklist de conformidade:

  • Plugin Check sem erros bloqueantes
  • readme.txt atualizado (shortcode novo, external services, changelog)
  • Version em garagem-properties.php e Stable tag no readme.txt sincronizados
  • ZIP com pasta raiz garagem/
  • revisao de diretrizes aplicaveis:
    • SaaS e documentacao de dados externos
    • privacidade/consentimento (sem tracking indevido)
    • legibilidade de codigo e assets locais
    • versionamento e release process

Referencia oficial:

Gate para avancar:

  • checklist de release 100% verde

Etapa 4 - Deploy via SVN (somente com gates aprovados)

Seção intitulada “Etapa 4 - Deploy via SVN (somente com gates aprovados)”

Seguir o guia:

  • apps/site/wordpress-plugin/docs/svn-deploy.md

Resumo operacional:

  1. atualizar versao (Version + Stable tag + changelog)
  2. sincronizar trunk/ (php, assets, src)
  3. svn add --force + remover deletados
  4. commit de release no trunk
  5. criar tag tags/X.Y.Z
  6. commit da tag

Validar em https://wordpress.org/plugins/garagem/:

  • nova versao visivel na pagina
  • changelog da versao publicado
  • ZIP da versao nova disponivel

Validar no wp-admin:

  1. ambiente com versao anterior do plugin ativa
  2. abrir Dashboard -> Updates e Plugins
  3. confirmar que update da versao nova aparece
  4. executar update pelo painel
  5. confirmar versao final e rodar smoke test funcional

Observacao:

  • Pode haver janela de propagacao entre commit/tag no SVN e disponibilidade do update no painel.