{"id":1016,"date":"2026-04-14T17:16:37","date_gmt":"2026-04-14T17:16:37","guid":{"rendered":"https:\/\/bodafranyjose.com\/?page_id=1016"},"modified":"2026-04-19T20:05:19","modified_gmt":"2026-04-19T20:05:19","slug":"save-the-date","status":"publish","type":"page","link":"https:\/\/bodafranyjose.com\/index.php\/save-the-date\/","title":{"rendered":"Save the date"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1016\" class=\"elementor elementor-1016\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3ab9447 e-flex e-con-boxed e-con e-parent\" data-id=\"3ab9447\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-030ce41 elementor-widget elementor-widget-html\" data-id=\"030ce41\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Save the Date<\/title>\n<script src=\"\/config.js\"><\/script>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400&family=Poppins:wght@300;400;600&display=swap\" rel=\"stylesheet\">\n<style>\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n:root { --c: #b67b91; }\n\nhtml, body {\n  height: 100%;\n  background: #0f0810;\n  font-family: 'Poppins', sans-serif;\n  overflow-x: hidden;\n  color: #fff;\n}\n\ncanvas {\n  position: fixed;\n  inset: 0;\n  width: 100%; height: 100%;\n  pointer-events: none;\n  z-index: 0;\n}\n\n.wrap {\n  position: relative;\n  z-index: 1;\n  min-height: 100vh;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 24px 16px;\n}\n\n.card {\n  background: rgba(255,255,255,0.055);\n  backdrop-filter: blur(22px);\n  -webkit-backdrop-filter: blur(22px);\n  border: 1px solid rgba(255,255,255,0.1);\n  border-radius: 32px;\n  padding: 36px 28px 28px;\n  max-width: 420px;\n  width: 100%;\n  text-align: center;\n}\n\n\/* CABECERA *\/\n.save-label {\n  font-size: 0.65rem;\n  font-weight: 600;\n  letter-spacing: 0.28em;\n  color: var(--c);\n  text-transform: uppercase;\n  margin-bottom: 14px;\n}\n\n.nombres {\n  font-family: 'Cormorant Garamond', serif;\n  font-size: clamp(2.6rem, 9vw, 4rem);\n  font-weight: 300;\n  line-height: 1;\n  color: #fff;\n}\n\n.amp { font-style: italic; color: var(--c); margin: 0 5px; }\n\n\/* FECHA *\/\n.fecha-bloque { margin: 18px 0 10px; }\n\n.fecha-num {\n  font-family: 'Cormorant Garamond', serif;\n  font-size: clamp(4rem, 15vw, 6.5rem);\n  font-weight: 300;\n  line-height: 0.9;\n  color: #fff;\n  letter-spacing: -0.03em;\n}\n\n.fecha-mes {\n  font-size: 0.72rem;\n  font-weight: 300;\n  letter-spacing: 0.22em;\n  color: rgba(255,255,255,0.45);\n  text-transform: uppercase;\n  margin-top: 8px;\n}\n\n.fecha-anio {\n  font-family: 'Cormorant Garamond', serif;\n  font-size: 1.3rem;\n  font-weight: 300;\n  color: var(--c);\n  margin-top: 3px;\n  letter-spacing: 0.08em;\n}\n\n\/* CUENTA ATR\u00c1S *\/\n.countdown {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 8px;\n  margin: 16px 0;\n}\n\n.cd-item {\n  background: rgba(255,255,255,0.05);\n  border: 1px solid rgba(255,255,255,0.08);\n  border-radius: 14px;\n  padding: 10px 4px 8px;\n}\n\n.cd-num {\n  font-family: 'Cormorant Garamond', serif;\n  font-size: 1.9rem;\n  font-weight: 300;\n  color: #fff;\n  line-height: 1;\n  display: block;\n}\n\n.cd-label {\n  font-size: 0.58rem;\n  font-weight: 600;\n  letter-spacing: 0.12em;\n  color: rgba(255,255,255,0.35);\n  text-transform: uppercase;\n  display: block;\n  margin-top: 4px;\n}\n\n.linea {\n  width: 1px;\n  height: 30px;\n  background: linear-gradient(180deg, transparent, rgba(232,180,200,0.4), transparent);\n  margin: 4px auto 16px;\n}\n\n\/* FORMULARIO *\/\n.form-label {\n  font-size: 0.65rem;\n  font-weight: 600;\n  letter-spacing: 0.18em;\n  color: rgba(255,255,255,0.35);\n  text-transform: uppercase;\n  margin-bottom: 14px;\n}\n\n.campo { margin-bottom: 9px; }\n\n.campo input,\n.campo textarea,\n.campo select {\n  width: 100%;\n  background: rgba(255,255,255,0.06);\n  border: 1px solid rgba(255,255,255,0.11);\n  border-radius: 14px;\n  padding: 12px 15px;\n  color: #fff;\n  font-family: 'Poppins', sans-serif;\n  font-size: 0.88rem;\n  font-weight: 300;\n  outline: none;\n  transition: border-color 0.2s, background 0.2s;\n  -webkit-appearance: none;\n}\n\n.campo input::placeholder,\n.campo textarea::placeholder { color: rgba(255,255,255,0.22); }\n\n.campo input:focus,\n.campo textarea:focus,\n.campo select:focus {\n  border-color: rgba(182,123,145,0.6);\n  background: rgba(255,255,255,0.09);\n}\n\n.campo select option { background: #1a0a14; color: #fff; }\n.campo textarea { min-height: 62px; resize: vertical; }\n\n.toggle-acomp {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  cursor: pointer;\n  margin-bottom: 9px;\n  padding: 12px 15px;\n  background: rgba(255,255,255,0.04);\n  border: 1px solid rgba(255,255,255,0.09);\n  border-radius: 14px;\n  transition: background 0.2s, border-color 0.2s;\n  user-select: none;\n}\n.toggle-acomp:hover { background: rgba(255,255,255,0.07); border-color: rgba(182,123,145,0.4); }\n.toggle-acomp input { accent-color: var(--c); width: 16px; height: 16px; cursor: pointer; flex-shrink: 0; }\n.toggle-acomp span { font-size: 0.84rem; color: rgba(255,255,255,0.6); font-weight: 300; }\n\n.acomp-wrap { display: none; }\n.acomp-wrap.visible { display: block; }\n\n.btn-confirmar {\n  width: 100%;\n  min-height: 50px;\n  background: var(--c);\n  color: #fff;\n  border: none;\n  border-radius: 14px;\n  font-family: 'Poppins', sans-serif;\n  font-size: 0.88rem;\n  font-weight: 600;\n  letter-spacing: 0.06em;\n  cursor: pointer;\n  margin-top: 4px;\n  transition: opacity 0.2s, transform 0.15s;\n}\n.btn-confirmar:hover { opacity: 0.85; transform: translateY(-1px); }\n.btn-confirmar:disabled { opacity: 0.4; cursor: default; transform: none; }\n\n.error-msg {\n  background: rgba(220,80,80,0.1);\n  border: 1px solid rgba(220,80,80,0.22);\n  border-radius: 10px;\n  padding: 9px 13px;\n  font-size: 0.78rem;\n  color: #f5a0a0;\n  margin-top: 8px;\n  display: none;\n  text-align: left;\n}\n.error-msg.visible { display: block; }\n\n\/* \u00c9XITO *\/\n.exito { display: none; padding: 16px 0 8px; }\n.exito.visible { display: block; }\n.exito-icono { font-size: 2.4rem; margin-bottom: 14px; display: block; }\n.exito h3 {\n  font-family: 'Cormorant Garamond', serif;\n  font-size: 1.9rem;\n  font-weight: 300;\n  color: #fff;\n  margin-bottom: 8px;\n}\n.exito p { font-size: 0.82rem; color: rgba(255,255,255,0.45); line-height: 1.7; font-weight: 300; }\n<\/style>\n<\/head>\n<body>\n\n<canvas id=\"canvas\"><\/canvas>\n\n<div class=\"wrap\">\n  <div class=\"card\">\n\n    <div class=\"save-label\">Save the date<\/div>\n    <div class=\"nombres\" id=\"nombres\"><\/div>\n\n    <div class=\"fecha-bloque\">\n      <div class=\"fecha-num\" id=\"fechaDia\"><\/div>\n      <div class=\"fecha-mes\" id=\"fechaMes\"><\/div>\n      <div class=\"fecha-anio\" id=\"fechaAnio\"><\/div>\n    <\/div>\n\n    <div class=\"countdown\">\n      <div class=\"cd-item\"><span class=\"cd-num\" id=\"cdDias\">--<\/span><span class=\"cd-label\">d\u00edas<\/span><\/div>\n      <div class=\"cd-item\"><span class=\"cd-num\" id=\"cdHoras\">--<\/span><span class=\"cd-label\">horas<\/span><\/div>\n      <div class=\"cd-item\"><span class=\"cd-num\" id=\"cdMin\">--<\/span><span class=\"cd-label\">min<\/span><\/div>\n      <div class=\"cd-item\"><span class=\"cd-num\" id=\"cdSeg\">--<\/span><span class=\"cd-label\">seg<\/span><\/div>\n    <\/div>\n\n    <div class=\"linea\"><\/div>\n\n    <div id=\"formWrap\">\n      <div class=\"form-label\">Confirma tu asistencia<\/div>\n\n      <div class=\"campo\">\n        <input type=\"text\" id=\"nombre\" placeholder=\"Tu nombre completo\">\n      <\/div>\n\n      <div class=\"campo\">\n        <select id=\"asistencia\">\n          <option value=\"si\">S\u00ed, all\u00ed estar\u00e9 \ud83c\udf89<\/option>\n          <option value=\"no\">Lo siento, no podr\u00e9 ir<\/option>\n        <\/select>\n      <\/div>\n\n      <label class=\"toggle-acomp\">\n        <input type=\"checkbox\" id=\"checkAcomp\" onchange=\"toggleAcomp(this.checked)\">\n        <span>Vengo con acompa\u00f1ante<\/span>\n      <\/label>\n\n      <div class=\"acomp-wrap\" id=\"acompWrap\">\n        <div class=\"campo\">\n          <input type=\"text\" id=\"acompNombre\" placeholder=\"Nombre del acompa\u00f1ante\">\n        <\/div>\n      <\/div>\n\n      <div class=\"campo\">\n        <textarea id=\"alergias\" placeholder=\"Alergias o restricciones alimentarias (opcional)\"><\/textarea>\n      <\/div>\n\n      <button class=\"btn-confirmar\" id=\"btnConfirmar\" onclick=\"confirmar()\">\n        Confirmar asistencia\n      <\/button>\n\n      <div class=\"error-msg\" id=\"errorMsg\">Por favor, escribe tu nombre antes de confirmar.<\/div>\n    <\/div>\n\n    <div class=\"exito\" id=\"estadoExito\">\n      <span class=\"exito-icono\">\ud83d\udc8c<\/span>\n      <h3>\u00a1Nos vemos pronto!<\/h3>\n      <p>Hemos recibido tu confirmaci\u00f3n.<br>Estamos deseando celebrarlo contigo.<\/p>\n    <\/div>\n\n  <\/div>\n<\/div>\n\n<script>\nconst DATOS_URL = '\/wp-content\/uploads\/datos\/datos.json?v=' + Date.now();\nlet bodaFecha = null;\n\nfunction mesANum(m) {\n  const meses = {\n    enero:'01', febrero:'02', marzo:'03', abril:'04', mayo:'05', junio:'06',\n    julio:'07', agosto:'08', septiembre:'09', setiembre:'09', octubre:'10',\n    noviembre:'11', diciembre:'12'\n  };\n  return meses[String(m || '').trim().toLowerCase()] || '01';\n}\n\nfunction mezclarDatosBoda(base, extra) {\n  return {\n    ...base,\n    ...extra\n  };\n}\n\nasync function obtenerDatosEditables() {\n  try {\n    const res = await fetch(DATOS_URL, { cache: 'no-store' });\n    if (!res.ok) throw new Error('No se pudo cargar datos.json');\n    const datos = await res.json();\n    return (datos && typeof datos === 'object') ? datos : {};\n  } catch (error) {\n    console.warn('No se pudieron cargar los datos editables:', error);\n    return {};\n  }\n}\n\nfunction aplicarDatosPantalla() {\n  document.getElementById('nombres').innerHTML =\n    `${BODA.novio1 || ''}<span class=\"amp\">&<\/span>${BODA.novio2 || ''}`;\n\n  document.getElementById('fechaDia').textContent =\n    BODA.fecha_dia || '';\n\n  document.getElementById('fechaMes').textContent =\n    `${BODA.fecha_mes || ''}${BODA.fecha_mes && BODA.fecha_dia_sem ? ' \u00b7 ' : ''}${BODA.fecha_dia_sem || ''}`;\n\n  document.getElementById('fechaAnio').textContent =\n    BODA.fecha_anio || '';\n\n  document.documentElement.style.setProperty('--c', BODA.color_principal || '#b67b91');\n  document.body.style.background = BODA.color_fondo || '#0f0810';\n}\n\nfunction prepararFechaBoda() {\n  if (!BODA.fecha_anio || !BODA.fecha_mes || !BODA.fecha_dia) {\n    bodaFecha = null;\n    return;\n  }\n\n  const mes = mesANum(BODA.fecha_mes);\n  const dia = String(BODA.fecha_dia).padStart(2, '0');\n  bodaFecha = new Date(`${BODA.fecha_anio}-${mes}-${dia}T12:00:00`);\n}\n\nfunction actualizarCuentaAtras() {\n  if (!bodaFecha || isNaN(bodaFecha.getTime())) {\n    ['cdDias','cdHoras','cdMin','cdSeg'].forEach(id => {\n      document.getElementById(id).textContent = '--';\n    });\n    return;\n  }\n\n  const diff = bodaFecha - Date.now();\n\n  if (diff <= 0) {\n    ['cdDias','cdHoras','cdMin','cdSeg'].forEach(id => {\n      document.getElementById(id).textContent = '0';\n    });\n    return;\n  }\n\n  const d = Math.floor(diff \/ 86400000);\n  const h = Math.floor((diff % 86400000) \/ 3600000);\n  const m = Math.floor((diff % 3600000) \/ 60000);\n  const s = Math.floor((diff % 60000) \/ 1000);\n\n  document.getElementById('cdDias').textContent  = String(d).padStart(2,'0');\n  document.getElementById('cdHoras').textContent = String(h).padStart(2,'0');\n  document.getElementById('cdMin').textContent   = String(m).padStart(2,'0');\n  document.getElementById('cdSeg').textContent   = String(s).padStart(2,'0');\n}\n\nasync function iniciarSaveTheDate() {\n  const datosEditables = await obtenerDatosEditables();\n\n  if (typeof window.BODA !== 'object' || !window.BODA) {\n    window.BODA = {};\n  }\n\n  window.BODA = mezclarDatosBoda(window.BODA, datosEditables);\n\n  aplicarDatosPantalla();\n  prepararFechaBoda();\n  actualizarCuentaAtras();\n  setInterval(actualizarCuentaAtras, 1000);\n}\n\niniciarSaveTheDate();\n\n\/\/ \u2500\u2500 Part\u00edculas \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst canvas = document.getElementById('canvas');\nconst ctx = canvas.getContext('2d');\nlet W, H, particles = [];\n\nfunction resize() {\n  W = canvas.width = window.innerWidth;\n  H = canvas.height = window.innerHeight;\n}\nwindow.addEventListener('resize', resize);\nresize();\n\nfunction rnd(a, b) { return a + Math.random() * (b - a); }\n\nfunction nuevaParticula() {\n  const grande = Math.random() < 0.15;\n  return {\n    x: rnd(0, W), y: rnd(H, H * 1.4),\n    r: grande ? rnd(3, 5.5) : rnd(1, 2.8),\n    vx: rnd(-0.4, 0.4), vy: rnd(-0.7, -1.8),\n    alpha: rnd(0.55, 1),\n    fade: grande ? rnd(0.001, 0.003) : rnd(0.002, 0.006),\n    color: `hsl(${rnd(310,360)},${rnd(65,95)}%,${rnd(72,95)}%)`,\n    grande\n  };\n}\n\nfor (let i = 0; i < 220; i++) {\n  const p = nuevaParticula();\n  p.y = rnd(0, H);\n  particles.push(p);\n}\n\nfunction loop() {\n  ctx.clearRect(0, 0, W, H);\n  particles.forEach((p, i) => {\n    p.x += p.vx;\n    p.y += p.vy;\n    p.alpha -= p.fade;\n\n    if (p.alpha <= 0 || p.y < -10) {\n      particles[i] = nuevaParticula();\n      return;\n    }\n\n    ctx.globalAlpha = p.alpha;\n    ctx.fillStyle = p.color;\n    ctx.beginPath();\n    ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);\n    ctx.fill();\n\n    if (p.grande) {\n      ctx.globalAlpha = p.alpha * 0.15;\n      ctx.beginPath();\n      ctx.arc(p.x, p.y, p.r * 3, 0, Math.PI * 2);\n      ctx.fill();\n    }\n  });\n\n  ctx.globalAlpha = 1;\n  requestAnimationFrame(loop);\n}\nloop();\n\n\/\/ \u2500\u2500 Formulario \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction toggleAcomp(v) {\n  document.getElementById('acompWrap').classList.toggle('visible', v);\n}\n\nasync function confirmar() {\n  const nombre      = document.getElementById('nombre').value.trim();\n  const asistencia  = document.getElementById('asistencia').value;\n  const conAcomp    = document.getElementById('checkAcomp').checked;\n  const acompNombre = document.getElementById('acompNombre').value.trim();\n  const alergias    = document.getElementById('alergias').value.trim();\n  const errorMsg    = document.getElementById('errorMsg');\n  const btn         = document.getElementById('btnConfirmar');\n\n  errorMsg.classList.remove('visible');\n\n  if (!nombre) {\n    errorMsg.textContent = 'Por favor, escribe tu nombre antes de confirmar.';\n    errorMsg.classList.add('visible');\n    return;\n  }\n\n  btn.disabled = true;\n  btn.textContent = 'Enviando...';\n\n  try {\n    const res = await fetch(BODA.json_invitados + '?v=' + Date.now());\n    const invitados = await res.json();\n\n    invitados.push({\n      nombre,\n      confirmado: asistencia === 'si',\n      acompanante: conAcomp,\n      acompananteNombre: acompNombre,\n      notas: alergias\n    });\n\n    const guardar = await fetch(BODA.guardar_invitados, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify(invitados)\n    });\n\n    if (!guardar.ok) {\n      throw new Error('Error al guardar');\n    }\n\n    document.getElementById('formWrap').style.display = 'none';\n    document.getElementById('estadoExito').classList.add('visible');\n\n  } catch (e) {\n    btn.disabled = false;\n    btn.textContent = 'Confirmar asistencia';\n    errorMsg.textContent = 'Hubo un error al enviar. Int\u00e9ntalo de nuevo.';\n    errorMsg.classList.add('visible');\n  }\n}\n<\/script>\n<\/body>\n<\/html>\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>Save the Date Save the date &#8211;d\u00edas &#8211;horas &#8211;min &#8211;seg Confirma tu asistencia S\u00ed, all\u00ed estar\u00e9 \ud83c\udf89Lo siento, no podr\u00e9 ir Vengo con acompa\u00f1ante Confirmar asistencia Por favor, escribe tu nombre antes de confirmar. \ud83d\udc8c \u00a1Nos vemos pronto! Hemos recibido tu confirmaci\u00f3n.Estamos deseando celebrarlo contigo.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-1016","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Save the date -<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Save the date -\" \/>\n<meta property=\"og:description\" content=\"Save the Date Save the date &#8211;d\u00edas &#8211;horas &#8211;min &#8211;seg Confirma tu asistencia S\u00ed, all\u00ed estar\u00e9 \ud83c\udf89Lo siento, no podr\u00e9 ir Vengo con acompa\u00f1ante Confirmar asistencia Por favor, escribe tu nombre antes de confirmar. \ud83d\udc8c \u00a1Nos vemos pronto! Hemos recibido tu confirmaci\u00f3n.Estamos deseando celebrarlo contigo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bodafranyjose.com\/index.php\/save-the-date\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-19T20:05:19+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bodafranyjose.com\\\/index.php\\\/save-the-date\\\/\",\"url\":\"https:\\\/\\\/bodafranyjose.com\\\/index.php\\\/save-the-date\\\/\",\"name\":\"Save the date -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bodafranyjose.com\\\/#website\"},\"datePublished\":\"2026-04-14T17:16:37+00:00\",\"dateModified\":\"2026-04-19T20:05:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bodafranyjose.com\\\/index.php\\\/save-the-date\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bodafranyjose.com\\\/index.php\\\/save-the-date\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bodafranyjose.com\\\/index.php\\\/save-the-date\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/bodafranyjose.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Save the date\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bodafranyjose.com\\\/#website\",\"url\":\"https:\\\/\\\/bodafranyjose.com\\\/\",\"name\":\"\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bodafranyjose.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Save the date -","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"es_ES","og_type":"article","og_title":"Save the date -","og_description":"Save the Date Save the date &#8211;d\u00edas &#8211;horas &#8211;min &#8211;seg Confirma tu asistencia S\u00ed, all\u00ed estar\u00e9 \ud83c\udf89Lo siento, no podr\u00e9 ir Vengo con acompa\u00f1ante Confirmar asistencia Por favor, escribe tu nombre antes de confirmar. \ud83d\udc8c \u00a1Nos vemos pronto! Hemos recibido tu confirmaci\u00f3n.Estamos deseando celebrarlo contigo.","og_url":"https:\/\/bodafranyjose.com\/index.php\/save-the-date\/","article_modified_time":"2026-04-19T20:05:19+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/bodafranyjose.com\/index.php\/save-the-date\/","url":"https:\/\/bodafranyjose.com\/index.php\/save-the-date\/","name":"Save the date -","isPartOf":{"@id":"https:\/\/bodafranyjose.com\/#website"},"datePublished":"2026-04-14T17:16:37+00:00","dateModified":"2026-04-19T20:05:19+00:00","breadcrumb":{"@id":"https:\/\/bodafranyjose.com\/index.php\/save-the-date\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bodafranyjose.com\/index.php\/save-the-date\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/bodafranyjose.com\/index.php\/save-the-date\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/bodafranyjose.com\/"},{"@type":"ListItem","position":2,"name":"Save the date"}]},{"@type":"WebSite","@id":"https:\/\/bodafranyjose.com\/#website","url":"https:\/\/bodafranyjose.com\/","name":"","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bodafranyjose.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"}]}},"_links":{"self":[{"href":"https:\/\/bodafranyjose.com\/index.php\/wp-json\/wp\/v2\/pages\/1016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bodafranyjose.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bodafranyjose.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bodafranyjose.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bodafranyjose.com\/index.php\/wp-json\/wp\/v2\/comments?post=1016"}],"version-history":[{"count":20,"href":"https:\/\/bodafranyjose.com\/index.php\/wp-json\/wp\/v2\/pages\/1016\/revisions"}],"predecessor-version":[{"id":1073,"href":"https:\/\/bodafranyjose.com\/index.php\/wp-json\/wp\/v2\/pages\/1016\/revisions\/1073"}],"wp:attachment":[{"href":"https:\/\/bodafranyjose.com\/index.php\/wp-json\/wp\/v2\/media?parent=1016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}