5846c515f3
- 4 temas WordPress: persona-cv (activo), lumina, apex-cv, cvolio - Plugin pflores-cv-fields con CMB2 (100% gratuito) — admin editable - Generador PDF dinámico con Chromium headless (?cv_pdf=1) - Datos del CV de Patricia Flores cargados en CMB2 - URL dinámica con soporte proxy SSL (NPM/X-Forwarded-Proto) - WP Mail SMTP instalado (pendiente config SMTP) - Documentación completa: PROMPT_IA.md, DEPLOY_WEB.md, PRODUCCION.md, VERSIONADO.md
293 lines
13 KiB
PHP
293 lines
13 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
get_header();
|
|
|
|
$cv = function_exists('pflores_get_cv_data') ? pflores_get_cv_data() : cvolio_cv_data();
|
|
$hero = $cv['hero'];
|
|
$metrics = $cv['metrics'];
|
|
$highlights = $cv['highlights'];
|
|
$summary = $cv['summary'];
|
|
$impact = $cv['impact'];
|
|
$experience = $cv['experience'];
|
|
$education = $cv['education'];
|
|
$certifications = $cv['certifications'];
|
|
$competencies = $cv['competencies'];
|
|
$volunteer = $cv['volunteer'];
|
|
$additional = $cv['additional'];
|
|
$qrImage = get_template_directory_uri() . '/assets/images/patricia-flores-qr.png';
|
|
$publicUrl = 'https://pflores.linkedcorp.net';
|
|
|
|
$heroName = $hero['name'];
|
|
$heroRole = $hero['role'];
|
|
$heroIntro = $hero['intro'];
|
|
$heroLocation = $hero['location'];
|
|
$heroEmail = $hero['email'];
|
|
$heroPhone = $hero['phone'];
|
|
$heroCtaLabel = 'Ver trayectoria';
|
|
$heroCtaUrl = '#experiencia';
|
|
$linkedin = $hero['linkedin'];
|
|
// Compatibilidad CVolio: skills como array plano para pills
|
|
$skillsFlat = [];
|
|
foreach ($competencies as $groupItems) {
|
|
foreach ((array) $groupItems as $item) {
|
|
$skillsFlat[] = is_array($item) ? ($item['name'] ?? '') : (string) $item;
|
|
}
|
|
}
|
|
$skills = array_filter($skillsFlat);
|
|
$acfPhoto = $cv['photo'] ?? '';
|
|
$profileImage = $acfPhoto ?: get_template_directory_uri() . '/assets/images/patricia-flores-profile.jpeg';
|
|
$cvFile = get_template_directory_uri() . '/assets/docs/CV_Patricia_Flores_Sanchez_ES_FINAL.docx';
|
|
?>
|
|
|
|
<section class="hero hero--executive">
|
|
<div class="hero__copy">
|
|
<p class="eyebrow"><?php echo esc_html($hero['eyebrow']); ?></p>
|
|
<h1><?php echo esc_html($heroName); ?></h1>
|
|
<p class="hero__role"><?php echo esc_html($heroRole); ?></p>
|
|
<p class="hero__intro"><?php echo esc_html($heroIntro); ?></p>
|
|
|
|
<div class="hero__metrics hero__metrics--wide">
|
|
<?php foreach ($metrics as $metric) : ?>
|
|
<article class="metric-card">
|
|
<strong><?php echo esc_html($metric['value']); ?></strong>
|
|
<span><?php echo esc_html($metric['label']); ?></span>
|
|
</article>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
|
|
<div class="hero__actions">
|
|
<a class="btn btn--primary" href="<?php echo esc_url($heroCtaUrl); ?>">
|
|
<?php echo esc_html($heroCtaLabel); ?>
|
|
</a>
|
|
<a class="btn btn--secondary" href="<?php echo esc_url(home_url('/?cv_pdf=1')); ?>">
|
|
<?php esc_html_e('Descargar CV PDF', 'cvolio'); ?>
|
|
</a>
|
|
<button class="btn btn--ghost" type="button" data-cvolio-print>
|
|
<?php esc_html_e('Versión imprimible', 'cvolio'); ?>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<aside class="hero__panel">
|
|
<div class="profile-card profile-card--executive">
|
|
<div class="profile-card__media profile-card__media--portrait">
|
|
<img src="<?php echo esc_url($profileImage); ?>" alt="<?php echo esc_attr($heroName); ?>">
|
|
</div>
|
|
|
|
<div class="profile-card__contact">
|
|
<?php echo wp_kses_post(cvolio_render_contact_link('email', $heroEmail)); ?>
|
|
<?php echo wp_kses_post(cvolio_render_contact_link('phone', $heroPhone)); ?>
|
|
<span class="cv-chip"><?php echo esc_html($heroLocation); ?></span>
|
|
<?php if ($linkedin) : ?>
|
|
<a class="cv-chip" href="<?php echo esc_url($linkedin); ?>" target="_blank" rel="noreferrer">LinkedIn</a>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<div class="profile-card__highlights">
|
|
<div>
|
|
<span><?php esc_html_e('Enfoque', 'cvolio'); ?></span>
|
|
<strong><?php echo esc_html($hero['focus']); ?></strong>
|
|
</div>
|
|
<div>
|
|
<span><?php esc_html_e('Disponibilidad', 'cvolio'); ?></span>
|
|
<strong><?php echo esc_html($hero['availability']); ?></strong>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</aside>
|
|
</section>
|
|
|
|
<section class="content-wrap content-wrap--front">
|
|
<div class="content-card content-card--resume">
|
|
<section id="resumen" class="resume-section">
|
|
<div class="section-head">
|
|
<p class="eyebrow"><?php esc_html_e('Perfil profesional', 'cvolio'); ?></p>
|
|
<h2><?php echo esc_html($summary['title']); ?></h2>
|
|
</div>
|
|
<p class="lead-copy"><?php echo esc_html($summary['body']); ?></p>
|
|
</section>
|
|
|
|
<section id="impacto" class="resume-section">
|
|
<div class="section-head">
|
|
<p class="eyebrow"><?php esc_html_e('Impacto ejecutivo', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Resultados concretos con alcance nacional', 'cvolio'); ?></h2>
|
|
</div>
|
|
|
|
<div class="achievement-grid achievement-grid--executive">
|
|
<?php foreach ($highlights as $highlight) : ?>
|
|
<article class="achievement-card achievement-card--stat">
|
|
<strong><?php echo esc_html($highlight['value']); ?></strong>
|
|
<span><?php echo esc_html($highlight['label']); ?></span>
|
|
</article>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
|
|
<div class="impact-grid">
|
|
<?php foreach ($impact as $item) : ?>
|
|
<article class="impact-card">
|
|
<h3><?php echo esc_html($item['title']); ?></h3>
|
|
<p><?php echo esc_html($item['body']); ?></p>
|
|
</article>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="experiencia" class="resume-section">
|
|
<div class="section-head">
|
|
<p class="eyebrow"><?php esc_html_e('Experiencia profesional', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Trayectoria sólida en banca, operaciones y microfinanzas', 'cvolio'); ?></h2>
|
|
</div>
|
|
|
|
<div class="timeline timeline--executive">
|
|
<?php foreach ($experience as $item) : ?>
|
|
<article class="timeline__item timeline__item--rich">
|
|
<span class="timeline__year"><?php echo esc_html($item['period']); ?></span>
|
|
<div class="timeline__content">
|
|
<h3><?php echo esc_html($item['title']); ?></h3>
|
|
<p class="timeline__meta"><?php echo esc_html($item['company'] . ' | ' . $item['location']); ?></p>
|
|
<p><?php echo esc_html($item['lead']); ?></p>
|
|
<ul class="timeline__bullets">
|
|
<?php foreach ($item['bullets'] as $bullet) : ?>
|
|
<li><?php echo esc_html($bullet); ?></li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
</div>
|
|
</article>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="formacion" class="resume-section">
|
|
<div class="section-head">
|
|
<p class="eyebrow"><?php esc_html_e('Formación académica', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Base técnica y formación ejecutiva de alto nivel', 'cvolio'); ?></h2>
|
|
</div>
|
|
|
|
<div class="credentials-grid">
|
|
<?php foreach ($education as $item) : ?>
|
|
<article class="credential-card">
|
|
<span class="credential-card__year"><?php echo esc_html($item['year']); ?></span>
|
|
<h3><?php echo esc_html($item['title']); ?></h3>
|
|
<p><?php echo esc_html($item['institution']); ?></p>
|
|
<?php if ($item['detail'] !== '') : ?>
|
|
<p class="credential-card__detail"><?php echo esc_html($item['detail']); ?></p>
|
|
<?php endif; ?>
|
|
</article>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="certificaciones" class="resume-section">
|
|
<div class="section-head">
|
|
<p class="eyebrow"><?php esc_html_e('Certificaciones relevantes', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Actualización continua en gerencia, procesos y analítica', 'cvolio'); ?></h2>
|
|
</div>
|
|
|
|
<div class="cert-list">
|
|
<?php foreach ($certifications as $item) : ?>
|
|
<article class="cert-item">
|
|
<span class="cert-item__year"><?php echo esc_html($item['year']); ?></span>
|
|
<div>
|
|
<h3><?php echo esc_html($item['title']); ?></h3>
|
|
<p><?php echo esc_html($item['issuer']); ?></p>
|
|
</div>
|
|
</article>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</section>
|
|
|
|
<?php while (have_posts()) : the_post(); ?>
|
|
<?php if (trim((string) get_the_content()) !== '') : ?>
|
|
<section class="resume-section resume-section--custom">
|
|
<div class="section-head">
|
|
<p class="eyebrow"><?php esc_html_e('Contenido adicional', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Bloques editables desde WordPress', 'cvolio'); ?></h2>
|
|
</div>
|
|
<div class="entry-content">
|
|
<?php the_content(); ?>
|
|
</div>
|
|
</section>
|
|
<?php endif; ?>
|
|
<?php endwhile; ?>
|
|
</div>
|
|
|
|
<aside class="side-stack side-stack--resume">
|
|
<section class="side-card side-card--competencies">
|
|
<p class="eyebrow"><?php esc_html_e('Competencias clave', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Capacidades ejecutivas y técnicas', 'cvolio'); ?></h2>
|
|
|
|
<?php foreach ($competencies as $group => $items) : ?>
|
|
<div class="competency-block">
|
|
<h3><?php echo esc_html($group); ?></h3>
|
|
<div class="skill-cloud">
|
|
<?php foreach ($items as $item) : ?>
|
|
<span class="skill-pill"><?php echo esc_html(is_array($item) ? ($item['name'] ?? '') : $item); ?></span>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</section>
|
|
|
|
<section class="side-card">
|
|
<p class="eyebrow"><?php esc_html_e('Liderazgo', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Atributos diferenciales', 'cvolio'); ?></h2>
|
|
<div class="skill-cloud">
|
|
<?php foreach ($skills as $skill) : ?>
|
|
<span class="skill-pill"><?php echo esc_html($skill); ?></span>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="side-card">
|
|
<p class="eyebrow"><?php esc_html_e('Voluntariado', 'cvolio'); ?></p>
|
|
<h2><?php echo esc_html($volunteer['title']); ?></h2>
|
|
<p class="side-card__meta"><?php echo esc_html($volunteer['year']); ?></p>
|
|
<p><?php echo esc_html($volunteer['body']); ?></p>
|
|
</section>
|
|
|
|
<section id="contacto" class="side-card side-card--contact">
|
|
<p class="eyebrow"><?php esc_html_e('Información adicional', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Datos clave del perfil', 'cvolio'); ?></h2>
|
|
<dl class="info-list">
|
|
<?php foreach ($additional as $label => $value) : ?>
|
|
<div>
|
|
<dt><?php echo esc_html($label); ?></dt>
|
|
<dd><?php echo esc_html($value); ?></dd>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</dl>
|
|
<div class="contact-stack">
|
|
<?php echo wp_kses_post(cvolio_render_contact_link('email', $heroEmail)); ?>
|
|
<?php echo wp_kses_post(cvolio_render_contact_link('phone', $heroPhone)); ?>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="side-card side-card--business-card">
|
|
<p class="eyebrow"><?php esc_html_e('Tarjeta de presentación', 'cvolio'); ?></p>
|
|
<h2><?php esc_html_e('Acceso rápido al perfil web', 'cvolio'); ?></h2>
|
|
|
|
<article class="business-card">
|
|
<div class="business-card__top">
|
|
<p class="business-card__name"><?php echo esc_html($heroName); ?></p>
|
|
<p class="business-card__role"><?php echo esc_html($heroRole); ?></p>
|
|
</div>
|
|
<div class="business-card__body">
|
|
<div class="business-card__qr">
|
|
<img src="<?php echo esc_url($qrImage); ?>" alt="<?php esc_attr_e('Código QR hacia el perfil web', 'cvolio'); ?>">
|
|
</div>
|
|
<div class="business-card__info">
|
|
<p><?php echo esc_html($heroLocation); ?></p>
|
|
<p><?php echo esc_html($heroPhone); ?></p>
|
|
<p><?php echo esc_html($heroEmail); ?></p>
|
|
<a href="<?php echo esc_url($publicUrl); ?>" target="_blank" rel="noreferrer"><?php echo esc_html($publicUrl); ?></a>
|
|
</div>
|
|
</div>
|
|
</article>
|
|
</section>
|
|
</aside>
|
|
</section>
|
|
|
|
<?php get_footer(); ?>
|