Respuesta breve: “Cannot redeclare function …” es un error fatal de PHP que significa que el mismo nombre de función se definió dos veces. PHP se niega a ejecutar, así que la web (y a menudo el administrador) cae. El registro señala directamente ambas ubicaciones.
Lee las dos ubicaciones
Activa WP_DEBUG_LOG y abre /wp-content/debug.log. El error nombra la función y el archivo/línea donde ocurrió la segunda declaración, y normalmente referencia la primera. Esas dos rutas son tu respuesta: solo tienes que eliminar o renombrar una.
Causas habituales
- Un snippet pegado dos veces: en
functions.phpy también en un plugin de snippets. - Copiar una función de un tutorial que ya existe en tu tema.
- Dos plugins que incluyen un ayudante con el mismo nombre genérico (por ejemplo una función de utilidad común sin prefijo).
- Un tema hijo redeclarando una función del padre sin una guarda
function_exists().
Corrígelo por SFTP
- Abre el archivo nombrado en la línea de la segunda declaración y elimina el duplicado, o envuélvelo en
if (! function_exists('nombre')) { ... }. - Si chocan dos plugins, desactiva uno renombrando su carpeta en
/wp-content/pluginsy decide si necesitas ambos. - Si un snippet se pegó dos veces, borra la copia duplicada.
Verifica
Recarga la web y el administrador, y confirma que la función que usaba esa función sigue operativa. Si el choque era entre dos plugins, comprueba si el que conservaste cubre lo que aportaba el otro, para no quedarte sin una función tras eliminar el conflicto.
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.