<?php /** * Plugin Name: LF Dynamic Courses Widget (Ethereal V2 - Access Architecture) */ if (!defined('ABSPATH')) exit; add_shortcode('lf_dynamic_courses', function() { if (!is_user_logged_in()) return ''; $user = wp_get_current_user(); $user_id = $user->ID; $is_admin = in_array('administrator', (array) $user->roles); $company_code = get_user_meta($user_id, 'codigo_empresa', true); $plan_activo = get_user_meta($user_id, 'lf_plan_activo', true); $is_trial_mode = false; $allowed_language = ''; // Inferencia Inversa a traves de CPT Empresas if ($company_code) { $clean_code = strtolower(trim($company_code)); $empresas = get_posts([ 'post_type' => 'empresas', 'meta_key' => 'codigo_empresa', 'meta_value' => strtoupper($clean_code), 'posts_per_page' => 1 ]); if (!empty($empresas)) { $empresa_id = $empresas[0]->ID; $idiomas = get_post_meta($empresa_id, 'idiomas_permitidos', true); // Si la empresa estudia español, son de origén Lusófono (ZapSign) if (is_array($idiomas) && in_array('espanol', $idiomas)) { $allowed_language = 'lusofono'; } else { // Si estudian portugués, son de origen Hispano (Truora, KinAnalytics) $allowed_language = 'espanol'; } } else { $allowed_language = 'espanol'; } } else { if ($plan_activo) { $allowed_language = 'espanol'; } else { $is_trial_mode = true; } } $args = [ 'post_type' => 'sfwd-courses', 'posts_per_page' => -1, 'post_status' => 'publish' ]; $all_courses = get_posts($args); $courses = []; if ($is_admin) { $courses = $all_courses; } else { foreach ($all_courses as $c) { $title = mb_strtolower($c->post_title); if ($is_trial_mode) { if (strpos($title, 'prueba') !== false || strpos($title, 'free') !== false || strpos($title, 'trial') !== false) { $courses[] = $c; } } else { if ($allowed_language === 'lusofono') { if (strpos($title, ' pt') !== false || strpos($title, 'español') !== false || strpos($title, 'espanol') !== false) { $courses[] = $c; } } else { if (strpos($title, ' es') !== false || strpos($title, 'português') !== false || strpos($title, 'portugues') !== false) { $courses[] = $c; } } } } } $desc_map = [ 'es' => 'Desarrollo cognitivo y fluidez corporativa de A1 a B2 en escenarios de alto nivel para el entorno inter-regional.', 'pt' => 'Desenvolvimento cognitivo e fluência corporativa de A1 a B2 em cenários operacionais e de expansão.', 'español' => 'Programa estructural de A1 a B2 para profesionales que necesitan comunicación fluida en el mercado hispano.', 'português' => 'Dominio de la lengua portuguesa para expansión operativa en Brasil, rigurosamente estructurado de A1 a B2.' ]; ob_start(); ?> <div class="w-full"> <div class="mb-10 md:mb-12"> <h2 class="text-3xl lg:text-4xl font-black text-[#0b0c2a] font-display mb-3 tracking-tight">Showroom Académico</h2> <p class="text-slate-500 font-body text-base md:text-lg">Explora tus módulos de aprendizaje inmersivo <?php echo ($is_trial_mode)?"(Versión Trial)":""; ?></p> </div> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-8 lg:gap-12"> <?php foreach($courses as $course): $title_lower = mb_strtolower($course->post_title); $clean_desc = 'Módulo de aprendizaje estructurado para la fluidez absoluta en el entorno corporativo.'; if (strpos($title_lower, ' es') !== false) $clean_desc = $desc_map['es']; if (strpos($title_lower, ' pt') !== false) $clean_desc = $desc_map['pt']; if (strpos($title_lower, 'español') !== false || strpos($title_lower, 'espanol') !== false) $clean_desc = $desc_map['español']; if (strpos($title_lower, 'português') !== false || strpos($title_lower, 'portugues') !== false) $clean_desc = $desc_map['português']; ?> <a href="<?php echo get_permalink($course->ID); ?>" class="group bg-white rounded-[2rem] border border-slate-100 shadow-[0_4px_20px_rgb(0,0,0,0.02)] hover:shadow-[0_12px_40px_rgb(0,0,0,0.06)] transition-all duration-500 flex flex-col overflow-hidden hover:-translate-y-1"> <div class="w-full aspect-[16/9] relative bg-slate-50 border-b border-slate-100 flex items-center justify-center p-6"> <?php if(has_post_thumbnail($course->ID)): ?> <?php echo get_the_post_thumbnail($course->ID, 'large', ['class' => 'w-full h-full object-contain filter group-hover:scale-[1.03] transition-transform duration-[800ms] origin-center drop-shadow-sm']); ?> <?php else: ?> <div class="w-full h-full flex items-center justify-center text-slate-300"> <span class="material-symbols-outlined text-6xl opacity-50">school</span> </div> <?php endif; ?> <div class="absolute top-5 left-5 z-10"> <?php if($is_trial_mode): ?> <div class="bg-white/95 backdrop-blur-md text-[#ff3c67] font-bold font-display text-[10px] px-3 py-1.5 rounded-full shadow-[0_4px_10px_rgb(0,0,0,0.05)] flex items-center gap-1 uppercase tracking-widest border border-white"> <span class="material-symbols-outlined text-[14px]">lock_open</span> TRIAL </div> <?php else: ?> <div class="bg-white/95 backdrop-blur-md text-[#5c1bea] font-bold font-display text-[10px] px-3 py-1.5 rounded-full shadow-[0_4px_10px_rgb(0,0,0,0.05)] flex items-center gap-1 uppercase tracking-widest border border-white"> <span class="material-symbols-outlined text-[14px]">bolt</span> MAIN ACCESS </div> <?php endif; ?> </div> </div> <div class="p-8 md:p-10 flex flex-col flex-grow bg-white"> <h3 class="font-black text-2xl lg:text-3xl text-[#0b0c2a] font-display mb-4 leading-tight group-hover:text-[#5c1bea] transition-colors"><?php echo get_the_title($course->ID); ?></h3> <p class="text-slate-500 font-body text-[15px] mb-8 leading-relaxed"><?php echo $clean_desc; ?></p> <div class="flex-grow"></div> <div class="pt-6 mt-auto border-t border-slate-100 flex items-center justify-between"> <span class="text-sm font-bold font-display uppercase tracking-widest <?php echo ($is_trial_mode) ? 'text-[#ff3c67]' : 'text-[#5c1bea]'; ?>">Entrar al módulo</span> <div class="w-10 h-10 rounded-full <?php echo ($is_trial_mode) ? 'bg-rose-50 text-[#ff3c67]' : 'bg-indigo-50 text-[#5c1bea]'; ?> flex items-center justify-center transition-all duration-300 group-hover:scale-110"> <span class="material-symbols-outlined text-[20px]">arrow_forward</span> </div> </div> </div> </a> <?php endforeach; ?> <?php if(empty($courses)): ?> <div class="col-span-1 md:col-span-2 bg-white text-center p-16 rounded-[2rem] border border-slate-100 shadow-[0_4px_20px_rgb(0,0,0,0.02)] flex flex-col items-center justify-center min-h-[400px]"> <div class="w-24 h-24 bg-slate-50 text-slate-300 rounded-full flex flex-col items-center justify-center mb-6"> <span class="material-symbols-outlined text-[40px]">architecture</span> </div> <h3 class="font-black text-2xl font-display text-[#0b0c2a] mb-4">No hay módulos disponibles todavía</h3> <p class="text-slate-500 font-body text-base max-w-md mx-auto leading-relaxed mb-8">El equipo académico y técnico aún no ha acoplado un ecosistema inmersivo factible bajo tus parámetros de ingreso.</p> <a href="/contacto/" class="bg-white border border-slate-200 text-slate-700 font-bold font-display px-8 py-3.5 rounded-full hover:bg-slate-50 hover:text-[#0b0c2a] transition-all shadow-sm">Contactar Soporte</a> </div> <?php endif; ?> </div> </div> <?php return ob_get_clean(); }); https://lingofluency.com/post-sitemap.xml 2025-01-15T15:17:00+00:00 https://lingofluency.com/page-sitemap.xml 2026-01-26T20:07:24+00:00 https://lingofluency.com/jet-popup-sitemap.xml 2025-04-08T00:39:53+00:00 https://lingofluency.com/sfwd-courses-sitemap.xml 2026-01-28T02:03:59+00:00 https://lingofluency.com/sfwd-lessons-sitemap.xml 2026-01-28T03:11:26+00:00 https://lingofluency.com/sfwd-topic-sitemap.xml 2026-02-01T05:11:10+00:00 https://lingofluency.com/sfwd-quiz-sitemap.xml 2025-05-20T13:34:34+00:00 https://lingofluency.com/groups-sitemap.xml 2025-02-13T18:08:10+00:00 https://lingofluency.com/empresas-sitemap.xml 2026-01-09T17:32:28+00:00 https://lingofluency.com/profesores-sitemap.xml 2025-06-20T15:31:50+00:00 https://lingofluency.com/category-sitemap.xml 2025-01-13T03:29:27+00:00