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
Visão Geral
Seção intitulada “Visão Geral”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.
Destaques
Seção intitulada “Destaques”- 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
Requisitos
Seção intitulada “Requisitos”| Requisito | Mínimo |
|---|---|
| WordPress | 6.0+ |
| PHP | 7.4+ |
| Conta Garagem | Com site publicado |
Instalação
Seção intitulada “Instalação”1. Obter o plugin
Seção intitulada “1. Obter o plugin”Há três formas principais:
Via WordPress.org (recomendado para novos sites):
- Abra wordpress.org/plugins/garagem
- Baixe o ZIP ou instale direto pelo painel: Plugins → Adicionar novo → busque por Garagem → Instalar agora → Ativar
Via Garagem CRM:
- Acesse Configurações → Canais → Sites → selecione seu site
- Abra a seção Integração WordPress
- Clique em Baixar plugin
Via URL direta (ZIP hospedado):
https://garagem.site/api/wp-plugin/download2. Instalar a partir do ZIP (CRM ou URL)
Seção intitulada “2. Instalar a partir do ZIP (CRM ou URL)”- No painel do WordPress, vá em Plugins → Adicionar novo → Enviar plugin
- Selecione o arquivo
garagem-properties.zip(ou o ZIP baixado do Garagem CRM) - Clique em Instalar agora e depois Ativar
O plugin é instalado na pasta
garagem/(slug do WordPress.org).
3. Configurar
Seção intitulada “3. Configurar”- Vá em Configurações → Garagem
- Configure o Site ID (disponível em Configurações → Canais → Sites no Garagem CRM)
- Clique em Testar conexão para verificar
- Ajuste as opções de exibição conforme necessário
- Clique em Salvar alterações
4. Adicionar ao Site
Seção intitulada “4. Adicionar ao Site”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
Onde Encontrar o Site ID
Seção intitulada “Onde Encontrar o Site ID”O Site ID identifica qual site do Garagem será exibido no WordPress.
- No Garagem CRM, acesse Configurações → Canais → Sites
- Selecione o site desejado
- O Site ID aparece na seção Integração WordPress com botão de copiar
- Ou copie da URL:
https://app.garagem.ai/configuracoes/sites/{SITE_ID}
Shortcodes
Seção intitulada “Shortcodes”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)
[garagem_search] — Busca e Listagem
Seção intitulada “[garagem_search] — Busca e Listagem”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]Atributos
Seção intitulada “Atributos”| Atributo | Valores | Padrão | Descrição |
|---|---|---|---|
display | grid, carousel | grid | Modo de exibição |
layout | confortavel, compacto, denso, ultra-denso | confortavel | Densidade dos cards (não se aplica ao carousel) |
property_click | page, detail | detail | Ação ao clicar: abrir página ou painel de detalhes |
limit | Número (1-100) | 12 | Imóveis por página |
hide_search | true, false | false | Ocultar formulário de busca e barra de resultados (contagem/ordenação/filtros) — exibe somente a grade de imóveis |
new_tab | true, false | false | Abrir links de imóveis em nova aba |
Exemplos
Seção intitulada “Exemplos”[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.
[garagem_property] — Detalhes de um Imóvel
Seção intitulada “[garagem_property] — Detalhes de um Imóvel”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"]Atributos
Seção intitulada “Atributos”| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
code | string | Sim | Có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.
[garagem_seller_lead] — Anuncie seu imóvel
Seção intitulada “[garagem_seller_lead] — Anuncie seu imóvel”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]Atributos
Seção intitulada “Atributos”| Atributo | Valores | Padrão | Descrição |
|---|---|---|---|
photo_module | enabled, disabled | site config | Habilita/desabilita módulo de fotos |
photo_modes | CSV (upload,schedule,later) | site config | Opções disponíveis no step de fotos |
schedule_disabled_days | CSV (0-6) | site config | Dias bloqueados para agendamento |
weekday_time_slots | CSV (09:00,10:00,...) | site config | Horários para dias úteis |
weekend_time_slots | CSV (10:00,11:00,...) | site config | Horários para fim de semana |
property_fields | CSV (saleValue:required,...) | site config | Campos do step 2 (uso manual; editor continua como fonte padrão) |
background_color | Hex color | site config | Cor de fundo do bloco |
text_color | Hex color | site config | Cor de texto do bloco |
Exemplos
Seção intitulada “Exemplos”[garagem_seller_lead][garagem_seller_lead photo_module="disabled"][garagem_seller_lead weekday_time_slots="15:00,16:00" weekend_time_slots="10:00"]Gerador de Shortcodes
Seção intitulada “Gerador de Shortcodes”O Garagem CRM inclui um gerador interativo de shortcodes para facilitar a configuração.
- No CRM, acesse Configurações → Canais → Sites → selecione o site
- Abra a seção Integração WordPress
- Use o gerador para configurar visualmente os atributos
- 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].
Configurações do Plugin
Seção intitulada “Configurações do Plugin”As configurações em Configurações → Garagem servem como valores padrão. Atributos definidos diretamente no shortcode sobrescrevem essas configurações.
Conexão
Seção intitulada “Conexão”| Configuração | Descrição |
|---|---|
| Site ID | UUID do site no Garagem CRM (obrigatório) |
| Google Maps API Key | Opcional. 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ção | Descrição |
|---|---|
| Cor primária | Cor de botões, paginação e links. Aplicada no servidor (funciona sem JavaScript). O texto se adapta automaticamente ao contraste |
Busca e Listagem
Seção intitulada “Busca e Listagem”| Configuração | Descrição |
|---|---|
| Layout | Densidade dos cards: Confortável, Compacto, Denso, Ultra-denso |
| Modo de exibição | Grade ou Carousel |
| Clique no imóvel | Abrir página ou painel de detalhes |
| Itens por página | Quantidade de imóveis por página (1-100) |
| Exibição | Exibir somente lista (oculta busca e barra de resultados) |
| Abrir em nova aba | Links de imóveis abrem em nova aba |
Páginas de imóveis
Seção intitulada “Páginas de imóveis”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ção | Descrição |
|---|---|
| Habilitar | Abrir imóveis dentro do WordPress (ao clicar no card da busca) |
| Página base | Pá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ção | Descriçã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ção | Descrição |
|---|---|
| Testar conexão | Verifica se o Site ID está correto e acessível |
| Limpar cache | Remove todos os dados em cache do plugin |
Funcionalidades por shortcode
Seção intitulada “Funcionalidades por shortcode”As funcionalidades estão organizadas por shortcode para ficar claro onde cada uma se aplica.
[garagem_search] — Busca e listagem
Seção intitulada “[garagem_search] — Busca e listagem”- 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(atributolayout). 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.
| Layout | Descrição |
|---|---|
confortavel | Cards grandes com imagem destacada |
compacto | Cards médios, mais imóveis por linha |
denso | Cards menores, máxima densidade |
ultra-denso | Cards 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
[garagem_seller_lead] — Anuncie seu imóvel
Seção intitulada “[garagem_seller_lead] — Anuncie seu imóvel”- 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.
Meta Tags
Seção intitulada “Meta Tags”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)
JSON-LD (Dados Estruturados)
Seção intitulada “JSON-LD (Dados Estruturados)”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çãoAccommodation— Tipo (Apartment/House), quartos, banheiros, área, endereço, coordenadasOffer/OfferForLease— Preço em BRLBreadcrumbList— 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çoBreadcrumbList— Navegação (Início → Página de imóveis)
Server-Side Rendering (SSR)
Seção intitulada “Server-Side Rendering (SSR)”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.
URLs: busca vs. página do imóvel
Seção intitulada “URLs: busca vs. página do imóvel”-
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-145242quando o tenant anuncia venda e aluguel, o detalhe unificado está desligado eincludeListingTypenão éfalse. O segmento évendaoualuguel.
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.
Cache e Performance
Seção intitulada “Cache e Performance”Estratégia de Cache
Seção intitulada “Estratégia de Cache”O plugin utiliza WordPress Transients com TTLs por tipo de dado:
| Dado | TTL Padrão | Motivo |
|---|---|---|
| Configuração do site | 5 minutos | Raramente muda |
| Resultados de busca | 1 minuto | Imóveis podem ser atualizados |
| Detalhes do imóvel | 5 minutos | Dados estáveis |
| Localizações | 30 minutos | Mudanç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.
Compatibilidade
Seção intitulada “Compatibilidade”Compatível com plugins de cache populares:
- WP Super Cache
- W3 Total Cache
- LiteSpeed Cache
- WP Rocket
- Cloudflare
Limpar Cache
Seção intitulada “Limpar Cache”Use o botão Limpar cache na página de configurações, ou limpe via código:
Garagem_Cache::clear_all();Integração com a Sites API
Seção intitulada “Integração com a Sites API”O plugin consome os seguintes endpoints da Sites API:
| Endpoint | Uso no Plugin |
|---|---|
GET /api/sites/resolve | Configuração e teste de conexão |
POST /api/sites/{siteId}/search | Busca e listagem de imóveis |
GET /api/sites/{siteId}/property/{id} | Detalhes do imóvel |
GET /api/sites/{siteId}/locations | Localizações para filtros e URLs |
POST /api/webhooks/sites/{siteId}/leads | Envio de leads (property + seller lead) |
POST /api/webhooks/sites/{siteId}/photos | Upload 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}/leadse/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.
Backoffice Lead Submit DX (Action + Fetch)
Seção intitulada “Backoffice Lead Submit DX (Action + Fetch)”Além dos shortcodes, o plugin expõe helpers para integração em tema/plugin custom, sem acoplar layout.
Helpers de URL de submit
Seção intitulada “Helpers de URL de submit”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 actionresponse(opcional): usejsonpara fluxo fetchinclude_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/$_GETcom sanitização explícita (sem leitura ampla de$_REQUEST).
Helpers de status pós-submit
Seção intitulada “Helpers de status pós-submit”garagem_get_lead_submit_status(): ?arraygaragem_has_lead_submit_error(): boolgaragem_get_lead_submit_message(string $fallback = ''): string
Configuração normalizada do seller lead
Seção intitulada “Configuração normalizada do seller lead”garagem_get_seller_lead_config(array $args = [])
Retorna config já normalizada para uso em templates custom:
showPhotoModulephotoOptionsphotoSchedulingConfig(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 ) );Upload de fotos no seller lead
Seção intitulada “Upload de fotos no seller lead”No fluxo de submit seller, o plugin aceita:
- fotos como arquivo (
photos[]oufile) emmultipart/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
Backoffice Data DX (Read APIs)
Seção intitulada “Backoffice Data DX (Read APIs)”Além dos shortcodes, o plugin expõe helpers de leitura para construir busca/listagem e detalhe no tema com semântica WordPress-like.
Helpers de loop e dados
Seção intitulada “Helpers de loop e dados”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()
Helpers de busca/filtros
Seção intitulada “Helpers de busca/filtros”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_pagesearch_paramsuse_current_filters(default:false)use_current_query(default:false)include_counts(default:true)
Helper principal de detalhe do imóvel
Seção intitulada “Helper principal de detalhe do imóvel”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().
Exemplo de uso no tema (listagem + loop)
Seção intitulada “Exemplo de uso no tema (listagem + loop)”<?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> <?phpendif;Perguntas Frequentes
Seção intitulada “Perguntas Frequentes”Como os dados sincronizam?
Seção intitulada “Como os dados sincronizam?”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).
Funciona com meu tema?
Seção intitulada “Funciona com meu tema?”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.
O plugin coleta dados de visitantes?
Seção intitulada “O plugin coleta dados de visitantes?”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.
Posso personalizar o CSS?
Seção intitulada “Posso personalizar o CSS?”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 */}Como depurar problemas?
Seção intitulada “Como depurar problemas?”- Verifique a conexão em Configurações → Garagem → Testar conexão
- Limpe o cache do plugin
- Verifique se o site está publicado no Garagem CRM
- Ative
SCRIPT_DEBUGnowp-config.phppara carregar scripts não-minificados:
define( 'SCRIPT_DEBUG', true );Referência Técnica
Seção intitulada “Referência Técnica”Arquitetura
Seção intitulada “Arquitetura”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)Variável JavaScript Global
Seção intitulada “Variável JavaScript Global”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.", ... }}Hooks e Filtros
Seção intitulada “Hooks e Filtros”| Hook/Filtro | Tipo | Descrição |
|---|---|---|
garagem_properties_enqueue_assets | action | Enfileira CSS e JS do plugin |
pre_get_document_title | filter | Sobrescreve <title> em páginas de imóveis |
template_include | filter | Carrega template de página individual |
query_vars | filter | Registra garagem_property_code |
Opções do WordPress (wp_options)
Seção intitulada “Opções do WordPress (wp_options)”| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
garagem_site_id | string | "" | UUID do site |
garagem_google_maps_api_key | string | "" | Chave do Google Maps (seller lead) |
garagem_default_color | string | "" | Cor primária (hex) |
garagem_default_layout | string | confortavel | Layout padrão |
garagem_default_display | string | grid | Modo de exibição padrão |
garagem_default_property_click | string | detail | Ação ao clicar |
garagem_items_per_page | integer | 12 | Itens por página |
garagem_default_hide_search | boolean | false | Ocultar busca |
garagem_default_new_tab | boolean | false | Nova aba |
garagem_property_pages | boolean | false | Páginas de imóveis ativas |
garagem_property_base_page | integer | 0 | ID da página base |
garagem_property_destination_page | integer | 0 | ID da página de destino para layout custom da rota de imóvel |
garagem_cache_duration | integer | 300 | Duraçã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.
Etapa 1 - Construir o novo shortcode
Seção intitulada “Etapa 1 - Construir o novo shortcode”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:
- Regressao dos fluxos atuais
- busca/listagem (
[garagem_search]) - pagina/detalhe (
[garagem_property]) - lead/agendamento existente no detalhe
- busca/listagem (
- Fluxo completo do novo shortcode
- validacoes por etapa
- sucesso/erro de submit
- cenarios com e sem fotos/agendamento (quando aplicavel)
- Admin
- Testar conexão
- Limpar cache
- defaults de configuracao
- Sem JavaScript (degradacao)
- pagina nao quebra e o conteudo essencial continua acessivel
- 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.txtatualizado (shortcode novo, external services, changelog)Versionemgaragem-properties.phpeStable tagnoreadme.txtsincronizados- 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:
- atualizar versao (
Version+Stable tag+ changelog) - sincronizar
trunk/(php, assets, src) svn add --force+ remover deletados- commit de release no
trunk - criar tag
tags/X.Y.Z - commit da tag
Verificacao pos-deploy (obrigatoria)
Seção intitulada “Verificacao pos-deploy (obrigatoria)”A) WordPress.org
Seção intitulada “A) WordPress.org”Validar em https://wordpress.org/plugins/garagem/:
- nova versao visivel na pagina
- changelog da versao publicado
- ZIP da versao nova disponivel
B) Atualizacao pelo painel WordPress
Seção intitulada “B) Atualizacao pelo painel WordPress”Validar no wp-admin:
- ambiente com versao anterior do plugin ativa
- abrir
Dashboard -> UpdatesePlugins - confirmar que update da versao nova aparece
- executar update pelo painel
- 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.