“Cannot redeclare function” indica que PHP ha encontrado otra declaración de un nombre de función ya definido. El error puede detener la petición y dejar WordPress mostrando la pantalla de error crítico. Empieza por el mensaje completo y las dos ubicaciones de código, en lugar de añadir una guarda a todas las funciones.
Si el fallo empezó tras una actualización, nuestro servicio de recuperación de WordPress tras actualizar un plugin revisa el error, la función afectada y las opciones de recuperación. Que la web vuelva a verse es sólo una parte de la reparación.
Qué conservar antes de modificar código
Guarda el mensaje, fecha y hora, URL o acción afectada y versiones cambiadas justo antes del fallo. Un mensaje como Cannot redeclare example_helper() puede identificar la segunda declaración y un archivo y línea declarados anteriormente. Es un nombre ilustrativo de función, no una instrucción para ejecutar en tu web.
Un archivo mencionado en el error es una pista, no una prueba de que todo el plugin sea defectuoso. Revisa ambas declaraciones y cómo se cargaron. Si sólo aparece una ubicación, comprueba el recorrido de carga y el primer error fatal relacionado.
Dónde buscar el duplicado
- El mismo snippet en el tema y en un plugin de snippets.
- Una función auxiliar aportada por dos componentes distintos.
- Un archivo incluido dos veces durante una petición.
- Un tema hijo que declara la misma función que el padre.
- Una declaración de función dentro de una rutina que se llama más de una vez.
Utiliza la guía para aislar conflictos entre plugins de WordPress si el fallo depende de una combinación de componentes. “La web carga cuando desactivo este plugin” no explica por sí solo toda la causa.
Consultar registros sin mostrar errores a las visitas
Pide al hosting el registro de errores PHP pertinente si ya existe. Para depurar WordPress, sigue la documentación oficial de registro de errores: registrar y mostrar errores son ajustes distintos, y el registro puede contener información que debe seguir siendo privada. No pegues un registro completo sin revisar en una solicitud pública.
En una copia de staging, reproduce la ruta que falla y anota qué declaración se encuentra primero. Si no hay entorno de pruebas, acuerda una intervención limitada y una vía de recuperación antes de cambiar un componente utilizado por pagos, formularios o acceso a cuentas.
Elegir la corrección según la causa
Snippet propio duplicado: conserva una sola copia mantenida y retira la segunda de la ubicación identificada después de preservarla. Comprueba registros y llamadas para conservar el comportamiento necesario.
El mismo archivo cargado dos veces: revisa el código que lo incluye. La construcción require_once de PHP evita volver a incluir un archivo ya cargado. No resuelve dos archivos diferentes que declaran el mismo ayudante.
Dos componentes distintos: compara versiones compatibles y solicita una corrección al autor. En código propio, un prefijo o espacio de nombres adecuado puede separar responsabilidades; renombrar una función también exige actualizar sus llamadas. No cambies un nombre dentro de código de terceros sin valorar actualizaciones y dependencias.
Por qué function_exists no es una reparación universal
Una comprobación condicional con function_exists() puede encajar cuando una función está diseñada para que la aporte otro componente. También puede silenciar una colisión mientras sigue activa la implementación equivocada. Compara entradas, salidas y llamadas antes de adoptar esa solución.
La referencia de funciones de PHP explica las reglas de declaración. Una petición reparada debe producir el resultado que espera la aplicación; evitar el error fatal no basta.
Verificar la función original y la próxima actualización
Prueba la URL o acción que fallaba, el acceso al administrador y la función que llamaba al código. Incluye el formulario, reserva o checkout correspondiente con una prueba controlada si puede crear una transacción. Confirma que el mismo error no reaparece en registros nuevos.
Documenta la ubicación modificada, implementación conservada, versión probada y vía de vuelta. Si hubo que desactivar temporalmente un plugin, deja claro qué función sigue indisponible y cómo se recuperará. Una reversión de archivos también debe tener en cuenta los cambios de datos de la actualización.
Cuándo solicitar una evaluación de recuperación
Escala si la web no está disponible, chocan dos componentes de pago, el error procede de código mantenido por terceros o la recuperación puede afectar a pedidos o envíos actuales. Prepara versiones, error depurado, ruta afectada y copia disponible.
Solicita una evaluación de la actualización o del conflicto, o revisa cómo se delimita y verifica la recuperación de WordPress. La evaluación determina la reparación; esta guía no garantiza una causa o plazo concreto.
CRITERIO DE INCIDENTE WP REPAIR
Cómo acotar el fallo sin adivinar
Cannot redeclare identifica dos definiciones con el mismo nombre. Las rutas del log muestran dónde se cargó cada copia, más seguro que añadir una guarda sin entender el duplicado.
Anota nombre de función y ambas rutas/líneas.
Determina si está duplicada, incluida por dos plugins o cargada dos veces.
Retira la copia no deseada o aplica namespace/prefijo al código propio.
Usa function_exists solo si se pretende realmente un override opcional.
Qué debe quedar verificado
- Solo carga una definición prevista.
- La función dependiente opera con el orden final.
- Caché, opcode cache y reinicio no hacen volver el fatal.
Fuentes técnicas oficiales
Continúa el diagnóstico
Esta guía explica el diagnóstico. Si la web está afectada ahora, la intervención debe preservar una vía de vuelta y verificar el recorrido real del negocio.
Ver el servicio de reparación urgente →SOBRE ESTE SÍNTOMA
Preguntas frecuentes de esta guía.
¿Puedo corregir un error de "no se puede redeclarar la función" solo limpiando mi caché?+
No. Este es un error fatal PHP que ocurre antes de que WordPress renderice cualquier cosa, por lo que el caché no juega ninguna parte en él. La única solución es editar el archivo que contiene la definición de función duplicada, sobre SFTP o un gestor de archivos.
¿Por qué el registro de errores sólo muestra un archivo, cuando dos archivos en realidad chocan?+
La línea de registro apunta en la segunda declaración, la que PHP estaba procesando cuando golpeó el nombre duplicado, y generalmente hace referencia a la primera ocurrencia en el mismo mensaje. Lea el texto de error completo en lugar de sólo la ruta del archivo al inicio de la misma.
¿Es seguro eliminar una de las dos funciones?+
Sólo si sabes qué copia se utiliza realmente y confirmas que la otra es un verdadero duplicado, no una versión ligeramente diferente. Si las dos definiciones difieren, eliminar la incorrecta puede cambiar silenciosamente el comportamiento en lugar de simplemente eliminar redundancia.
¿Envolver una función en function_exists() siempre resolverá esto permanentemente?+
Detiene el error fatal, pero sólo si las dos versiones de la función son funcionalmente intercambiables. Envolver un ayudante de plugin en un guardia mientras confía en una versión diferente de theme del mismo nombre puede enmascarar una incompatibilidad real en lugar de resolverlo.