{"id":5188,"date":"2024-12-09T12:44:38","date_gmt":"2024-12-09T18:44:38","guid":{"rendered":"https:\/\/evida.ugto.mx\/catalogo\/?page_id=5188"},"modified":"2025-11-26T22:08:41","modified_gmt":"2025-11-27T04:08:41","slug":"uade","status":"publish","type":"page","link":"https:\/\/evida.ugto.mx\/catalogo\/uade\/","title":{"rendered":"Oferta de educaci\u00f3n continua de la Unidad de Apoyo al Desarrollo Educativo"},"content":{"rendered":"\n<div class=\"wp-block-cover alignfull\" style=\"min-height:400px;aspect-ratio:unset;\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"308\" class=\"wp-block-cover__image-background wp-image-6077 size-large\" alt=\"\" src=\"https:\/\/i0.wp.com\/evida.ugto.mx\/catalogo\/wp-content\/uploads\/sites\/5\/2025\/06\/Unidad-de-Apoyo-al-Desarrollo_CatalogoAD.png?resize=1024%2C308&#038;ssl=1\" data-object-fit=\"cover\" srcset=\"https:\/\/i0.wp.com\/evida.ugto.mx\/catalogo\/wp-content\/uploads\/sites\/5\/2025\/06\/Unidad-de-Apoyo-al-Desarrollo_CatalogoAD.png?resize=1024%2C308&amp;ssl=1 1024w, https:\/\/i0.wp.com\/evida.ugto.mx\/catalogo\/wp-content\/uploads\/sites\/5\/2025\/06\/Unidad-de-Apoyo-al-Desarrollo_CatalogoAD.png?resize=300%2C90&amp;ssl=1 300w, https:\/\/i0.wp.com\/evida.ugto.mx\/catalogo\/wp-content\/uploads\/sites\/5\/2025\/06\/Unidad-de-Apoyo-al-Desarrollo_CatalogoAD.png?resize=768%2C231&amp;ssl=1 768w, https:\/\/i0.wp.com\/evida.ugto.mx\/catalogo\/wp-content\/uploads\/sites\/5\/2025\/06\/Unidad-de-Apoyo-al-Desarrollo_CatalogoAD.png?w=1498&amp;ssl=1 1498w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-0 has-background-dim\" style=\"background-color:#675c89\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<p class=\"has-text-align-center has-nv-site-bg-color has-text-color has-link-color has-x-large-font-size wp-elements-456303e6ce5ed0b3d5a511ec9c08ff06\"><strong>Unidad de Apoyo al Desarrollo Educativo<\/strong><br><strong>Oferta de educaci\u00f3n continua<\/strong><\/p>\n<\/div><\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-5ca1a6df011c9724a4643683a1747bac\" style=\"color:#8c6e39\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"has-text-align-center\">Descubre la oferta educativa de la Unidad de Apoyo al Desarrollo Educativo. Potencia tu desarrollo profesional con opciones flexibles y de calidad. \u00a1Explora nuestros programas y alcanza tus metas!<\/p>\n\n\n\n<style>\n  \/* --- Estilos Generales --- *\/\n  #directorio-app {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    max-width: 1100px;\n    margin: 0 auto;\n    color: #333;\n    min-height: 400px;\n  }\n\n  \/* --- Barra Superior --- *\/\n  #top-bar {\n    background-color: #f4f6f8;\n    padding: 20px;\n    border-radius: 8px;\n    border: 1px solid #e0e0e0;\n    margin-bottom: 30px;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 15px;\n    align-items: center;\n    justify-content: space-between;\n  }\n\n  .nav-group {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n  }\n\n  \/* Bot\u00f3n Volver *\/\n  #btn-back {\n    display: none; \n    background: white;\n    border: 1px solid #ccc;\n    padding: 8px 15px;\n    border-radius: 4px;\n    cursor: pointer;\n    font-weight: 600;\n    color: #555;\n    transition: all 0.2s;\n  }\n  \n  #btn-back:hover {\n    background: #e9e9e9;\n    color: #333;\n  }\n\n  \/* Buscador *\/\n  .search-box {\n    display: flex;\n    gap: 0;\n    flex: 1;\n    max-width: 500px;\n  }\n\n  .search-input {\n    flex: 1;\n    padding: 10px 15px;\n    border: 1px solid #ccc;\n    border-right: none;\n    border-radius: 4px 0 0 4px;\n    font-size: 1rem;\n    outline: none;\n  }\n\n  .search-input:focus {\n    border-color: #0073aa;\n    box-shadow: inset 0 1px 2px rgba(0,0,0,0.05);\n  }\n\n  .search-btn {\n    padding: 10px 20px;\n    background-color: #0073aa;\n    color: white;\n    border: 1px solid #0073aa;\n    border-radius: 0 4px 4px 0;\n    cursor: pointer;\n    font-weight: 600;\n  }\n\n  .search-btn:hover {\n    background-color: #005a87;\n  }\n\n  \/* --- VISTA 1: GRID DE CATEGOR\u00cdAS --- *\/\n  #categories-view {\n    display: block;\n  }\n\n  .grid-container {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n    gap: 20px;\n  }\n\n  .cat-card {\n    background: #fff;\n    border: 1px solid #e0e0e0;\n    border-radius: 8px;\n    padding: 25px 20px;\n    text-align: center;\n    cursor: pointer;\n    transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n    box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    min-height: 120px;\n  }\n\n  .cat-card:hover {\n    transform: translateY(-5px);\n    box-shadow: 0 10px 20px rgba(0,115,170,0.15);\n    border-color: #0073aa;\n  }\n\n  .cat-icon {\n    font-size: 2rem;\n    color: #0073aa;\n    margin-bottom: 10px;\n    opacity: 0.8;\n  }\n\n  .cat-name {\n    font-weight: 700;\n    font-size: 1.1rem;\n    color: #333;\n    line-height: 1.3;\n  }\n  \n  .cat-count {\n    margin-top: 8px;\n    font-size: 0.85rem;\n    color: #888;\n    background: #f4f4f4;\n    padding: 2px 8px;\n    border-radius: 10px;\n  }\n\n  \/* --- VISTA 2: LISTA DE ENTRADAS --- *\/\n  #posts-view {\n    display: none;\n  }\n\n  .view-title {\n    font-size: 1.5rem;\n    margin-bottom: 20px;\n    padding-bottom: 10px;\n    border-bottom: 2px solid #f0f0f0;\n    color: #444;\n  }\n\n  .post-card {\n    background: #fff;\n    border: 1px solid #eee;\n    border-left: 4px solid #0073aa;\n    padding: 20px;\n    margin-bottom: 15px;\n    border-radius: 4px;\n    transition: transform 0.2s;\n  }\n\n  .post-card:hover {\n    transform: translateX(5px);\n    background: #fafafa;\n  }\n\n  .post-title a {\n    text-decoration: none;\n    color: #0073aa;\n    font-size: 1.2rem;\n    font-weight: bold;\n  }\n  \n  .post-meta {\n    margin-top: 8px;\n    font-size: 0.9rem;\n    color: #666;\n  }\n\n  \/* --- Elementos UI --- *\/\n  .loader-container {\n    text-align: center;\n    padding: 40px;\n    color: #777;\n    width: 100%;\n  }\n\n  .spinner {\n    border: 4px solid #f3f3f3;\n    border-top: 4px solid #0073aa;\n    border-radius: 50%;\n    width: 40px;\n    height: 40px;\n    animation: spin 1s linear infinite;\n    margin: 0 auto 15px auto;\n  }\n\n  @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n\n  #pagination {\n    display: flex;\n    justify-content: center;\n    gap: 15px;\n    margin-top: 30px;\n    align-items: center;\n  }\n\n  .page-btn {\n    padding: 8px 16px;\n    border: 1px solid #0073aa;\n    background: #fff;\n    color: #0073aa;\n    border-radius: 4px;\n    cursor: pointer;\n  }\n  .page-btn:disabled {\n    border-color: #ccc;\n    color: #ccc;\n    cursor: not-allowed;\n  }\n  .page-btn:hover:not(:disabled) {\n    background: #f0f8ff;\n  }\n\n<\/style>\n\n<div id=\"directorio-app\">\n\n  <!-- Barra Superior -->\n  <div id=\"top-bar\">\n    <div class=\"nav-group\">\n      <button id=\"btn-back\" title=\"Volver a las categor\u00edas\">\u2190 Volver al Directorio<\/button>\n      <h3 style=\"margin:0; font-size:1.1rem; color:#555;\" id=\"top-bar-title\">Directorio de Programas<\/h3>\n    <\/div>\n\n    <div class=\"search-box\">\n      <input type=\"text\" id=\"global-search\" class=\"search-input\" placeholder=\"Buscar programa...\">\n      <button id=\"btn-search-trigger\" class=\"search-btn\">Buscar<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- VISTA 1: GRID CATEGOR\u00cdAS -->\n  <div id=\"categories-view\">\n    <div id=\"cat-grid\" class=\"grid-container\">\n      <div class=\"loader-container\">\n        <div class=\"spinner\"><\/div>\n        <p>Analizando cat\u00e1logo completo de cursos&#8230;<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- VISTA 2: LISTA DE ENTRADAS -->\n  <div id=\"posts-view\">\n    <h2 id=\"results-title\" class=\"view-title\">Resultados<\/h2>\n    <div id=\"posts-list\">\n      <!-- Aqu\u00ed se inyectan las entradas -->\n    <\/div>\n    \n    <div id=\"pagination\" style=\"display:none;\">\n      <button id=\"prev-btn\" class=\"page-btn\">Anterior<\/button>\n      <span id=\"page-indicator\">P\u00e1gina 1<\/span>\n      <button id=\"next-btn\" class=\"page-btn\">Siguiente<\/button>\n    <\/div>\n  <\/div>\n\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n\n  \/\/ --- 1. CONFIGURACI\u00d3N ---\n  \/\/ Nota: He regresado la configuraci\u00f3n a 'modalidad' ID 16 como pediste.\n  \/\/ Si necesitas 'instancia' ID 30, solo cambia los valores aqu\u00ed.\n  const config = {\n    baseUrl: '\/catalogo',       \n    taxonomy: 'instancia',      \/\/ Para instancia usa 'instancia'\n    termId: 35,                 \/\/ Para instancia usa 30\n    perPage: 15                 \n  };\n\n  \/\/ --- 2. ESTADO GLOBAL ---\n  let state = {\n    view: 'categories', \n    currentCategoryName: '',\n    currentCategoryId: '',\n    searchTerm: '',\n    page: 1,\n    totalPages: 1,\n    localCategoryCounts: {} \n  };\n\n  \/\/ --- 3. REFERENCIAS DOM ---\n  const els = {\n    backBtn: document.getElementById('btn-back'),\n    topTitle: document.getElementById('top-bar-title'),\n    searchInput: document.getElementById('global-search'),\n    searchBtn: document.getElementById('btn-search-trigger'),\n    catView: document.getElementById('categories-view'),\n    catGrid: document.getElementById('cat-grid'),\n    postView: document.getElementById('posts-view'),\n    postList: document.getElementById('posts-list'),\n    resultsTitle: document.getElementById('results-title'),\n    pagination: document.getElementById('pagination'),\n    prevBtn: document.getElementById('prev-btn'),\n    nextBtn: document.getElementById('next-btn'),\n    pageInd: document.getElementById('page-indicator')\n  };\n\n  \/\/ --- 4. INICIALIZACI\u00d3N ---\n  init();\n\n  function init() {\n    initCategories();\n    setupEventListeners();\n  }\n\n  function setupEventListeners() {\n    els.searchBtn.addEventListener('click', () => performSearch());\n    els.searchInput.addEventListener('keypress', (e) => {\n      if(e.key === 'Enter') performSearch();\n    });\n    els.backBtn.addEventListener('click', () => {\n      switchView('categories');\n      els.searchInput.value = '';\n    });\n    els.prevBtn.addEventListener('click', () => changePage(-1));\n    els.nextBtn.addEventListener('click', () => changePage(1));\n  }\n\n  function switchView(viewName) {\n    state.view = viewName;\n    if (viewName === 'categories') {\n      els.catView.style.display = 'block';\n      els.postView.style.display = 'none';\n      els.backBtn.style.display = 'none';\n      els.topTitle.textContent = 'Directorio de Cursos';\n      state.currentCategoryId = '';\n      state.searchTerm = '';\n    } else {\n      els.catView.style.display = 'none';\n      els.postView.style.display = 'block';\n      els.backBtn.style.display = 'inline-block';\n    }\n  }\n\n  \/\/ --- 6. L\u00d3GICA DE CONTEO REAL (CON CHUNKING) ---\n  \n  async function initCategories() {\n    try {\n      \/\/ Paso A: Escanear TODOS los posts\n      const allCategoryIds = await fetchAllInstanceCategoryIds();\n      \n      if (allCategoryIds.length === 0) {\n        els.catGrid.innerHTML = `\n          <div style=\"text-align:center; color:#666; grid-column: 1 \/ -1;\">\n            <p>No se encontraron cursos para esta secci\u00f3n.<\/p>\n          <\/div>`;\n        return;\n      }\n\n      \/\/ Paso B: Calcular conteo local\n      const counts = {};\n      allCategoryIds.forEach(id => {\n        counts[id] = (counts[id] || 0) + 1;\n      });\n      state.localCategoryCounts = counts;\n\n      const uniqueIds = Object.keys(counts);\n      \n      \/\/ Paso C: Traer detalles (AHORA SOPORTA M\u00c1S DE 100)\n      const categoriesDetails = await fetchCategoriesDetails(uniqueIds);\n      \n      renderCategories(categoriesDetails);\n\n    } catch (error) {\n      console.error(error);\n      els.catGrid.innerHTML = '<p style=\"text-align:center; color:red;\">Error de conexi\u00f3n con el cat\u00e1logo.<\/p>';\n    }\n  }\n\n  async function fetchAllInstanceCategoryIds() {\n    let allIds = [];\n    let page = 1;\n    let hasMore = true;\n    const taxField = config.taxonomy; \n\n    while (hasMore) {\n      \/\/ Pedimos campos necesarios\n      const response = await fetch(`${config.baseUrl}\/wp-json\/wp\/v2\/posts?${config.taxonomy}=${config.termId}&per_page=100&page=${page}&_fields=categories,${taxField}`);\n      \n      if (!response.ok) break; \n\n      const posts = await response.json();\n      if (posts.length === 0) break;\n\n      posts.forEach(p => {\n        \/\/ Validaci\u00f3n Estricta (Client-side filter)\n        if (p[taxField]) {\n            if (!p[taxField].includes(config.termId)) return;\n        } else {\n            return; \n        }\n\n        if (p.categories) {\n           allIds.push(...p.categories);\n        }\n      });\n\n      const totalPages = parseInt(response.headers.get('X-WP-TotalPages') || '1');\n      if (page >= totalPages) hasMore = false;\n      else page++;\n    }\n    return allIds;\n  }\n\n  \/\/ --- FUNCI\u00d3N CORREGIDA: CARGA POR LOTES (CHUNKING) ---\n  async function fetchCategoriesDetails(ids) {\n    \/\/ WP limita 'include' a aprox 100 items. Si hay m\u00e1s, fallaba o cortaba.\n    \/\/ Soluci\u00f3n: Dividir en lotes de 50 y hacer varias peticiones.\n    const chunkSize = 50;\n    const chunks = [];\n    \n    for (let i = 0; i < ids.length; i += chunkSize) {\n        chunks.push(ids.slice(i, i + chunkSize));\n    }\n\n    const allCategories = [];\n\n    \/\/ Procesar lotes en paralelo\n    const promises = chunks.map(chunk => {\n        const idsString = chunk.join(',');\n        return fetch(`${config.baseUrl}\/wp-json\/wp\/v2\/categories?include=${idsString}&per_page=100`)\n            .then(res => {\n                if (!res.ok) return [];\n                return res.json();\n            });\n    });\n\n    const results = await Promise.all(promises);\n    \n    results.forEach(group => {\n        if (Array.isArray(group)) {\n            allCategories.push(...group);\n        }\n    });\n\n    return allCategories;\n  }\n\n  function renderCategories(cats) {\n    cats.sort((a,b) => a.name.localeCompare(b.name));\n    els.catGrid.innerHTML = '';\n    \n    cats.forEach(cat => {\n      const realCount = state.localCategoryCounts[cat.id] || 0;\n      const card = document.createElement('div');\n      card.className = 'cat-card';\n      card.innerHTML = `\n        <div class=\"cat-icon\">\ud83d\udcc2<\/div>\n        <div class=\"cat-name\">${cat.name}<\/div>\n        <div class=\"cat-count\">${realCount} programas<\/div>\n      `;\n      card.addEventListener('click', () => {\n        state.currentCategoryId = cat.id;\n        state.currentCategoryName = cat.name;\n        state.searchTerm = '';\n        state.page = 1;\n        loadPosts();\n      });\n      els.catGrid.appendChild(card);\n    });\n  }\n\n  function performSearch() {\n    const term = els.searchInput.value.trim();\n    if (!term) return; \n    state.searchTerm = term;\n    state.currentCategoryId = ''; \n    state.page = 1;\n    loadPosts();\n  }\n\n  function changePage(delta) {\n    state.page += delta;\n    loadPosts();\n  }\n\n  \/\/ --- CARGA DE CURSOS ---\n  function loadPosts() {\n    switchView('posts');\n    els.postList.innerHTML = `<div class=\"loader-container\"><div class=\"spinner\"><\/div><p>Cargando cursos...<\/p><\/div>`;\n    \n    if (state.searchTerm) els.resultsTitle.textContent = `Resultados para: \"${state.searchTerm}\"`;\n    else if (state.currentCategoryName) els.resultsTitle.textContent = `Categor\u00eda: ${state.currentCategoryName}`;\n    else els.resultsTitle.textContent = 'Todos los cursos';\n\n    const containerTop = document.getElementById('directorio-app').offsetTop;\n    window.scrollTo({ top: containerTop - 20, behavior: 'smooth' });\n\n    let url = `${config.baseUrl}\/wp-json\/wp\/v2\/posts?`;\n    url += `${config.taxonomy}=${config.termId}`; \n    url += `&per_page=${config.perPage}`;\n    url += `&page=${state.page}`;\n    url += `&_embed`; \n\n    if (state.currentCategoryId) url += `&categories=${state.currentCategoryId}`;\n    if (state.searchTerm) url += `&search=${encodeURIComponent(state.searchTerm)}`;\n\n    fetch(url)\n      .then(res => {\n        if (!res.ok) {\n           if(state.page > 1) { state.page = 1; return loadPosts(); }\n           throw new Error('Error al obtener datos');\n        }\n        const totalPages = res.headers.get('X-WP-TotalPages');\n        state.totalPages = totalPages ? parseInt(totalPages) : 1;\n        return res.json();\n      })\n      .then(posts => {\n        \/\/ Filtro visual extra\n        const validPosts = posts.filter(p => {\n            if (p[config.taxonomy] && Array.isArray(p[config.taxonomy])) {\n                return p[config.taxonomy].includes(config.termId);\n            }\n            return true; \n        });\n        \n        renderPosts(validPosts);\n        updatePagination();\n      })\n      .catch(err => {\n        console.warn(err);\n        els.postList.innerHTML = `<div class=\"loader-container\"><p>\u26a0\ufe0f No se encontraron cursos.<\/p><button class=\"page-btn\" onclick=\"document.getElementById('btn-back').click()\">Volver<\/button><\/div>`;\n        els.pagination.style.display = 'none';\n      });\n  }\n\n  function renderPosts(posts) {\n    if (!posts || posts.length === 0) {\n      els.postList.innerHTML = '<p style=\"text-align:center;\">No hay resultados.<\/p>';\n      return;\n    }\n\n    let html = '';\n    posts.forEach(post => {\n      let duracion = '';\n      if (post.acf && post.acf.duracion) duracion = ` \u2022 \u23f1 ${post.acf.duracion}`;\n      \n      let catName = '';\n      if (post._embedded && post._embedded['wp:term']) {\n        const terms = post._embedded['wp:term'].flat();\n        const cat = terms.find(t => t.taxonomy === 'category');\n        if (cat) catName = cat.name;\n      }\n\n      html += `\n        <div class=\"post-card\">\n          <div class=\"post-title\"><a href=\"${post.link}\">${post.title.rendered}<\/a><\/div>\n          <div class=\"post-meta\">${catName ? `<strong>${catName}<\/strong>` : ''} ${duracion}<\/div>\n        <\/div>\n      `;\n    });\n    els.postList.innerHTML = html;\n  }\n\n  function updatePagination() {\n    if (state.totalPages > 1) {\n      els.pagination.style.display = 'flex';\n      els.pageInd.textContent = `P\u00e1gina ${state.page} de ${state.totalPages}`;\n      els.prevBtn.disabled = (state.page <= 1);\n      els.nextBtn.disabled = (state.page >= state.totalPages);\n    } else {\n      els.pagination.style.display = 'none';\n    }\n  }\n});\n<\/script>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-3a4514e1f88da377adce722a4e78192f\" style=\"color:#8c6e39\">Cont\u00e1ctanos <\/h2>\n\n\n\n<p class=\"has-text-align-center\">\u00bfTienes dudas o comentarios sobre nuestra oferta educativa? La Unidad de Apoyo al Desarrollo Educativo est\u00e1 aqu\u00ed para ayudarte. Llena el siguiente formulario y nos pondremos en contacto contigo a la brevedad:<\/p>\n\n\n\n<div class=\"wp-block-contact-form-7-contact-form-selector aligncenter\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f5539-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"5539\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/catalogo\/wp-json\/wp\/v2\/pages\/5188#wpcf7-f5539-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"5539\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f5539-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<p><label> Tu nombre<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" autocomplete=\"name\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span> <\/label>\n<\/p>\n<p><label> Tu correo electr\u00f3nico<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" autocomplete=\"email\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"email\" name=\"your-email\" \/><\/span> <\/label>\n<\/p>\n<p><label> Asunto<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-subject\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"your-subject\" \/><\/span> <\/label>\n<\/p>\n<p><label> Tu mensaje (opcional)<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-message\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea\" aria-invalid=\"false\" name=\"your-message\"><\/textarea><\/span> <\/label>\n<\/p>\n<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Enviar\" \/>\n<\/p><p style=\"display: none !important;\" class=\"akismet-fields-container\" data-prefix=\"_wpcf7_ak_\"><label>&#916;<textarea name=\"_wpcf7_ak_hp_textarea\" cols=\"45\" rows=\"8\" maxlength=\"100\"><\/textarea><\/label><input type=\"hidden\" id=\"ak_js_1\" name=\"_wpcf7_ak_js\" value=\"87\"\/><script data-jetpack-boost=\"ignore\">document.getElementById( \"ak_js_1\" ).setAttribute( \"value\", ( new Date() ).getTime() );<\/script><\/p><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Descubre la oferta educativa de la Unidad de Apoyo al Desarrollo Educativo. Potencia tu desarrollo profesional con opciones flexibles y de calidad. \u00a1Explora nuestros programas y alcanza tus metas! \u2190 Volver al Directorio Directorio de Programas Buscar Analizando cat\u00e1logo completo de cursos&#8230; Resultados Anterior P\u00e1gina 1 Siguiente Cont\u00e1ctanos \u00bfTienes dudas o comentarios sobre nuestra&hellip;&nbsp;<a href=\"https:\/\/evida.ugto.mx\/catalogo\/uade\/\" rel=\"bookmark\">Leer m\u00e1s &raquo;<span class=\"screen-reader-text\">Oferta de educaci\u00f3n continua de la Unidad de Apoyo al Desarrollo Educativo<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"on","footnotes":""},"class_list":["post-5188","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/evida.ugto.mx\/catalogo\/wp-json\/wp\/v2\/pages\/5188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/evida.ugto.mx\/catalogo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/evida.ugto.mx\/catalogo\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/evida.ugto.mx\/catalogo\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/evida.ugto.mx\/catalogo\/wp-json\/wp\/v2\/comments?post=5188"}],"version-history":[{"count":1,"href":"https:\/\/evida.ugto.mx\/catalogo\/wp-json\/wp\/v2\/pages\/5188\/revisions"}],"predecessor-version":[{"id":7379,"href":"https:\/\/evida.ugto.mx\/catalogo\/wp-json\/wp\/v2\/pages\/5188\/revisions\/7379"}],"wp:attachment":[{"href":"https:\/\/evida.ugto.mx\/catalogo\/wp-json\/wp\/v2\/media?parent=5188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}