Cómo eliminar el aviso de zona horaria de Modern Events Calendar Lite

Valencia, 17/09/2026, G.B.
Aunque lo he publicado en los foros de Puntocomunica, quiero dejar también aquí constancia, para que no se me olvide si volviera a necesitar solucionarlo. Creo en la redundancia en la Red…

Sitio: (no lo indico por privacidad)
Plugin implicado: Modern Events Calendar Lite (Webnus), v7.36.4
Fecha de resolución: septiembre de 2026

El problema

Tras importar eventos en el calendario, aparece este aviso en el escritorio
de WordPress, en cualquier pantalla del área de administración y no solo en
los ajustes del calendario:

It is advisable to utilize a geographic timezone, such as
«America/Los_Angeles» instead of a UTC timezone offset, like «UTC+0,»
while using The Modern Events Calendar. The latter may cause issues when
importing events or with Daylight Saving Time.

Causa raíz

El propio plugin comprueba, en
wp-content/plugins/modern-events-calendar-lite/app/features/events.php
—líneas 208-218—, si la opción interna de WordPress
timezone_string está vacía:

// Timezone Notice
$timezone_string = get_option('timezone_string');

if (trim($timezone_string) === '')
{
    add_action('admin_notices', function ()
    {
        echo '<div class="notice notice-warning is-dismissible">
            <p>' . esc_html__('It is advisable to utilize a geographic timezone...', 'modern-events-calendar-lite') . '</p>
        </div>';
    });
}

timezone_string queda vacía cuando, en
Ajustes → Generales, se utiliza un desplazamiento numérico
—por ejemplo, UTC+2— en lugar de una zona horaria geográfica,
como Europe/Madrid.

Aunque el aviso incluye la clase is-dismissible, no hay ningún
código que recuerde el descarte. Por eso reaparece en cada carga de página
hasta corregir la causa.

Complicación encontrada en este sitio

En Ajustes → Generales, el desplegable de zona horaria solo
ofrece desplazamientos UTC —UTC+0, UTC+1, etc.—,
sin la lista habitual de ciudades y continentes.

Esto indica que la base de datos de zonas horarias de PHP,
timezone_identifiers_list(), no está completa en el servidor.
Se trata de un problema de configuración de PHP o del hosting, no de
WordPress en sí. Por eso no se pudo resolver simplemente seleccionando una
ciudad en el desplegable.

Solución aplicada: editar directamente wp_options mediante phpMyAdmin

Como el desplegable no permitía elegir una zona geográfica, se editaron
directamente las dos opciones implicadas en la tabla
wp_options:

  • timezone_string: antes estaba vacía; se estableció como
    Europe/Madrid.
  • gmt_offset: antes tenía el valor 2, reflejo de
    UTC+2 en horario de verano; se dejó vacío.

Pasos

  1. Entrar en phpMyAdmin, seleccionar la base de datos del sitio y abrir la
    tabla wp_options.
  2. Buscar la fila cuyo option_name sea
    timezone_string, editar option_value y
    establecerlo como Europe/Madrid.
  3. Buscar la fila cuyo option_name sea
    gmt_offset y vaciar su valor.
  4. Guardar los cambios y recargar el escritorio de WordPress.

El aviso desaparece de inmediato porque
trim($timezone_string) === '' deja de cumplirse.

Nota sobre falsas pistas descartadas

Antes de llegar a la causa real, se investigaron dos vías que no aplicaban
a este caso. Se mantienen como referencia por si el aviso reapareciera con
un texto ligeramente distinto:

  • El texto del aviso es casi idéntico al que muestra
    The Events Calendar (Modern Tribe/StellarWP), un plugin de
    calendario distinto con un nombre parecido. Ese plugin no está instalado
    en la web, pero en wp_options quedan opciones residuales
    con el prefijo tec_, como
    tec_ct1_migration_state y
    tec_timed_events_timezone_update_needed. Esto indica que
    estuvo instalado en algún momento y se desinstaló sin limpiar por
    completo la base de datos. Estas opciones no afectan al problema del
    MEC, pero podrían eliminarse en una limpieza futura.
  • Un mirror desactualizado del código de MEC Lite en GitHub, versión
    5.21.2 de 2021, no contenía el texto del aviso. Fue necesario conseguir
    el ZIP real de la versión 7.36.4 instalada para localizar el código
    exacto.

Cuadernos de Gemini vs. Proyectos de Claude: ¿Cuál es el mejor espacio de trabajo con IA para tu día a día?

Valencia, 16/09/2026, G.B.
Si utilizas modelos de lenguaje no solo para preguntas rápidas, sino como un espacio de trabajo donde ir guardando información, documentos y contexto sobre un tema concreto, seguro que conoces los Cuadernos de Gemini (NotebookLM) de Google y los Proyectos de Claude (Claude Projects) de Anthropic. Son dos formas distintas de tener a la IA «al día» sobre lo que estás haciendo, sin tener que repetirle todo cada vez que le preguntas algo.

Llevo un tiempo usando ambos y quiero contaros, sin tecnicismos, qué hace bien cada uno y cuándo os puede interesar más uno u otro.

¿Qué tipo de información aguanta mejor cada uno?

La primera diferencia que noté es qué tipo de material admite bien cada herramienta:

Cuadernos de Gemini

  • Admite de todo: vídeos, audios, PDFs, documentos de Google Drive, enlaces… Lo pegas o lo subes y ya está, sin tener que convertir nada antes.
  • Aguanta muchísima cantidad de información: puedes meterle documentos larguísimos o varias horas de audio transcrito y sigue funcionando con soltura.
  • Te dice de dónde saca cada dato: cuando responde, suele señalar en qué parte del documento se ha basado, lo cual ayuda a comprobar que no se está inventando nada.

Proyectos de Claude

  • Se le dan muy bien el texto y el código: documentación técnica, archivos de código, esquemas… todo lo que sea texto estructurado lo entiende de maravilla.
  • Razona muy bien sobre lógica compleja: si le explicas cómo funciona un sistema o unas reglas de negocio algo enrevesadas, tiene una capacidad de «atar cabos» que me ha sorprendido más de una vez.
  • Puedes darle instrucciones fijas: le dices cómo quieres que se comporte dentro de ese proyecto y lo respeta de forma bastante estricta durante toda la conversación.

¿Y a la hora de trabajar con lo que te devuelve?

Aquí es donde más se nota la diferencia en el día a día:

[Lo que le das] ──> [Proyecto de Claude] ──> Panel aparte con el resultado (código, esquemas, texto)
[Lo que le das] ──> [Cuaderno de Gemini] ──> Resumen o audio explicativo, integrado con Google

Claude y sus «Artefactos»

Si trabajas con código o documentos técnicos, esto os va a gustar: Claude abre lo que genera en un panel aparte, al lado de la conversación. Puedes pedirle que cambie solo un trozo concreto sin que tengas que releer toda la charla ni que se pierda el hilo. Para quien programa o escribe documentación, es muy cómodo.

Gemini y su lado «todo en uno»

Gemini, en cambio, apuesta por juntarlo todo: te puede generar un resumen en audio de tus documentos (como si fuera un podcast explicándote el tema), esquemas de estudio, y además se conecta directamente con Google Workspace, así que no hace falta ir exportando cosas a mano de un lado a otro.

Tabla resumen

AspectoCuadernos de GeminiProyectos de Claude
Qué formatos admiteCasi todo: texto, audio, vídeo, DriveSobre todo texto, PDFs y código
Trabajando con códigoBienMuy bien, es su punto fuerte
Cómo lo controlasInstrucciones sencillasInstrucciones más estrictas y detalladas
Cómo te muestra el resultadoRespuestas normales o formatos interactivosPanel aparte, editable al momento
Para qué lo usaríaInvestigar, mezclar formatos, trabajar en equipoProgramar, escribir textos técnicos, desarrollo web

Entonces, ¿cuál elijo?

Sinceramente, no creo que una sustituya del todo a la otra, porque cubren momentos distintos del trabajo:

  • Para investigar y reunir información (Gemini): si tienes materiales de muchos tipos —audios, vídeos, documentos sueltos— y quieres un resumen rápido de todo, tira de Gemini.
  • Para ponerte a construir algo (Claude): cuando ya toca escribir código, documentación o cualquier cosa técnica bien hecha, Claude me da mejores resultados.

Yo, según el día, acabo usando los dos por motivos distintos, y creo que esa es la conclusión más honesta que os puedo dar.

«Good Day Sunshine», momentos musicales

Aunque es más una e-reflexión…

Valencia, 15/09/2026, G.B.
Bueno, bueno, bueno…; tras las últimas noticias y declaraciones de investigadores y responsables de la IA ⨪la inteligencia artificial- y curiosamente anteriores a conversaciones al respecto con amigos (supongo que le ha pasado ha muchísima gente («Love is in the Air«…), todo parece indicar que si seguimos así nos vamos todos literalmente «a la mierda» antes de lo previsto.

No digo que no nos lo merezcamos; creo que nadie puede decirlo. Pero tampoco me gustaría que fuera algo fijado como «listo para sentencia«.  Debe haber otras alternativas, alternativas o deslices en el espacio-tiempo que nos ha tocado vivir. Además, muchos de nosotros pensamos en nuestros hijos, nuestras hijas. ¿Se lo preguntamos, se lo planteamos a los que manejan todo el cotarro de este loco mundo? ¿Tan sumamente importante es el dinero, el poder? De aquí todos nos vamos a ir sin nada…

Ahora mismo me parece que ese famoso reloj del fin del mundo está peligrosamente acercándose a la hora en punto, aquella en la que ya no importa si no has pagado el último recibo o ya no te van a devolver el último libro o disco que dejaste (si todavía eres alguno de esos). A muchos de nosotros se nos está evidenciando eso de «la profecía auto-cumplida«. Y no voy a mencionar algunas obras de ciencia ficción que seguro tendréis ahora mismo en mente…

Pero a pesar de todo consideo que debemos seguir adelante, intentando sortear hasta la misma pena negra. Como pequeño antídoto a todo estos negros pensamientos dejo un pequeño vídeo de una canción de los Beatles (¿de nuevo?…) que rezuma optimismo, luz y alegría de vivir, a pesar de los pesares. Y eso de la luz del sol no quiero que lo relacionéis con una de esas obras que no he mencionado (como una matriz o algo terminado). Al fin y al cabo, dicen que la esperanza es lo último que se pierde. ¿…como lágrimas en la lluvia?…

Aquí va la canción de The Beatles, «Good day Sunshine«, del ábum Revolver. Que la disfrutéis:

PD. También es interesante leer esto: Las grandes de la IA están resucitando una estrategia que inventó Rockefeller

De Claude Projects a NotebookLM: cómo mover tus notas, reglas y contexto sin volverte loco

Valencia, 14/09/2026, G.B.
Si llevas un tiempo cacharreando con la Inteligencia Artificial para organizar tus notas, tus proyectos web o tu flujo de trabajo diario, seguro que te has cruzado con los Proyectos de Claude. Tienen una ventaja clara: les tiras un montón de archivos, les pones unas Custom Instructions (instrucciones del sistema) bastante finas y a trabajar.

Pero claro, la curiosidad o las necesidades técnicas cambian. Ahora resulta que quieres mover todo ese ecosistema a NotebookLM de Google, que para bregar con documentos locales, fuentes en PDF y notas estructuradas va como un tiro.

La mala noticia: no existe un botón mágico de «Exportar todo mi proyecto de Claude a NotebookLM con un clic».

La buena noticia: con un poco de orden y un par de comandos de ratón se soluciona en cinco minutos. Aquí va el paso a paso de cómo hacerlo y dónde están los «trucos» para que no pierdas la configuración por el camino.

Paso 1. Rescatar la «chicha» del proyecto en Claude

Lo primero es vaciar la mochila de Claude:

  1. Los archivos de contexto (Project Knowledge): Descarga a tu equipo los PDF, notas de texto (.txt), esquemas en Markdown (.md) o CSVs que subiste en su día.
  2. Las instrucciones del sistema: Esto es crucial. En el panel de tu proyecto en Claude, entra en Project details o edita las instrucciones personalizadas. Copia todo ese texto donde le decías a la IA cómo debía comportarse, qué tono usar o qué criterios seguir.

Ojo al dato: Si vas a los ajustes generales de Claude y le das a Exportar datos, lo que te descargará será el historial completo de tus conversaciones, no el paquete estructurado del proyecto. Toca hacer la recolección a mano.

Paso 2. Mover las fuentes a NotebookLM

Te vas a NotebookLM, creas un Nuevo cuaderno y le pones un título apañado.

En la columna izquierda (Fuentes / Sources):

  • Sube los archivos que acabas de descargar de Claude.
  • Acepta PDFs, documentos de Google Docs, texto plano, URLs directas, etc.

Hasta aquí la parte fácil. Pero ¿qué hacemos con las reglas de comportamiento que tenías configuradas en Claude?

Paso 3. Cómo pasar las reglas y el rol (el truco del documento 00_)

En Claude, las instrucciones del proyecto actúan como un System Prompt invisible que se ejecuta siempre por debajo. En NotebookLM la filosofía cambia: todo se basa en las fuentes.

Para no perder tu rol ni tus instrucciones personalizadas:

  1. Crea un archivo de reglas: Abre un editor de texto o un Google Doc y pega las instrucciones que usabas en Claude.
  2. Nómbralo con estrategia: Titúlalo algo como 00_Reglas_y_Configuracion.txt. Al ponerle el 00_ delante, te quedará arriba en la lista de fuentes y será facilísimo identificarlo.
  3. Súbelo como fuente: Al subirlo, NotebookLM lo indexará como conocimiento base.
  4. Configura la Notebook Guide (Guía del cuaderno): En el panel derecho de NotebookLM, abre la Guía del cuaderno y pega un resumen de las reglas principales (formato de respuesta, tono técnico, etc.). También puedes dejar notas fijadas (Add note) con los prompts que más repitas.

Paso 4. Ponlo a prueba

Cuando vayas a chatear en tu nuevo cuaderno, solo tienes que recordarle a la herramienta que aplique el criterio guardado. Basta con arrancar con algo similar a:

«Basándote en el documento 00_Reglas_y_Configuracion y en el resto de las fuentes, analiza lo siguiente…»

Y listo. Con esto dejas tu proyecto operativo en la plataforma de Google sin perder el contexto ni el trabajo de prompt engineering que te costó configurar en Claude.

Pocas complicaciones y todo tu conocimiento centralizado en un solo cuaderno.

SYSADMIT, un veterano blog de administración de sistemas

sysadmit

Valencia, 13/09/2026, G.B.
Sigo ampliando el directorio de webs recomendadas con sitios que uso o consulto a menudo si me surgen dudas relativas a administración de sistemas; o por pura curiosidad. Hoy le toca el turno a SYSADMIT, un blog de referencia en castellano sobre sysadmin, mantenido por Xavier Genestós.

Qué es SYSADMIT

SYSADMIT es un blog de administración de sistemas con años de recorrido, alojado en Blogger, centrado en Windows Server, Windows Client, virtualización con VMware, backups con Veeam, y también con presencia de contenidos sobre Linux, Docker, PowerShell, Active Directory y redes. El propio autor ha publicado varios libros técnicos en castellano bajo el sello de la casa (como los de la serie «LABS»), lo que da una idea del nivel de detalle que maneja en sus artículos.

Qué se puede encontrar

El contenido está organizado por etiquetas, y ahí se ve claramente hacia dónde apunta el blog: VMware, Windows Client y Windows Server concentran el grueso de las entradas, seguidos de Veeam Backup, Networking y PowerShell. Linux también tiene su hueco, con posts sobre Docker (persistencia de datos, laboratorios rápidos, actualización de contenedores) que están bastante bien explicados para quien se inicia en contenedores.

El formato de los artículos es el típico de guía práctica: se plantea un problema o una tarea concreta (por ejemplo, ver el tamaño de un directorio con PowerShell, o desinstalar un parche desde línea de comandos) y se resuelve paso a paso, sin rodeos.

Por qué lo recomiendo

Me parece un blog útil sobre todo si te mueves en entornos mixtos Windows/Linux, algo muy habitual en el día a día de un sysadmin. Yo ya no llevo servidores Windows como antes,  pero sigo consultándolo cuando me surge alguna duda de la vieja escuela.

Un plugin propio de FAQs con lógica condicional para WordPress

Hace poco os contaba cómo monté Comandos Linux, un plugin propio con su tabla, su panel y su shortcode. Esta vez le tocaba a algo que llevaba tiempo queriendo hacer: una sección de preguntas frecuentes con lógica condicional, sin depender de un plugin de formularios de terceros

Valencia, 12/09/2026, G.B.
En un proyecto para una intranet usé Fluent Forms para montar unas FAQs con lógica condicional: el usuario elegía un tema y solo veía las preguntas de ese tema. Funciona muy bien, pero es una herramienta pensada para formularios complejos, y para una sección de FAQs en Indaga.net me sobraba casi todo. Así que hice lo de siempre aquí: quedarme solo con la pieza que necesito y montarla yo mismo.

El planteamiento

La «lógica condicional» que quería no es tan sofisticada como la de un constructor de formularios: no necesito árboles de decisión ni preguntas que dependan de respuestas anteriores. Lo que necesito es más simple y, para una FAQ, más que suficiente: el usuario elige una categoría (por ejemplo «WordPress» o «Facturación») y solo se muestran las preguntas de esa categoría. El resto permanece oculto hasta que cambia de categoría.

Con eso claro, el plugin se reduce a tres piezas: una tabla propia en la base de datos, un panel de administración para gestionar las preguntas, y un shortcode que pinta el selector y las preguntas en el front end.

La tabla

Cada pregunta se guarda con seis campos: categoria, pregunta, respuesta (admite HTML básico, para poder meter enlaces o negritas en la respuesta), orden (para decidir en qué posición aparece dentro de su categoría) y activo (para poder desactivar una pregunta sin borrarla). Nada de post types personalizados ni de meta fields sueltos: una tabla con dbDelta() en la activación, como en el resto de plugins que he ido publicando aquí.

El panel de administración

El formulario de alta y edición es sencillo: categoría (con autocompletado a partir de las categorías ya creadas, para no acabar con «Facturación», «facturacion» y «Facturación » conviviendo en la misma tabla), pregunta, respuesta con el editor visual de WordPress, orden y una casilla de activo. El listado de abajo tiene buscador por texto, filtro por categoría y paginación, para cuando la lista crezca y no quepa cómodamente en una sola pantalla.

Aquí me llevé un buen susto durante las pruebas: el formulario, al guardar, se quedaba la página a medio cargar, como congelada. La causa no tenía nada que ver con la base de datos ni con archivos grandes, sino con el orden de ejecución de WordPress: el guardado del formulario y la redirección posterior se ejecutaban dentro de la misma función que pinta el HTML del panel, y para ese punto WordPress ya ha enviado las cabeceras HTTP. Una redirección que llega tarde, simplemente, no llega. La solución fue mover todo el procesamiento del formulario a un enganche admin_init, que se ejecuta antes de que se imprima nada, y que la función de renderizado se limite a pintar. Detalle poco vistoso, pero de esos que conviene tener en la cabeza si escribís vuestros propios paneles de administración.

La lógica condicional, en el front end

Aquí está el motivo del plugin. Al insertar el shortcode, el plugin agrupa las preguntas por categoría y, si hay más de una, añade automáticamente unos botones de selección arriba del todo, empezando por un botón «Todas». Al pulsar sobre una categoría, un poco de JavaScript sin dependencias oculta el resto de preguntas y muestra solo las de esa categoría, sin recargar la página. Si solo existe una categoría, o si el shortcode se usa fijando una en concreto, el selector directamente no aparece: no tiene sentido mostrar un filtro con una sola opción.

A eso se suma un buscador de texto libre y una paginación, ambos también resueltos en el cliente: no hace falta ir a la base de datos cada vez que alguien escribe una letra o cambia de página, porque una sección de FAQs no suele tener miles de registros. Las preguntas se despliegan en acordeón al hacer clic, así que la página no se llena de texto de golpe.

El shortcode

Para insertarlo en cualquier entrada o página basta con:

indaga_faqs (entre corchetes, [ ])

Y admite varios parámetros para adaptarlo a cada sitio:

indaga_faqs categoria=»Facturación»

Muestra solo esa categoría, sin selector. Útil si queréis una página de FAQs dedicada a un único tema.

indaga_faqs mostrar_selector=»no»

Lista todas las categorías seguidas, sin botones de filtro.

indaga_faqs mostrar_buscador=»no»

Oculta la barra de búsqueda superior.

indaga_faqs por_pagina=»5″

Cambia cuántas preguntas se muestran por página (10 por defecto).

Por qué así

La misma filosofía de siempre: identificar qué parte de una herramienta de terceros es la que de verdad necesito, y quedarme solo con eso, escrito a medida, ligero y sin dependencias que arrastrar en cada actualización. Para una intranet con formularios complejos, Fluent Forms tiene todo el sentido. Para una sección de FAQs en un blog, con esto sobra.

Descargar plugin de mi cuenta de pCloud

Míralo en acción: Indaga FAQs

Elements of AI: el curso gratuito de la Universidad de Helsinki para aprender inteligencia artificial en español

elements of ia

Valencia, 11/09/2026, G.B.
Ha vuelto a circular por redes un curso que ya lleva un tiempo entre nosotros pero que sigue mereciendo un hueco en el directorio: Elements of AI, desarrollado por la Universidad de Helsinki junto a la empresa finlandesa MinnaLearn (en su origen, junto a Reaktor). Nació en 2018 y desde entonces ha ido ampliando su disponibilidad en idiomas, español incluido, lo que explica que siga apareciendo como descubrimiento reciente para quien no lo conocía.

Es una introducción a la inteligencia artificial pensada para cualquier persona, sin exigir conocimientos previos de programación ni de matemáticas.

Qué ofrece

El curso está organizado en varios módulos que van de los principios básicos de la disciplina hasta nociones de machine learning y redes neuronales, combinando teoría con ejercicios prácticos que se completan a tu propio ritmo. Suele llevar entre 25 y 60 horas, según el tiempo que cada persona le dedique, y al finalizar es posible obtener un certificado si se completan los módulos y ejercicios propuestos.

Por qué en español

Lo interesante para el público hispanohablante es que el curso está disponible en 26 idiomas, entre ellos el español, lo que elimina una barrera de entrada habitual en este tipo de formación online. Ya lo han completado más de un millón de personas de 170 países, lo que lo convierte en uno de los cursos abiertos de IA más seguidos del mundo.

Enlace

Puede realizarse de forma gratuita desde: https://course.elementsofai.com/es/

Un interesante efecto óptico para saber si estás tranquilo o no…

Valencia, 10/09/2026, G.B.
Me ha llegado este tuit y no he podido resistirme a comprobarlo: una imagen que, según dicen, se queda quieta si estás tranquilo y empieza a «moverse» en cuanto sientes estrés (a mí se me movía…).

Antes de sacar conclusiones sobre tu nivel de estrés, un apunte: la historia del «neurólogo japonés» es un bulo que lleva circulando desde 2018. La imagen es obra de un ilustrador ucraniano, Yurii Perepadia, que se basó en los trabajos de Akiyoshi Kitaoka, profesor de psicología en la Universidad de Ritsumeikan (Japón) especializado en ilusiones ópticas de movimiento. El propio Perepadia ha desmentido lo del neurólogo, que ni siquiera existe.

Lo interesante es que el efecto de movimiento es real y le pasa a (casi) todo el mundo, esté como esté de estresado. Se debe a cómo el cerebro procesa patrones de contraste y color repetidos, no a tu estado de ánimo: si mueves los ojos por la imagen, el sistema visual periférico interpreta esos patrones como movimiento aunque estén completamente estáticos.

Así que la próxima vez que veas circular esta imagen (o alguna parecida) como «test de estrés», ya sabes: es una ilusión óptica curiosa, pero no tiene nada de diagnóstico. Aquí va:

Plugin para importar CSV o Excel a cualquier tabla de WordPress

Un plugin propio para convertir un CSV o un Excel en filas listas para cualquier tabla de la base de datos, con dos modos: inserción directa o script SQL descargable

Valencia, 10/09/2026, G.B.
Cada vez que necesito poblar una tabla propia —la de comandos Linux, la de frases aleatorias, la de FAQs— acababa haciendo lo mismo: montar el INSERT INTO línea a línea a partir de un listado o insertarlo manualmente en el panel de administración del plugin. Pero si necesito crear muchos registros a la vez, la cosa se hacía algo pesada. Así que he preparado un plugin genérico para no repetir ese trabajo: Importador CSV/Excel a Tabla, que sube un archivo y lo convierte en inserciones para la tabla que le indiques.

Qué hace

El plugin añade una página en Herramientas → Importador CSV/Excel. Desde ahí se sube un archivo .csv o .xlsx y se indican tres cosas:

  • El nombre real de la tabla destino, con su prefijo (por ejemplo, wp_fa_frases)
  • Las columnas destino, separadas por comas y en el mismo orden que las columnas del archivo (sin incluir id si es autoincremental)
  • Si la primera fila es cabecera, para que se ignore

Y después hay que elegir el modo:

  • Insertar directamente en la base de datos, fila a fila, con un resumen de cuántas se han insertado, cuántas han fallado y cuántas se han descartado por no tener suficientes columnas
  • Generar un script SQL descargable, con el INSERT INTO completo, para revisarlo y ejecutarlo yo mismo en phpMyAdmin en vez de dejar que el plugin toque la tabla directamente

Cómo lee los archivos

Con el CSV no hay mucho misterio: se parsea con fgetcsv(), detectando automáticamente si el delimitador es coma, punto y coma o tabulador, y respetando el BOM UTF-8 que añaden Excel o LibreCalc al exportar.

El XLSX es más delicado porque, en el fondo, es un ZIP con varios XML dentro. En vez de tirar de una librería de terceros como PhpSpreadsheet, lo abro con ZipArchive y leo directamente sharedStrings.xml (donde Excel guarda los textos) y sheet1.xml (donde guarda la estructura de celdas) con SimpleXML. Las dos son extensiones nativas de PHP, así que sigo sin añadir ninguna dependencia externa al sitio.

Esto tiene límites que asumo: solo lee la primera hoja del libro, no soporta celdas combinadas ni fórmulas, y las fechas se leen como el valor crudo de la celda, sin formatear. Para el uso que le voy a dar —listados sencillos de una sola hoja— es más que suficiente.

Por qué así

El plugin sigue la misma arquitectura que el resto de los que tengo en marcha: procesamiento del formulario enganchado a admin_init en lugar de dentro del callback del menú (para evitar el típico problema de cabeceras ya enviadas), patrón POST/Redirect/GET para no reenviar el formulario al recargar, y comprobación de nonce y de capacidad manage_options antes de tocar nada. debo comprobar si eso ralentiza el «pintado» del escritorio de WordPress.

La idea de fondo es la misma de siempre: cubrir una necesidad muy concreta —pasar una hoja de cálculo a SQL— con el menor peso posible y sin depender de plugins de terceros que no controlo.

Qué me falta por probar

Lo acabo de instalar y todavía no lo he puesto a prueba con datos reales: antes tengo que revisar la estructura de las tablas con las que voy a trabajar para asegurarme de que las columnas coinciden. Si funciona bien, es probable que añada una vista previa de las primeras filas del archivo antes de confirmar la importación, para pillar errores de columnas antes de que lleguen a la base de datos.

Descargar plugin de mi cuenta de pCloud