# JetEngine — Query Builder e Listings ## Query Builder Avançado ### Tipos de Query e Configuração #### Query Posts ``` Campos principais: ├── Post Type: CPT ou post/page ├── Post Status: publish / draft / any ├── Posts per page: N (ou -1 para todos) ├── Order: ASC / DESC ├── Order By: date / title / menu_order / meta_value / meta_value_num / rand │ └── Se meta_value: seleccionar meta key ├── Meta Query (múltiplas condições): │ ├── Field: meta key name │ ├── Type: CHAR / NUMERIC / DATE │ ├── Operator: = / != / > / < / BETWEEN / LIKE / IN / NOT IN / EXISTS │ └── Value: valor ou macro (%current_user_id%) └── Tax Query: ├── Taxonomy: seleccionar taxonomy ├── Operator: IN / NOT IN / AND └── Terms: valores ou relação dinâmica ``` #### Query CCT ``` Campos principais: ├── Content Type: seleccionar CCT ├── Items per page: N ├── Order By: qualquer coluna do CCT ├── Filters (equivalente a Meta Query): │ ├── Field: coluna do CCT │ ├── Operator: = / != / > / LIKE / IN │ └── Value: valor ou macro └── Show items only for current user: activar para perfis ``` #### Query Relação ``` Objetivo: listar items relacionados ao post/item actual ├── Relation: seleccionar relação criada no JetEngine ├── Get children of: post actual / ID específico / macro └── Post Type: tipo dos items relacionados ``` ### Meta Query com Macros ``` Exemplo: listar projectos do utilizador logado Meta Query: ├── Field: cliente_user_id ├── Operator: = └── Value: %current_user_id% Exemplo: listar items de hoje Meta Query: ├── Field: data_evento (timestamp) ├── Type: NUMERIC ├── Operator: >= └── Value: %current_timestamp% ``` ### Combinar Múltiplas Condições ``` Relation: AND (todas as condições verdadeiras) OR (pelo menos uma verdadeira) Exemplo: imóveis em Lisboa com preço < 300k Tax Query 1: Localização = Lisboa Meta Query 1: Preço < 300000 Relation: AND ``` --- ## Listing Grid — Configuração Detalhada ### Criar Listing Template ``` JetEngine > Listings > Add New Nome: [CPT]-listing-card Listing From: Posts / Terms / Users / CCT Post Type: [seleccionar] Editar com Elementor: ├── Usar Dynamic Tags em todos os campos ├── Post Title Widget → ou Text Widget com dynamic tag ├── Meta Field → adicionar Dynamic Tag > JetEngine > Meta Field ├── Post Featured Image → ou Image Widget com dynamic tag └── Button → URL com dynamic tag > Post URL ``` ### Listing Grid Widget — Parâmetros ``` Listing Item: [seleccionar template] Use Custom Query: YES → seleccionar Query Builder Items per page: 12 (padrão) Not Found Text: "Sem resultados" Loader: activar para UX com filtros Columns: 1/2/3/4 (responsivo) Equal Columns Height: YES para cards uniformes ``` ### Paginação ``` Listing Grid > Pagination: ├── Type: Default WP / Load More / Infinity Scroll ├── Load More Button Text: "Carregar mais" ├── On Scroll: activar para infinity └── Starting From: 1 ``` ### Ordenação Dinâmica (Frontend) ``` Adicionar widget: JetSmartFilters > Sorting ├── Ligar ao mesmo Listing Grid └── Opções: Date ASC/DESC, Title, Price, Custom Field ``` --- ## Listing Map ### Configuração ``` 1. Activar Google Maps API Key: JetEngine > Settings > Google Maps API Key 2. Criar Meta Box com campo tipo Map no CPT (O utilizador define latitude/longitude via picker no editor) 3. Criar Listing Template tipo: Map Marker Adicionar: Post Title, info a mostrar no popup 4. Adicionar widget Listing Map ao Elementor ├── Listing Item: [marker template] ├── Use Custom Query: YES ├── Map Field: seleccionar campo coordenadas └── Map Options: zoom, altura, cluster ``` ### Mapa + Listing Grid Sincronizados ``` Adicionar os dois widgets na mesma página Ligar ao mesmo Query Builder Activar "Synchronize with Listing Grid": YES no Map → Ao fazer hover no card, destaca pin no mapa → Ao fazer hover no pin, destaca card na lista ``` --- ## Archive e Single Templates ### Single CPT com Elementor (JetThemeCore ou Elementor Pro) ``` JetThemeCore > Templates > Add New > Single Conditions: Post Type = [meu_cpt] Editar com Elementor usando Dynamic Tags OU Elementor > Templates > Theme Builder > Single Conditions: igual ``` ### Archive Page ``` JetThemeCore > Templates > Add New > Archive Conditions: Post Type Archive = [meu_cpt] Adicionar: ├── Archive Title Widget ├── Listing Grid Widget (sem Custom Query — usa WP_Query do arquivo) └── JetSmartFilters (ligado ao mesmo archive) ``` --- ## JetSmartFilters — Integração Avançada ### AJAX Reload vs Full Page ``` Provider: Listing Grid → AJAX (sem reload de página) Provider: Archive → Pode ser AJAX ou URL based Provider: WooCommerce → AJAX ``` ### URL Based Filters (SEO Friendly) ``` JetSmartFilters > Filters > Edit ├── Query Variable: activar ├── URL Based: activar └── Clean URL: activar Resultado: site.pt/imoveis/?cidade=Lisboa&preco=200000-400000 (Em vez de AJAX puro — melhor para SEO e partilha de URL) ``` ### Hierarquical Taxonomy Filter ``` Exemplo: País → Distrito → Concelho ├── Criar taxonomia com hierarquia ├── Filtro: Checkboxes com hierarquia activada └── "Show children of selected": activar ``` --- *JetEngine Query & Listings | Descomplicar® | 18-02-2026*