{"id":1610,"date":"2026-09-25T17:28:10","date_gmt":"2026-09-25T20:28:10","guid":{"rendered":"https:\/\/gcdc.com.ar\/?page_id=1610"},"modified":"2026-09-25T17:28:10","modified_gmt":"2026-09-25T20:28:10","slug":"tareas-de-marketing","status":"publish","type":"page","link":"https:\/\/gcdc.com.ar\/en\/tareas-de-marketing\/","title":{"rendered":"TAREAS DE MARKETING"},"content":{"rendered":"\t\t<div id=\"gcdcm-host-1\" style=\"opacity:0\"><\/div>\n\t\t<template id=\"gcdcm-tpl-1\">\n\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/gcdc.com.ar\/wp-content\/plugins\/gcdc-panel-marketing\/assets\/css\/admin.css?ver=0.29.1\" \/>\n\t\t\t\t\t\t\t\t\t<div class=\"gcdcm-wrap gcdcm-front\">\n\t\t\t\t<div class=\"gcdcm-login-screen\">\n\t\t\t\t\t<div class=\"gcdcm-login-card\">\n\t\t\t\t\t\t<div class=\"gcdcm-brand-mark\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\" aria-hidden=\"true\" focusable=\"false\"><polyline points=\"5,13 10,18 19,7\"\/><\/svg><\/div>\n\t\t\t\t\t\t<h1>Panel de Marketing<\/h1>\n\t\t\t\t\t\t<p class=\"description\">Inici\u00e1 sesi\u00f3n para ver tu panel.<\/p>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<form name=\"loginform\" id=\"loginform\" action=\"https:\/\/gcdc.com.ar\/gcdc-admin\/\" method=\"post\"><p class=\"login-username\">\n\t\t\t\t<label for=\"user_login\">Usuario o email<\/label>\n\t\t\t\t<input type=\"text\" name=\"log\" id=\"user_login\" autocomplete=\"username\" class=\"input\" value=\"\" size=\"20\" \/>\n\t\t\t<\/p><p class=\"login-password\">\n\t\t\t\t<label for=\"user_pass\">Contrase\u00f1a<\/label>\n\t\t\t\t<input type=\"password\" name=\"pwd\" id=\"user_pass\" autocomplete=\"current-password\" spellcheck=\"false\" class=\"input\" value=\"\" size=\"20\" \/>\n\t\t\t<\/p><p class=\"login-remember\"><label><input name=\"rememberme\" type=\"checkbox\" id=\"rememberme\" value=\"forever\" \/> Mantenerme conectado<\/label><\/p><p class=\"login-submit\">\n\t\t\t\t<input type=\"submit\" name=\"wp-submit\" id=\"wp-submit\" class=\"button button-primary\" value=\"Ingresar\" \/>\n\t\t\t\t<input type=\"hidden\" name=\"redirect_to\" value=\"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/pages\/1610\" \/>\n\t\t\t<\/p><\/form>\t\t\t\t\t\t<p class=\"gcdcm-login-lost\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/gcdc.com.ar\/gcdc-admin\/?action=lostpassword&#038;redirect_to=https%3A%2F%2Fgcdc.com.ar%2Fen%2Fwp-json%2Fwp%2Fv2%2Fpages%2F1610\">\u00bfOlvidaste tu contrase\u00f1a?<\/a>\n\t\t\t\t\t\t<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<\/template>\n\t\t<script>\n\t\t( function () {\n\t\t\tvar host = document.getElementById( \"gcdcm-host-1\" );\n\t\t\tvar tpl = document.getElementById( \"gcdcm-tpl-1\" );\n\t\t\tif ( ! host || ! tpl ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\/\/ El host arranca invisible (ver el atributo style de arriba) para\n\t\t\t\/\/ que no se vea, ni una fracci\u00f3n de segundo, el HTML sin CSS antes\n\t\t\t\/\/ de que cargue admin.css \u2014 reci\u00e9n se revela cuando la hoja de\n\t\t\t\/\/ estilos termin\u00f3 de aplicar (o, como red de seguridad, apenas se\n\t\t\t\/\/ clona el contenido si el navegador no soporta Shadow DOM\/<link\n\t\t\t\/\/ onload> dentro de <template>).\n\t\t\tvar reveal = function () {\n\t\t\t\thost.style.opacity = '1';\n\t\t\t};\n\n\t\t\tvar AJAX_URL = \"https:\\\/\\\/gcdc.com.ar\\\/wp-admin\\\/admin-ajax.php\";\n\n\t\t\t\/\/ data-foo-bar=\"x\" -> campo \"foo_bar\" (as\u00ed el PHP recibe $_POST\n\t\t\t\/\/ normal, sin tener que lidiar con camelCase). \"skip\" son los\n\t\t\t\/\/ data-* que son instrucciones para el JS, no datos a mandar.\n\t\t\t\/\/ data-nonce es un caso especial: viaja como \"_wpnonce\", el mismo\n\t\t\t\/\/ nombre de campo que ya manda wp_nonce_field() en los <form> \u2014\n\t\t\t\/\/ as\u00ed todos los handlers AJAX verifican el nonce de la misma\n\t\t\t\/\/ forma sin importar si vinieron de un <input>\/<a> con data-nonce\n\t\t\t\/\/ o de un <form> normal.\n\t\t\tvar datasetToFormData = function ( el, body, skip ) {\n\t\t\t\tfor ( var key in el.dataset ) {\n\t\t\t\t\tif ( skip.indexOf( key ) !== -1 ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar campo = 'nonce' === key ? '_wpnonce' : key.replace( \/[A-Z]\/g, function ( m ) { return '_' + m.toLowerCase(); } );\n\t\t\t\t\tbody.append( campo, el.dataset[ key ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar postAndReplace = function ( body, target, onSuccess, onError ) {\n\t\t\t\tfetch( AJAX_URL, { method: 'POST', credentials: 'same-origin', body: body } )\n\t\t\t\t\t.then( function ( r ) { return r.json(); } )\n\t\t\t\t\t.then( function ( data ) {\n\t\t\t\t\t\tif ( data && data.success && data.data && 'string' === typeof data.data.html ) {\n\t\t\t\t\t\t\tonSuccess( data.data.html );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonError();\n\t\t\t\t\t\t}\n\t\t\t\t\t} )\n\t\t\t\t\t.catch( onError );\n\t\t\t};\n\n\t\t\t\/**\n\t\t\t * Patr\u00f3n gen\u00e9rico \"ajax-toggle\" (ver docblock de GCDCM_Front):\n\t\t\t * cualquier <input class=\"gcdcm-ajax-toggle\" data-ajax-action=\"...\"\n\t\t\t * data-target=\"#selector\"> postea sus data-* a admin-ajax.php y\n\t\t\t * reemplaza el target con el HTML que devuelva el handler \u2014 as\u00ed una\n\t\t\t * vista puede sentirse instant\u00e1nea sin recargar toda la p\u00e1gina.\n\t\t\t * \"scope\" es el shadow root (o el host mismo, en el fallback sin\n\t\t\t * Shadow DOM) para no depender de querySelector sobre el documento.\n\t\t\t * Todo queda delegado sobre \"scope\" (nunca se reemplaza a s\u00ed\n\t\t\t * mismo), as\u00ed sigue funcionando despu\u00e9s de que un target.replaceWith()\n\t\t\t * cambie el contenido de adentro \u2014 no hace falta volver a bindear.\n\t\t\t *\/\n\t\t\t\/**\n\t\t\t * Patr\u00f3n gen\u00e9rico \"solapas\": <div class=\"gcdcm-subtabs\"\n\t\t\t * data-tabs-group=\"x\"> con botones data-tab=\"a\", y paneles\n\t\t\t * data-tab-panel=\"a\" en el mismo contenedor. Se recuerda la\n\t\t\t * elegida por grupo (en memoria y en localStorage), y applyTabs()\n\t\t\t * la vuelve a aplicar cada vez que un reemplazo AJAX repinta el\n\t\t\t * bloque \u2014 si no, tildar una tarea te devolver\u00eda a la primera.\n\t\t\t *\/\n\t\t\tvar tabsElegidas = {};\n\t\t\tvar activarTab = function ( bar, tab ) {\n\t\t\t\tbar.querySelectorAll( '[data-tab]' ).forEach( function ( b ) {\n\t\t\t\t\tvar on = b.dataset.tab === tab;\n\t\t\t\t\tb.classList.toggle( 'is-active', on );\n\t\t\t\t\tb.setAttribute( 'aria-selected', on ? 'true' : 'false' );\n\t\t\t\t} );\n\t\t\t\tbar.parentElement.querySelectorAll( '[data-tab-panel]' ).forEach( function ( panel ) {\n\t\t\t\t\tpanel.classList.toggle( 'is-active', panel.dataset.tabPanel === tab );\n\t\t\t\t} );\n\t\t\t};\n\t\t\t\/\/ Mismo problema con los <details data-keep-open=\"x\"> (ej: \"5 hechas\"\n\t\t\t\/\/ del checklist): si la persona lo abri\u00f3, sigue abierto despu\u00e9s de\n\t\t\t\/\/ que un reemplazo AJAX lo repinte cerrado. \"toggle\" no burbujea,\n\t\t\t\/\/ por eso se escucha en fase de captura.\n\t\t\tvar abiertos = {};\n\t\t\tvar bindKeepOpen = function ( scope ) {\n\t\t\t\tscope.addEventListener( 'toggle', function ( e ) {\n\t\t\t\t\tvar d = e.target;\n\t\t\t\t\tif ( d && d.dataset && d.dataset.keepOpen ) {\n\t\t\t\t\t\tabiertos[ d.dataset.keepOpen ] = d.open;\n\t\t\t\t\t}\n\t\t\t\t}, true );\n\t\t\t};\n\t\t\tvar applyTabs = function ( scope ) {\n\t\t\t\tscope.querySelectorAll( 'details[data-keep-open]' ).forEach( function ( d ) {\n\t\t\t\t\tif ( abiertos[ d.dataset.keepOpen ] ) {\n\t\t\t\t\t\td.open = true;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tscope.querySelectorAll( '.gcdcm-subtabs[data-tabs-group]' ).forEach( function ( bar ) {\n\t\t\t\t\tvar grupo = bar.dataset.tabsGroup;\n\t\t\t\t\tvar tab = tabsElegidas[ grupo ];\n\t\t\t\t\tif ( ! tab ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\ttab = window.localStorage.getItem( 'gcdcm_tab_' + grupo );\n\t\t\t\t\t\t} catch ( err ) {}\n\t\t\t\t\t}\n\t\t\t\t\tif ( tab && bar.querySelector( '[data-tab=\"' + tab + '\"]' ) ) {\n\t\t\t\t\t\tactivarTab( bar, tab );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t\tvar bindTabs = function ( scope ) {\n\t\t\t\tscope.addEventListener( 'click', function ( e ) {\n\t\t\t\t\tvar btn = e.target.closest ? e.target.closest( '.gcdcm-subtabs [data-tab]' ) : null;\n\t\t\t\t\tif ( ! btn ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar bar = btn.closest( '.gcdcm-subtabs' );\n\t\t\t\t\ttabsElegidas[ bar.dataset.tabsGroup ] = btn.dataset.tab;\n\t\t\t\t\ttry {\n\t\t\t\t\t\twindow.localStorage.setItem( 'gcdcm_tab_' + bar.dataset.tabsGroup, btn.dataset.tab );\n\t\t\t\t\t} catch ( err ) {}\n\t\t\t\t\tactivarTab( bar, btn.dataset.tab );\n\t\t\t\t} );\n\t\t\t\tscope.querySelectorAll( '.gcdcm-subtabs[data-tab-forced]' ).forEach( function ( bar ) {\n\t\t\t\t\ttabsElegidas[ bar.dataset.tabsGroup ] = bar.dataset.tabForced;\n\t\t\t\t} );\n\t\t\t\tapplyTabs( scope );\n\t\t\t};\n\n\t\t\tvar bindAsyncToggles = function ( scope ) {\n\t\t\t\tscope.addEventListener( 'change', function ( e ) {\n\t\t\t\t\tvar el = e.target.closest ? e.target.closest( '.gcdcm-ajax-toggle' ) : null;\n\t\t\t\t\tif ( ! el || ! el.dataset.ajaxAction ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar target = el.dataset.target ? scope.querySelector( el.dataset.target ) : null;\n\t\t\t\t\t\/\/ El navegador ya invirti\u00f3 el checkbox antes de disparar\n\t\t\t\t\t\/\/ \"change\" \u2014 si el pedido falla, hay que devolverlo al\n\t\t\t\t\t\/\/ estado que ten\u00eda antes del click (el opuesto de \u00e9ste).\n\t\t\t\t\tvar estadoSiFalla = ! el.checked;\n\t\t\t\t\tel.disabled = true;\n\n\t\t\t\t\tvar body = new FormData();\n\t\t\t\t\tbody.append( 'action', el.dataset.ajaxAction );\n\t\t\t\t\tdatasetToFormData( el, body, [ 'ajaxAction', 'target' ] );\n\n\t\t\t\t\tpostAndReplace(\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tfunction ( html ) {\n\t\t\t\t\t\t\tvar wrapper = document.createElement( 'div' );\n\t\t\t\t\t\t\twrapper.innerHTML = html;\n\t\t\t\t\t\t\tif ( target && wrapper.firstElementChild ) {\n\t\t\t\t\t\t\t\ttarget.replaceWith( wrapper.firstElementChild );\n\t\t\t\t\t\t\t\tapplyTabs( scope );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tel.checked = estadoSiFalla;\n\t\t\t\t\t\t\tel.disabled = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\t\/**\n\t\t\t * Patr\u00f3n gen\u00e9rico \"ajax-form\": <form class=\"gcdcm-ajax-form\"\n\t\t\t * data-target=\"#selector\"> se postea entero (FormData del propio\n\t\t\t * form, con sus inputs\/textarea\/file) en vez de navegar. Sirve\n\t\t\t * para altas Y bajas (un mini-form de \"Eliminar\" es, ni m\u00e1s ni\n\t\t\t * menos, esto mismo). data-confirm pide confirmaci\u00f3n antes de\n\t\t\t * mandar nada.\n\t\t\t *\/\n\t\t\tvar bindAsyncForms = function ( scope ) {\n\t\t\t\tscope.addEventListener( 'submit', function ( e ) {\n\t\t\t\t\tvar form = e.target.closest ? e.target.closest( '.gcdcm-ajax-form' ) : null;\n\t\t\t\t\tif ( ! form ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif ( form.dataset.confirm && ! window.confirm( form.dataset.confirm ) ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar target = form.dataset.target ? scope.querySelector( form.dataset.target ) : null;\n\t\t\t\t\tvar submitBtn = form.querySelector( '[type=\"submit\"]' );\n\t\t\t\t\tif ( submitBtn ) {\n\t\t\t\t\t\tsubmitBtn.disabled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tpostAndReplace(\n\t\t\t\t\t\tnew FormData( form ),\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tfunction ( html ) {\n\t\t\t\t\t\t\tvar wrapper = document.createElement( 'div' );\n\t\t\t\t\t\t\twrapper.innerHTML = html;\n\t\t\t\t\t\t\tif ( target && wrapper.firstElementChild ) {\n\t\t\t\t\t\t\t\ttarget.replaceWith( wrapper.firstElementChild );\n\t\t\t\t\t\t\t\tapplyTabs( scope );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tif ( submitBtn ) {\n\t\t\t\t\t\t\t\tsubmitBtn.disabled = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\t\/**\n\t\t\t * Patr\u00f3n gen\u00e9rico \"ajax-expand\": <a class=\"gcdcm-ajax-expand\"\n\t\t\t * data-ajax-action=\"...\" data-panel=\"id-unico\"> carga un panel la\n\t\t\t * primera vez que se clickea y lo saca si ya estaba abierto \u2014 sin\n\t\t\t * volver a pedirlo de nuevo. El HTML que devuelve el handler\n\t\t\t * tiene que traer ese mismo id como elemento ra\u00edz. Por default el\n\t\t\t * panel se inserta justo despu\u00e9s del propio link; si el link\n\t\t\t * vive dentro de un elemento m\u00e1s grande del que el panel deber\u00eda\n\t\t\t * colgar entero (una fila de lista, por ejemplo), data-anchor\n\t\t\t * con un selector lo busca v\u00eda closest() y cuelga de ah\u00ed en vez.\n\t\t\t * Adem\u00e1s, esta clase se puede poner directamente en un contenedor\n\t\t\t * grande (una fila entera) para que CLICKEARLA EN CUALQUIER PARTE\n\t\t\t * la despliegue \u2014 en ese caso, si lo que se clicke\u00f3 en realidad\n\t\t\t * fue un control interactivo de adentro (el checkbox de tildar\n\t\t\t * la tarea, por ejemplo), se lo deja hacer lo suyo y no se toca\n\t\t\t * el panel.\n\t\t\t *\/\n\t\t\tvar bindAsyncExpand = function ( scope ) {\n\t\t\t\tscope.addEventListener( 'click', function ( e ) {\n\t\t\t\t\tvar el = e.target.closest ? e.target.closest( '.gcdcm-ajax-expand' ) : null;\n\t\t\t\t\tif ( ! el || ! el.dataset.ajaxAction || ! el.dataset.panel ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar control = e.target.closest( 'input, select, textarea, button, a' );\n\t\t\t\t\tif ( control && control !== el ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tvar existente = scope.querySelector( '#' + el.dataset.panel );\n\t\t\t\t\tif ( existente ) {\n\t\t\t\t\t\texistente.remove();\n\t\t\t\t\t\tel.classList.remove( 'is-open' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar anchor = el.dataset.anchor ? el.closest( el.dataset.anchor ) : el;\n\t\t\t\t\tif ( ! anchor ) {\n\t\t\t\t\t\tanchor = el;\n\t\t\t\t\t}\n\n\t\t\t\t\tel.classList.add( 'is-open' );\n\t\t\t\t\tvar body = new FormData();\n\t\t\t\t\tbody.append( 'action', el.dataset.ajaxAction );\n\t\t\t\t\tdatasetToFormData( el, body, [ 'ajaxAction', 'panel', 'anchor' ] );\n\n\t\t\t\t\tpostAndReplace(\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tfunction ( html ) {\n\t\t\t\t\t\t\tvar wrapper = document.createElement( 'div' );\n\t\t\t\t\t\t\twrapper.innerHTML = html;\n\t\t\t\t\t\t\tif ( wrapper.firstElementChild ) {\n\t\t\t\t\t\t\t\tanchor.insertAdjacentElement( 'afterend', wrapper.firstElementChild );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tel.classList.remove( 'is-open' );\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\t\/**\n\t\t\t * Buscador del sidebar (ver GCDCM_Front_Search): filtra en el\n\t\t\t * navegador el \u00edndice JSON que viene con la p\u00e1gina. Se busca sin\n\t\t\t * distinguir may\u00fasculas ni tildes, y tienen que aparecer todas las\n\t\t\t * palabras escritas (en el t\u00edtulo o el subt\u00edtulo). Flechas para\n\t\t\t * moverse, Enter para abrir, Esc para cerrar; \"\/\" o Ctrl+K enfocan\n\t\t\t * el buscador desde cualquier lado.\n\t\t\t *\/\n\t\t\tvar bindSearch = function ( scope ) {\n\t\t\t\tvar box = scope.querySelector( '.gcdcm-search' );\n\t\t\t\tif ( ! box ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar input = box.querySelector( '.gcdcm-search-input' );\n\t\t\t\tvar list = box.querySelector( '.gcdcm-search-results' );\n\t\t\t\tvar items = [];\n\t\t\t\ttry {\n\t\t\t\t\titems = JSON.parse( box.querySelector( '.gcdcm-search-data' ).textContent ) || [];\n\t\t\t\t} catch ( err ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar MAX = 12;\n\t\t\t\tvar norm = function ( s ) {\n\t\t\t\t\treturn String( s || '' ).toLowerCase().normalize( 'NFD' ).replace( \/[\\u0300-\\u036f]\/g, '' );\n\t\t\t\t};\n\t\t\t\titems.forEach( function ( it ) {\n\t\t\t\t\tit._h = norm( it.t + ' ' + it.s + ' ' + it.g );\n\t\t\t\t\tit._t = norm( it.t );\n\t\t\t\t} );\n\t\t\t\tvar activo = -1;\n\t\t\t\tvar visibles = [];\n\n\t\t\t\tvar cerrar = function () {\n\t\t\t\t\tlist.hidden = true;\n\t\t\t\t\tactivo = -1;\n\t\t\t\t};\n\t\t\t\tvar marcar = function ( i ) {\n\t\t\t\t\tvar filas = list.querySelectorAll( '.gcdcm-search-item' );\n\t\t\t\t\tfilas.forEach( function ( f, j ) {\n\t\t\t\t\t\tf.classList.toggle( 'is-active', j === i );\n\t\t\t\t\t} );\n\t\t\t\t\tactivo = i;\n\t\t\t\t\tif ( filas[ i ] ) {\n\t\t\t\t\t\tfilas[ i ].scrollIntoView( { block: 'nearest' } );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tvar esc = function ( s ) {\n\t\t\t\t\tvar d = document.createElement( 'div' );\n\t\t\t\t\td.textContent = s;\n\t\t\t\t\treturn d.innerHTML;\n\t\t\t\t};\n\n\t\t\t\tvar buscar = function () {\n\t\t\t\t\tvar q = norm( input.value ).trim();\n\t\t\t\t\tif ( ! q ) {\n\t\t\t\t\t\tcerrar();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar palabras = q.split( \/\\s+\/ );\n\t\t\t\t\tvisibles = items.filter( function ( it ) {\n\t\t\t\t\t\treturn palabras.every( function ( p ) { return it._h.indexOf( p ) !== -1; } );\n\t\t\t\t\t} );\n\t\t\t\t\t\/\/ Primero lo que empieza con lo escrito, despu\u00e9s el resto.\n\t\t\t\t\tvisibles.sort( function ( a, b ) {\n\t\t\t\t\t\treturn ( a._t.indexOf( q ) === 0 ? 0 : 1 ) - ( b._t.indexOf( q ) === 0 ? 0 : 1 );\n\t\t\t\t\t} );\n\t\t\t\t\tvar total = visibles.length;\n\t\t\t\t\tvisibles = visibles.slice( 0, MAX );\n\n\t\t\t\t\tif ( ! total ) {\n\t\t\t\t\t\tlist.innerHTML = '<div class=\"gcdcm-search-empty\">' + esc( 'Sin resultados para \"' + input.value.trim() + '\"' ) + '<\/div>';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar html = '';\n\t\t\t\t\t\tvar grupo = null;\n\t\t\t\t\t\tvisibles.forEach( function ( it, i ) {\n\t\t\t\t\t\t\tif ( it.g !== grupo ) {\n\t\t\t\t\t\t\t\tgrupo = it.g;\n\t\t\t\t\t\t\t\thtml += '<div class=\"gcdcm-search-group\">' + esc( grupo ) + '<\/div>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thtml += '<div class=\"gcdcm-search-item\" role=\"option\" data-i=\"' + i + '\">'\n\t\t\t\t\t\t\t\t+ '<a class=\"gcdcm-search-main\" href=\"' + esc( it.u ) + '\"><span class=\"gcdcm-search-title\">' + esc( it.t ) + '<\/span>'\n\t\t\t\t\t\t\t\t+ ( it.s ? '<span class=\"gcdcm-search-sub\">' + esc( it.s ) + '<\/span>' : '' ) + '<\/a>'\n\t\t\t\t\t\t\t\t+ ( it.u2 ? '<a class=\"gcdcm-search-alt\" href=\"' + esc( it.u2 ) + '\">' + esc( it.l2 ) + '<\/a>' : '' )\n\t\t\t\t\t\t\t\t+ '<\/div>';\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tif ( total > MAX ) {\n\t\t\t\t\t\t\thtml += '<div class=\"gcdcm-search-empty\">' + esc( 'Mostrando ' + MAX + ' de ' + total + '. Escrib\u00ed m\u00e1s para acotar.' ) + '<\/div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlist.innerHTML = html;\n\t\t\t\t\t}\n\t\t\t\t\tlist.hidden = false;\n\t\t\t\t\tmarcar( total ? 0 : -1 );\n\t\t\t\t};\n\n\t\t\t\tinput.addEventListener( 'input', buscar );\n\t\t\t\tinput.addEventListener( 'focus', function () {\n\t\t\t\t\tif ( input.value.trim() ) {\n\t\t\t\t\t\tbuscar();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tinput.addEventListener( 'keydown', function ( e ) {\n\t\t\t\t\tif ( 'ArrowDown' === e.key || 'ArrowUp' === e.key ) {\n\t\t\t\t\t\tif ( list.hidden || ! visibles.length ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tvar n = visibles.length;\n\t\t\t\t\t\tmarcar( ( activo + ( 'ArrowDown' === e.key ? 1 : n - 1 ) ) % n );\n\t\t\t\t\t} else if ( 'Enter' === e.key ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tif ( visibles[ activo ] && ! list.hidden ) {\n\t\t\t\t\t\t\twindow.location.href = visibles[ activo ].u;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( 'Escape' === e.key ) {\n\t\t\t\t\t\tinput.value = '';\n\t\t\t\t\t\tcerrar();\n\t\t\t\t\t\tinput.blur();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tlist.addEventListener( 'mousemove', function ( e ) {\n\t\t\t\t\tvar fila = e.target.closest( '.gcdcm-search-item' );\n\t\t\t\t\tif ( fila && +fila.dataset.i !== activo ) {\n\t\t\t\t\t\tmarcar( +fila.dataset.i );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\t\/\/ Click afuera cierra. composedPath() atraviesa el shadow root.\n\t\t\t\tdocument.addEventListener( 'click', function ( e ) {\n\t\t\t\t\tif ( e.composedPath().indexOf( box ) === -1 ) {\n\t\t\t\t\t\tcerrar();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tdocument.addEventListener( 'keydown', function ( e ) {\n\t\t\t\t\tvar enCampo = e.composedPath().some( function ( n ) {\n\t\t\t\t\t\treturn n.tagName && \/^(INPUT|TEXTAREA|SELECT)$\/.test( n.tagName ) || n.isContentEditable;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( ( '\/' === e.key && ! enCampo ) || ( ( e.ctrlKey || e.metaKey ) && 'k' === e.key.toLowerCase() ) ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinput.focus();\n\t\t\t\t\t\tinput.select();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\t\/**\n\t\t\t * L\u00e1piz de \"Mis tareas\": muestra \/ oculta el formulario de\n\t\t\t * edici\u00f3n de esa fila (data-edit-form = id del form). Lo usa\n\t\t\t * tambi\u00e9n el bot\u00f3n \"Cancelar\" del propio formulario.\n\t\t\t *\/\n\t\t\tvar bindEditToggles = function ( scope ) {\n\t\t\t\tscope.addEventListener( 'click', function ( e ) {\n\t\t\t\t\tvar btn = e.target.closest ? e.target.closest( '.gcdcm-propia-edit-toggle' ) : null;\n\t\t\t\t\tif ( ! btn ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar form = scope.querySelector( '#' + btn.dataset.editForm );\n\t\t\t\t\tif ( ! form ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tform.hidden = ! form.hidden;\n\t\t\t\t\tform.closest( '.gcdcm-task-row' ).querySelectorAll( '.gcdcm-propia-edit-toggle[aria-expanded]' ).forEach( function ( b ) {\n\t\t\t\t\t\tb.setAttribute( 'aria-expanded', form.hidden ? 'false' : 'true' );\n\t\t\t\t\t} );\n\t\t\t\t\tif ( ! form.hidden ) {\n\t\t\t\t\t\tvar titulo = form.querySelector( '[name=\"titulo\"]' );\n\t\t\t\t\t\tif ( titulo ) {\n\t\t\t\t\t\t\ttitulo.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tvar bindAsyncPatterns = function ( scope ) {\n\t\t\t\tbindAsyncToggles( scope );\n\t\t\t\tbindAsyncForms( scope );\n\t\t\t\tbindAsyncExpand( scope );\n\t\t\t\tbindSearch( scope );\n\t\t\t\tbindKeepOpen( scope );\n\t\t\t\tbindTabs( scope );\n\t\t\t\tbindEditToggles( scope );\n\t\t\t};\n\n\t\t\t\/\/ Puede haber m\u00e1s de una hoja de estilos (modo presentaci\u00f3n suma\n\t\t\t\/\/ una segunda que pisa la real) \u2014 hay que esperar a que carguen\n\t\t\t\/\/ TODAS antes de revelar, si no se alcanza a ver un flash del\n\t\t\t\/\/ dise\u00f1o real de admin.css antes de que aplique la de arriba.\n\t\t\tvar revealWhenStylesReady = function ( scope ) {\n\t\t\t\tvar stylesheets = scope.querySelectorAll( 'link[rel=\"stylesheet\"]' );\n\t\t\t\tif ( ! stylesheets.length ) {\n\t\t\t\t\treveal();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar pendientes = stylesheets.length;\n\t\t\t\tvar unoListo = function () {\n\t\t\t\t\tpendientes--;\n\t\t\t\t\tif ( pendientes <= 0 ) {\n\t\t\t\t\t\treveal();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tstylesheets.forEach( function ( s ) {\n\t\t\t\t\ts.addEventListener( 'load', unoListo );\n\t\t\t\t\ts.addEventListener( 'error', unoListo );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tif ( host.attachShadow ) {\n\t\t\t\tvar root = host.attachShadow( { mode: 'open' } );\n\t\t\t\troot.appendChild( tpl.content.cloneNode( true ) );\n\t\t\t\tbindAsyncPatterns( root );\n\t\t\t\trevealWhenStylesReady( root );\n\t\t\t} else {\n\t\t\t\t\/\/ Navegador sin soporte de Shadow DOM: degradamos a mostrarlo\n\t\t\t\t\/\/ sin aislar (mejor eso que no mostrar nada).\n\t\t\t\thost.appendChild( tpl.content.cloneNode( true ) );\n\t\t\t\tbindAsyncPatterns( host );\n\t\t\t\treveal();\n\t\t\t}\n\t\t} )();\n\t\t<\/script>\n\t\t\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1610","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TAREAS DE MARKETING - GCDC<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gcdc.com.ar\/en\/tareas-de-marketing\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TAREAS DE MARKETING - GCDC\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gcdc.com.ar\/en\/tareas-de-marketing\/\" \/>\n<meta property=\"og:site_name\" content=\"GCDC\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gcdc.com.ar\/wp-content\/uploads\/2026\/08\/gcdc-logo-2026.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/tareas-de-marketing\\\/\",\"url\":\"https:\\\/\\\/gcdc.com.ar\\\/tareas-de-marketing\\\/\",\"name\":\"TAREAS DE MARKETING - GCDC\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/#website\"},\"datePublished\":\"2026-09-25T20:28:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/tareas-de-marketing\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gcdc.com.ar\\\/tareas-de-marketing\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/tareas-de-marketing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\\\/\\\/gcdc.com.ar\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TAREAS DE MARKETING\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/#website\",\"url\":\"https:\\\/\\\/gcdc.com.ar\\\/\",\"name\":\"GCDC\",\"description\":\"Soluciones de movilidad\",\"publisher\":{\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gcdc.com.ar\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/#organization\",\"name\":\"GCDC\",\"url\":\"https:\\\/\\\/gcdc.com.ar\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/gcdc.com.ar\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/gcdc-logo-2026.jpg\",\"contentUrl\":\"https:\\\/\\\/gcdc.com.ar\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/gcdc-logo-2026.jpg\",\"width\":1200,\"height\":675,\"caption\":\"GCDC\"},\"image\":{\"@id\":\"https:\\\/\\\/gcdc.com.ar\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/grupo-gcdc\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TAREAS DE MARKETING - GCDC","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gcdc.com.ar\/en\/tareas-de-marketing\/","og_locale":"en_GB","og_type":"article","og_title":"TAREAS DE MARKETING - GCDC","og_url":"https:\/\/gcdc.com.ar\/en\/tareas-de-marketing\/","og_site_name":"GCDC","og_image":[{"width":1200,"height":675,"url":"https:\/\/gcdc.com.ar\/wp-content\/uploads\/2026\/08\/gcdc-logo-2026.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gcdc.com.ar\/tareas-de-marketing\/","url":"https:\/\/gcdc.com.ar\/tareas-de-marketing\/","name":"TAREAS DE MARKETING - GCDC","isPartOf":{"@id":"https:\/\/gcdc.com.ar\/#website"},"datePublished":"2026-09-25T20:28:10+00:00","breadcrumb":{"@id":"https:\/\/gcdc.com.ar\/tareas-de-marketing\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gcdc.com.ar\/tareas-de-marketing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gcdc.com.ar\/tareas-de-marketing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/gcdc.com.ar\/"},{"@type":"ListItem","position":2,"name":"TAREAS DE MARKETING"}]},{"@type":"WebSite","@id":"https:\/\/gcdc.com.ar\/#website","url":"https:\/\/gcdc.com.ar\/","name":"GCDC","description":"Soluciones de movilidad","publisher":{"@id":"https:\/\/gcdc.com.ar\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gcdc.com.ar\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/gcdc.com.ar\/#organization","name":"GCDC","url":"https:\/\/gcdc.com.ar\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/gcdc.com.ar\/#\/schema\/logo\/image\/","url":"https:\/\/gcdc.com.ar\/wp-content\/uploads\/2026\/08\/gcdc-logo-2026.jpg","contentUrl":"https:\/\/gcdc.com.ar\/wp-content\/uploads\/2026\/08\/gcdc-logo-2026.jpg","width":1200,"height":675,"caption":"GCDC"},"image":{"@id":"https:\/\/gcdc.com.ar\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/grupo-gcdc"]}]}},"_links":{"self":[{"href":"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/pages\/1610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/comments?post=1610"}],"version-history":[{"count":1,"href":"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/pages\/1610\/revisions"}],"predecessor-version":[{"id":1611,"href":"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/pages\/1610\/revisions\/1611"}],"wp:attachment":[{"href":"https:\/\/gcdc.com.ar\/en\/wp-json\/wp\/v2\/media?parent=1610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}