{"id":1609,"date":"2023-10-31T10:42:44","date_gmt":"2023-10-31T13:42:44","guid":{"rendered":"https:\/\/loja.oiebikers.com.br\/?page_id=1609"},"modified":"2026-09-21T09:29:49","modified_gmt":"2026-09-21T12:29:49","slug":"informacao-sobre-proximos-eventos","status":"publish","type":"page","link":"https:\/\/loja.oiebikers.com.br\/index.php\/informacao-sobre-proximos-eventos\/","title":{"rendered":"Informa\u00e7\u00e3o sobre pr\u00f3ximos eventos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1609\" class=\"elementor elementor-1609\">\n\t\t\t\t<div class=\"elementor-element elementor-element-61343295 e-flex e-con-boxed e-con e-parent\" data-id=\"61343295\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2b94cf2a elementor-widget elementor-widget-text-editor\" data-id=\"2b94cf2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<!--\n  Bloco para a p\u00e1gina \"Informa\u00e7\u00e3o sobre pr\u00f3ximos eventos\" da loja\n  (loja.oiebikers.com.br\/index.php\/informacao-sobre-proximos-eventos\/, post ID 1609).\n\n  Substitui o [Form id=\"6\"] quebrado (plugin Form Maker desinstalado) por um\n  formul\u00e1rio que reaproveita o plugin oiebikers-newsletter (v2.2):\n    - busca GET \/wp-json\/oiebikers\/v1\/eventos (same-origin, j\u00e1 ordenado por\n      m\u00eas\/ano ASC) e monta os checkboxes, agrupados por m\u00eas\/ano;\n    - campos Nome (obrigat\u00f3rio) e Telefone (OBRIGAT\u00d3RIO, com m\u00e1scara BR de\n      celular aplicada ao digitar \u2014 principal canal de contato com\n      clientes) \u2014 equivalentes aos que existiam no antigo Form Maker;\n    - no envio, faz POST \/wp-json\/oiebikers\/v1\/newsletter com\n      {nome, email, telefone, pedais: [...eventos marcados]} \u2014 mesma rota\n      j\u00e1 usada pela Newsletter do Site Institucional, que tamb\u00e9m exige\n      telefone agora (padronizado nos dois formul\u00e1rios).\n\n  Como instalar:\n    1. wp-admin da loja \u2192 P\u00e1ginas \u2192 \"Informa\u00e7\u00e3o sobre pr\u00f3ximos eventos\" \u2192 Editar com Elementor\n    2. Selecione o widget \"Editor de texto\" que hoje mostra o texto quebrado\n    3. Na barra de ferramentas do widget, aba \"C\u00f3digo\" (\u00edcone <\/>)\n    4. Apague o conte\u00fado atual e cole TUDO a partir da linha \"<div id=\"oiebikers-eventos\">\"\n       at\u00e9 o fim deste arquivo (n\u00e3o inclua este coment\u00e1rio)\n    5. Publicar\/Atualizar\n\n  Pr\u00e9-requisito: plugin \"Oi\u00ea Bikers - Newsletter P\u00fablica + Agenda de Eventos\"\n  (v2.2+) ativo, com pelo menos 1 evento publicado em wp-admin \u2192 Eventos (Agenda).\n\n  IMPORTANTE (achado real, 2026-09-14): o widget \"Editor de texto\" do Elementor passa\n  o conte\u00fado pelos filtros de post do WordPress (wptexturize\/convert_chars) antes de\n  publicar \u2014 isso converte todo caractere \"&\" solto em \"&#038;\", quebrando qualquer\n  \"&&\" de JavaScript com SyntaxError silencioso (o fetch nunca chega a rodar, fica\n  preso em \"Carregando eventos\u2026\"). Por isso o script abaixo evita \"&&\" de prop\u00f3sito\n  (usa \"if\" aninhado em vez de operador l\u00f3gico) \u2014 n\u00e3o reintroduza \"&&\" aqui sem trocar\n  pro widget \"HTML\" do Elementor (que n\u00e3o passa pelos filtros de conte\u00fado).\n-->\n<div id=\"oiebikers-eventos\">\n  <p>Caso haja interesse em ser informado assim que um dos eventos listados abaixo estiver dispon\u00edvel pra reserva\/compra, preencha o formul\u00e1rio abaixo.<\/p>\n\n  <form id=\"oiebikers-eventos-form\">\n    <p id=\"oiebikers-eventos-carregando\">Carregando eventos\u2026<\/p>\n    <p id=\"oiebikers-eventos-vazio\" style=\"display:none\">Nenhum evento cadastrado no momento. Deixe seu e-mail que avisamos assim que a agenda for publicada.<\/p>\n    <div id=\"oiebikers-eventos-lista\" style=\"display:none;margin:16px 0\"><\/div>\n\n    <p>\n      <label for=\"oiebikers-eventos-nome\"><strong>Nome*<\/strong><\/label><br>\n      <input type=\"text\" id=\"oiebikers-eventos-nome\" name=\"nome\" required style=\"width:100%;max-width:360px;padding:8px;margin-top:4px\">\n    <\/p>\n\n    <p>\n      <label for=\"oiebikers-eventos-email\"><strong>E-mail*<\/strong><\/label><br>\n      <input type=\"email\" id=\"oiebikers-eventos-email\" name=\"email\" required style=\"width:100%;max-width:360px;padding:8px;margin-top:4px\">\n    <\/p>\n\n    <p>\n      <label for=\"oiebikers-eventos-telefone\"><strong>Telefone*<\/strong><\/label><br>\n      <input type=\"tel\" id=\"oiebikers-eventos-telefone\" name=\"telefone\" required placeholder=\"(11) 91234-5678\" maxlength=\"15\" style=\"width:100%;max-width:360px;padding:8px;margin-top:4px\">\n    <\/p>\n\n    <p style=\"position:absolute;left:-9999px\" aria-hidden=\"true\">\n      <label for=\"oiebikers-eventos-site\">N\u00e3o preencha este campo<\/label>\n      <input type=\"text\" id=\"oiebikers-eventos-site\" name=\"site_pessoal\" tabindex=\"-1\" autocomplete=\"off\">\n    <\/p>\n\n    <p>\n      <button type=\"submit\" id=\"oiebikers-eventos-enviar\">Quero ser avisado(a)<\/button>\n    <\/p>\n\n    <p id=\"oiebikers-eventos-status\" style=\"display:none;font-weight:bold\"><\/p>\n  <\/form>\n<\/div>\n\n<style>\n  #oiebikers-eventos .oe-mes { font-weight:bold; margin:14px 0 6px; }\n  #oiebikers-eventos .oe-chip { display:block; margin:4px 0; }\n  #oiebikers-eventos-status.oe-sucesso { color:#1a7a1a; }\n  #oiebikers-eventos-status.oe-erro { color:#b00020; }\n<\/style>\n\n<script>\n(function () {\n  var EVENTOS_API     = '\/wp-json\/oiebikers\/v1\/eventos';\n  var NEWSLETTER_API  = '\/wp-json\/oiebikers\/v1\/newsletter';\n  var MESES = ['', 'Janeiro', 'Fevereiro', 'Mar\u00e7o', 'Abril', 'Maio', 'Junho',\n    'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'];\n\n  var form        = document.getElementById('oiebikers-eventos-form');\n  var carregando  = document.getElementById('oiebikers-eventos-carregando');\n  var vazio       = document.getElementById('oiebikers-eventos-vazio');\n  var lista       = document.getElementById('oiebikers-eventos-lista');\n  var telefone    = document.getElementById('oiebikers-eventos-telefone');\n  var status      = document.getElementById('oiebikers-eventos-status');\n  var botao       = document.getElementById('oiebikers-eventos-enviar');\n  var botaoTextoOriginal = botao ? botao.textContent : '';\n\n  if (!form) return;\n\n  \/\/ M\u00e1scara de celular BR: (XX) XXXXX-XXXX (progressiva, conforme o usu\u00e1rio digita).\n  function formatarTelefoneBR(valor) {\n    var digitos = (valor || '').replace(\/\\D\/g, '').slice(0, 11);\n    if (digitos.length <= 2) return digitos.replace(\/(\\d{0,2})\/, '($1');\n    if (digitos.length <= 6) return digitos.replace(\/(\\d{2})(\\d{0,4})\/, '($1) $2');\n    if (digitos.length <= 10) return digitos.replace(\/(\\d{2})(\\d{4})(\\d{0,4})\/, '($1) $2-$3');\n    return digitos.replace(\/(\\d{2})(\\d{5})(\\d{0,4})\/, '($1) $2-$3');\n  }\n\n  if (telefone) {\n    telefone.addEventListener('input', function () {\n      var digitos = telefone.value.replace(\/\\D\/g, '');\n      telefone.value = formatarTelefoneBR(telefone.value);\n      \/\/ Reatribuir .value acima \"limpa\" a marca de edi\u00e7\u00e3o do navegador, o que faz o\n      \/\/ `minlength` nativo parar de validar (achado real, testado) \u2014 por isso o\n      \/\/ tamanho m\u00ednimo \u00e9 conferido aqui tamb\u00e9m, via setCustomValidity.\n      var mensagemErro = '';\n      if (digitos.length > 0) {\n        if (digitos.length < 10) {\n          mensagemErro = 'Informe um telefone v\u00e1lido, com DDD.';\n        }\n      }\n      telefone.setCustomValidity(mensagemErro);\n    });\n  }\n\n  function mostrarStatus(mensagem, tipo) {\n    if (!status) return;\n    status.textContent = mensagem;\n    status.className = tipo === 'sucesso' ? 'oe-sucesso' : 'oe-erro';\n    status.style.display = 'block';\n  }\n\n  function definirCarregando(carregandoEnvio) {\n    if (!botao) return;\n    botao.disabled = carregandoEnvio;\n    botao.textContent = carregandoEnvio ? 'Enviando\u2026' : botaoTextoOriginal;\n  }\n\n  function renderEventos(eventos) {\n    carregando.style.display = 'none';\n\n    if (!eventos.length) {\n      vazio.style.display = 'block';\n      return;\n    }\n\n    lista.style.display = 'block';\n    lista.innerHTML = '';\n\n    var mesAnoAnterior = null;\n    eventos.forEach(function (evento) {\n      var mesAno = null;\n      if (evento.mes) {\n        if (evento.ano) {\n          mesAno = evento.mes + '-' + evento.ano;\n        }\n      }\n\n      if (mesAno !== mesAnoAnterior) {\n        var nomeMes = 'A confirmar';\n        if (evento.mes) {\n          if (MESES[evento.mes]) {\n            nomeMes = MESES[evento.mes];\n          }\n        }\n        var titulo = document.createElement('div');\n        titulo.className = 'oe-mes';\n        titulo.textContent = nomeMes + (evento.ano ? ' ' + evento.ano : '');\n        lista.appendChild(titulo);\n        mesAnoAnterior = mesAno;\n      }\n\n      var label = document.createElement('label');\n      label.className = 'oe-chip';\n\n      var input = document.createElement('input');\n      input.type = 'checkbox';\n      input.name = 'pedais';\n      input.value = evento.titulo;\n\n      label.appendChild(input);\n      label.appendChild(document.createTextNode(' ' + evento.titulo));\n      lista.appendChild(label);\n    });\n  }\n\n  fetch(EVENTOS_API)\n    .then(function (r) {\n      if (!r.ok) throw new Error('HTTP ' + r.status);\n      return r.json();\n    })\n    .then(renderEventos)\n    .catch(function (erro) {\n      console.error('[oiebikers-eventos] Falha ao buscar eventos:', erro);\n      carregando.style.display = 'none';\n      vazio.style.display = 'block';\n    });\n\n  form.addEventListener('submit', function (evento) {\n    evento.preventDefault();\n\n    if (!form.checkValidity()) {\n      form.reportValidity();\n      return;\n    }\n\n    var dados = new FormData(form);\n    var pedaisSelecionados = dados.getAll('pedais');\n\n    \/\/ Pelo menos 1 evento marcado (pedido do usu\u00e1rio, 2026-09-21) \u2014 s\u00f3 exige quando a\n    \/\/ lista de checkboxes est\u00e1 vis\u00edvel de verdade (eventos carregados com sucesso); se\n    \/\/ a busca em EVENTOS_API falhar ou vier vazia, \"lista\" fica display:none e n\u00e3o faz\n    \/\/ sentido travar o formul\u00e1rio por causa de algo que a pessoa nem consegue marcar.\n    \/\/ Sem \"&#038;&#038;\" de prop\u00f3sito (ver aviso no topo do arquivo sobre wptexturize\/Elementor).\n    if (lista.style.display === 'block') {\n      if (pedaisSelecionados.length === 0) {\n        mostrarStatus('Selecione pelo menos um evento de interesse.', 'erro');\n        return;\n      }\n    }\n\n    var payload = {\n      nome: dados.get('nome') || '',\n      email: dados.get('email') || '',\n      telefone: dados.get('telefone') || '',\n      pedais: pedaisSelecionados,\n      site_pessoal: dados.get('site_pessoal') || ''\n    };\n\n    definirCarregando(true);\n    status.style.display = 'none';\n\n    fetch(NEWSLETTER_API, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify(payload)\n    })\n      .then(function (r) {\n        return r.json().then(function (corpo) {\n          return { status: r.status, corpo: corpo };\n        });\n      })\n      .then(function (resultado) {\n        definirCarregando(false);\n        var corpoOk = false;\n        var msg = 'N\u00e3o foi poss\u00edvel concluir a inscri\u00e7\u00e3o agora. Tente novamente em instantes.';\n        if (resultado.corpo) {\n          if (resultado.corpo.ok) {\n            corpoOk = true;\n          }\n          if (resultado.corpo.mensagem) {\n            msg = resultado.corpo.mensagem;\n          }\n        }\n        if (corpoOk) {\n          mostrarStatus('Inscri\u00e7\u00e3o confirmada! Fica de olho no seu e-mail.', 'sucesso');\n          form.reset();\n        } else {\n          mostrarStatus(msg, 'erro');\n        }\n      })\n      .catch(function (erro) {\n        console.error('[oiebikers-eventos] Falha ao enviar inscri\u00e7\u00e3o:', erro);\n        definirCarregando(false);\n        mostrarStatus('N\u00e3o foi poss\u00edvel conectar agora. Tente novamente em instantes.', 'erro');\n      });\n  });\n})();\n<\/script>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Caso haja interesse em ser informado assim que um dos eventos listados abaixo estiver dispon\u00edvel pra reserva\/compra, preencha o formul\u00e1rio abaixo. Carregando eventos\u2026 Nenhum evento cadastrado no momento. Deixe seu e-mail que avisamos assim que a agenda for publicada. Nome* E-mail* Telefone* N\u00e3o preencha este campo Quero ser avisado(a)<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1609","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/loja.oiebikers.com.br\/index.php\/wp-json\/wp\/v2\/pages\/1609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/loja.oiebikers.com.br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/loja.oiebikers.com.br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/loja.oiebikers.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/loja.oiebikers.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=1609"}],"version-history":[{"count":15,"href":"https:\/\/loja.oiebikers.com.br\/index.php\/wp-json\/wp\/v2\/pages\/1609\/revisions"}],"predecessor-version":[{"id":5297,"href":"https:\/\/loja.oiebikers.com.br\/index.php\/wp-json\/wp\/v2\/pages\/1609\/revisions\/5297"}],"wp:attachment":[{"href":"https:\/\/loja.oiebikers.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=1609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}