---
title: "Cómo nació Indaga Tabs: de cambiar un plugin que fallaba a montarme el mío propio"
description: "Valencia, 09/10/2026, G.B. En Indaga.net me gusta ir trasteando con mis webs, mejorar la experiencia de usuario y, de paso, aprender cosas nuevas. Hace poco me encontré con un pequeño contratiempo: el..."
url: https://indaga.net/como-nacio-indaga-tabs-de-cambiar-un-plugin-que-fallaba-a-montarme-el-mio-propio/
date: 2026-09-09
modified: 2026-10-08
author: "Directorio Indaga"
image: https://indaga.net/wp-content/uploads/2026/09/indaga-tabs.jpg
categories: ["Recursos y Utilidades", "WordPress"]
tags: ["blog", "gestion pestañas", "indaga tabs", "plugins indaga", "plugins wordpress", "wordpress"]
type: post
lang: es
---

# Cómo nació Indaga Tabs: de cambiar un plugin que fallaba a montarme el mío propio

Valencia, 09/10/2026, G.B.

En **Indaga.net** me gusta ir trasteando con mis webs, mejorar la experiencia de usuario y, de paso, aprender cosas nuevas. Hace poco me encontré con un pequeño contratiempo: el plugin **Tabs Responsive** (que llevaba usando desde 2019 en **puntocomunica.com** para organizar la sección de **Lecturas**) fue retirado del repositorio de WordPress y **Wordfence** me avisó de que tenía un fallo de seguridad importante.

En lugar de ponerme a buscar otro plugin de terceros que acabara pesando demasiado o haciendo más de la cuenta, me pareció buena idea montarme una alternativa rápida, ligera y sin complicaciones: así nació **Indaga Tabs**.

Lo que iba a ser un apaño sencillo de un par de tardes me sirvió para repasar unas cuantas lecciones sobre cómo maneja WordPress los datos, la ejecución de scripts y algún que otro tropiezo por el camino.

Aquí te cuento de forma resumida cómo fue el proceso y las piedras con las que me fui topando hasta llegar a la **versión 2.3.0**.

Table of Contents

Toggle

- [El primer cambio: necesitaba usarlo en más de un sitio](https://indaga.net/como-nacio-indaga-tabs-de-cambiar-un-plugin-que-fallaba-a-montarme-el-mio-propio/#El_primer_cambio_necesitaba_usarlo_en_mas_de_un_sitio)
- [Los tropezones del camino (y cómo los apañé)](https://indaga.net/como-nacio-indaga-tabs-de-cambiar-un-plugin-que-fallaba-a-montarme-el-mio-propio/#Los_tropezones_del_camino_y_como_los_apane)
- [Ficha Técnica para el Control de Plugins (Estilo Indaga.net)](https://indaga.net/como-nacio-indaga-tabs-de-cambiar-un-plugin-que-fallaba-a-montarme-el-mio-propio/#Ficha_Tecnica_para_el_Control_de_Plugins_Estilo_Indaganet)
- [Descargar desde mi cuenta de pCloud: Descargar Indaga Tabs v2.3.0](https://indaga.net/como-nacio-indaga-tabs-de-cambiar-un-plugin-que-fallaba-a-montarme-el-mio-propio/#Descargar_desde_mi_cuenta_de_pCloud_Descargar_Indaga_Tabs_v230)

## El primer cambio: necesitaba usarlo en más de un sitio

Al principio programé el plugin para gestionar una sola lista de pestañas. Sin embargo, pensé que si quería usarlo también en otras secciones o webs (por ejemplo, en servicios o en la barra lateral), me venía mejor poder crear varios grupos independientes.

Así que le añadí soporte para **múltiples instancias** usando parámetros sencillos en el shortcode (como `` o ``).

Ahí fue donde la cosa se puso interesante y empezaron los pequeños quebraderos de cabeza.

## Los tropezones del camino (y cómo los apañé)

### 1. Duplicar scripts sin querer en JavaScript

- **El problema:** Para que cada bloque funcionara de forma independiente, al principio metí el script de JS dentro del propio shortcode. En cuanto ponía dos grupos de pestañas en la misma página, el script se imprimía dos veces y se montaba un lío en el navegador al intentar definir la misma función.
- **La solución:** Saqué el código de ahí y lo llevé al pie de página (`wp_footer`). Ahora el script se carga una sola vez al final y se encarga de hacer funcionar cualquier grupo de pestañas que encuentre en la pantalla mediante delegación de eventos nativa.

### 2. El típico pantallazo blanco de PHP

- **El problema:** Al cambiar la forma de guardar los datos en la base de datos (pasando de una lista simple a una estructura con varias instancias), si el código intentaba leer datos antiguos que no tenían la nueva forma, PHP protestaba y saltaba el temido mensaje de *«Ha habido un error crítico en tu web»*.
- **La solución:** Reescribí la lectura de datos con `get_option()` de forma mucho más precavida. Ahora el plugin comprueba primero que todo sea un grupo válido (`is_array()`) antes de tocar nada y convierte los datos viejos a la nueva estructura automáticamente sin romper la web.

## Ficha Técnica para el Control de Plugins (Estilo Indaga.net)

Gestor de contenido dinámico por pestañas interactivas con soporte para múltiples instancias, selector y administración de grupos desde el panel de control de WordPress.

- **Acceso:** Indaga Tabs (wp-admin/admin.php?page=indaga-tabs)
- **Alias / Shortcodes:** ` Pestaña 1 Pestaña 2 Contenido inicial de la primera pestaña. Contenido de la segunda pestaña. `, ` Pestaña 1 Pestaña 2 Contenido inicial de la primera pestaña. Contenido de la segunda pestaña. ` (admite parámetro `id="instancia"`, ej. \`\`)
- **Dependencias:** Ninguna (100% nativo con API de WordPress, JavaScript Vanilla y CSS dinámico).
- **Seguridad:** Sanitización completa con `sanitize_text_field()` y `wp_kses_post()`, escapado riguroso en salidas (`esc_html`, `esc_attr`), verificación de Nonces anti-CSRF (`wp_nonce_field`, `check_admin_referer`) y control de acceso por perfil mediante `manage_options`.

## Descargar desde mi cuenta de pCloud: **[Descargar Indaga Tabs v2.3.0](https://e.pcloud.link/publink/show?code=XZXqdk7Zg01u6sjeSoy16qsGKcmw6LFFI4mk)**
