(function(){
/* ====== CONFIGURE AQUI ====== */
var CHECKOUT_URL = "/finalizar-compra/"; // página de checkout do WooCommerce
var CART_URL = "/carrinho/"; // página do carrinho do WooCommerce
var POR_PAGINA = 24; // quantidade de produtos exibidos
var CATEGORIA = ""; // opcional: slug de uma categoria (ex.: "plantas")
/* ============================ */
var root=document.getElementById('lj');
var $=function(id){return document.getElementById(id)};
/* endereço da API: detecta sozinho (funciona com qualquer permalink) */
var link=document.querySelector('link[rel="https://api.w.org/"]');
var base=(link?link.href:location.origin+'/wp-json/');
var API=base+(base.indexOf('?')>-1?'':'')+'wc/store/v1';
function url(path,params){
var u=API+path;
if(base.indexOf('rest_route')>-1){ u=base.split('?')[0]+'?rest_route=/wc/store/v1'+path.replace('?','&'); }
return u;
}
var nonce="", cart=null, produtos=[], filtro="Todas";
var txt=document.createElement('textarea');
function limpa(h){ txt.innerHTML=(h||'').replace(/]*>/g,' ').replace(/\s+/g,' ').trim(); return txt.value; }
function esc(s){ return String(s).replace(/[&"']/g,function(c){return {'&':'&','':'>','"':'"',"'":'''}[c]}); }
function money(v,cur){
var d=(cur&&cur.currency_minor_unit!=null)?cur.currency_minor_unit:2;
var n=parseInt(v,10)/Math.pow(10,d);
try{ return n.toLocaleString('pt-BR',{style:'currency',currency:(cur&&cur.currency_code)||'BRL',minimumFractionDigits:d,maximumFractionDigits:d}); }
catch(e){ return 'R$ '+n.toFixed(d).replace('.',','); }
}
/* chamada à Store API do WooCommerce (mantém a sessão do carrinho via cookies) */
function api(path,method,body){
var h={'Content-Type':'application/json'};
if(nonce) h['Nonce']=nonce;
return fetch(url(path),{method:method||'GET',credentials:'same-origin',headers:h,body:body?JSON.stringify(body):undefined})
.then(function(r){
var n=r.headers.get('Nonce')||r.headers.get('X-WC-Store-API-Nonce'); if(n) nonce=n;
return r.json().then(function(j){ if(!r.ok) throw j; return j; });
});
}
/* ---------- produtos ---------- */
function carregaProdutos(){
var q='?per_page='+POR_PAGINA+(CATEGORIA?'&category='+encodeURIComponent(CATEGORIA):'');
return api('/products'+q).then(function(list){
produtos=list; renderFiltros(); renderProdutos();
}).catch(function(){
$('lj-grid').innerHTML='
Não foi possível carregar os produtos. Verifique se o WooCommerce está ativo.
';
});
}
function renderFiltros(){
var cats=["Todas"];
produtos.forEach(function(p){ (p.categories||[]).forEach(function(c){ if(cats.indexOf(c.name)2?cats.map(function(c){
var n=limpa(c);
return '';
}).join(''):'';
}
function renderProdutos(){
var lista=produtos.filter(function(p){
return filtro==="Todas"||(p.categories||[]).some(function(c){return c.name===filtro});
});
if(!lista.length){ $('lj-grid').innerHTML='
Nenhum produto encontrado.
'; return; }
$('lj-grid').innerHTML=lista.map(function(p){
var pr=p.prices||{}, promo=p.on_sale&&pr.regular_price!==pr.price;
var img=p.images&&p.images[0]?'':'🪴';
var simples=p.type==='simple'&&p.is_purchasable&&p.is_in_stock;
var btn=simples?''
:''+(p.is_in_stock?'Ver opções':'Esgotado')+'';
return '
';
}).join('');
}
/* ---------- carrinho (sincronizado com o WooCommerce) ---------- */
function setCart(c){ cart=c; renderCarrinho(); }
function renderCarrinho(){
var items=(cart&&cart.items)||[], t=(cart&&cart.totals)||{};
$('lj-count').textContent=(cart&&cart.items_count)||0;
$('lj-total').textContent=money(t.total_price||0,t);
$('lj-items').innerHTML=items.length?items.map(function(i){
var im=i.images&&i.images[0]?'':'';
return '
Cookies necessários ativam recursos essenciais do site como logins seguros e ajustes de preferências de consentimento. Eles não armazenam dados pessoais.
Nenhum
Cookies funcionais suportam recursos como compartilhamento de conteúdo em redes sociais, coleta de feedback e ativação de ferramentas de terceiros.
Nenhum
Cookies analíticos rastreiam interações dos visitantes, fornecendo insights sobre métricas como número de visitantes, taxa de rejeição e fontes de tráfego.
Nenhum
Cookies de publicidade entregam anúncios personalizados baseados em suas visitas anteriores e analisam a eficácia das campanhas publicitárias.
Nenhum
Cookies não classificados são cookies que estamos em processo de classificar, junto com os provedores de cookies individuais.