Es bastante común encontrarnos si tenemos un blog con wordpress algún que otro problema, pero uno de los principales que trae de cabeza a todo el mundo suele ser el error del feed de artículos, en el que no permite visualizar la hoja rss. Pero no desesperes, solucionar este error es muy fácil.
El problema que se presenta es que al intentar acceder a nuestra hoja de últimos artículos vamos a encontrar un error como el siguiente
error on line 2 at column 6: XML declaration allowed only at the start of the document
Que realmente no es otra cosa que un problema en el código fuente del rss al ser interpretado por el navegador, ya que el primer caracter que aparece en el código fuente del archivo es un salto de línea, lo que provoca el error de interpretación ya que el primer caracter debería ser el símbolo <.
Solucionar error de línea 1 en el feed de WordPress
Para arreglar esto vamos a utilizar un pequeño script que ha creado Michal «Wejn» Jirků y que podemos descargar en la siguiente dirección: wejn.org/stuff/wejnswpwhitespacefix.php
Por si acaso y para que no te alarmes, lo voy a poner en descarga en mi carpeta de mega como mirror, descargar aquí, (contraseña www.vichaunter.org), y de paso voy a explicar un poco el contenido del archivo para que veas que no hay ningún problema con que sea un virus o algo similar.
Si lo has descargado de la página del autor, yo lo he renombrado a wp-fix.php así que puedes renombrarlo o seguir los pasos del manual con el nombre que tú le des al archivo.
El procedimiento para utilizar este archivo es el siguiente
- Subirlo a la carpeta de wordpress
Tendremos que subirlo al root, donde se encuentran los archivos wp-config.php o wp-blog-header.php, ni a la carpeta de plugins ni del template. - Modificamos index.php
Ahora abriremos con el editor que prefiramos (incluso el bloc de notas) el archivo index.php que habrá en la carpeta root, la misma donde hemos puesto el wp-fix.php e insertaremos al principio del todo justo en la siguiente línea de la etiqueta php de apertura (<?php) lo siguienteinclude_once('wp-fix.php');
Por lo que nos debería quedar un archivo parecido a esto
<?php include('./wp-fix.php'); /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require('./wp-blog-header.php');
- Guardamos y limpiamos el caché del navegador
Guardaremos el archivo y lo subiremos a nuestra página, y ahora volveremos a acceder al feed, pero limpiando el caché del navegador. Esto se puede hacer con la combinación de teclas ctrl+f5 o ctrl+shift+r (depende del navegador),
En este momento veremos como vuelve a funcionar el feed sin errores y ya podremos utilizarlo.
¿Qué significa el código?
Como he comentado antes, no contiene virus y voy a tratar de explicar de forma fácil las partes del código. El código que contiene el archivo (además de una buena parte de comentario con las instrucciones de uso) es este
function ___wejns_wp_whitespace_fix($input) { /* valid content-type? */ $allowed = false; /* found content-type header? */ $found = false;
Hasta aquí se define la función y las variables a utilizar para que php no devuelva advertencias.
/* we mangle the output if (and only if) output type is text/* */ foreach (headers_list() as $header) { if (preg_match("/^content-type:\s+(text\/|application\/((xhtml|atom|rss)\+xml|xml))/i", $header)) { $allowed = true; } if (preg_match("/^content-type:\s+/i", $header)) { $found = true; } }
En esta parte se revisan los cabeceros para ver en qué momento estamos accediendo a un feed
/* do the actual work */ if ($allowed || !$found) { return preg_replace("/\A\s*/m", "", $input); } else { return $input; } }
En caso de que hayamos accedido a un feed vamos a ejecutar el script de limpieza y eliminaremos los saltos de línea sobre la página que se va a cargar
/* start output buffering using custom callback */ ob_start("___wejns_wp_whitespace_fix");
Con esta última instrucción cargaremos la función a la hora de lanzar la página al navegador pasándole la salida del php a la función para que haga su trabajo y nos devuelva la página limpia cuando debe.
¿Qué solución has utilizado tú?
Ver comentarios (21)
Puedes ayudarme con el siguiente error?, gracias.
error on line 2 at column 7: XML declaration allowed only at the start of the document
He encontrado esto pero me ha dejado igual.
Porque? Esto normalmente ocurre cuando un complemento o función de tema agrega incorrectamente un espacio en blanco vacío al comienzo del mapa del sitio. Por favor, vea el código fuente de su mapa del sitio siguiendo los pasos aquí .
Yoast SEO XML Sitemaps Whitespace
Solución? Por mucho que nos gustaría ayudar, nuestro complemento no causa este problema. Sin embargo, la causa más frecuente es una línea vacía al final del archivo functions.php. Si no hay una línea vacía en este archivo, le recomendamos que ejecute una verificación de conflicto para identificar qué produce el espacio en blanco vacío. También es posible que deba borrar el almacenamiento en caché de sus complementos / tema / CDN, como Cloudflare / almacenamiento en caché del servidor, etc. Si no está seguro de cómo borrar el almacenamiento en caché, hable con sus desarrolladores o contacte a su proveedor de host.
Una vez que haya identificado si su tema o un complemento causa el problema, póngase en contacto con los desarrolladores del tema o complemento para obtener ayuda para encontrar y eliminar el espacio en blanco.
Hmmm, si quieres pásame la url del sitemap y le echo un ojo, de todas formas tal y como te indican, suele deberse a algún espacio en algún otro archivo. Si has modificado el tema o el archivo functions revisa que no hayas cerrado la etiqueta de php al final.
Hola, me gustaría obtener el código, los enlaces me dicen que están rotos.
Tienes razón había desaparecido, lo he actualizado, ojo que lleva contraseña, está con la descarga
Es bastante probable que en tu caso tengas algún archivo como el functions.php con la etiqueta de cierre del php al final ?> y haya espacios o líneas en blanco. Es recomendable no poner la etiqueta al final de los archivos en php para evitar este problema.
Sí, lo ideal es que al final de los archivos php no se cierre con la etiqueta ?>, de esta forma se evitan problemas con los espacios en blanco.
Muchas gracias chaval. No te doy un beso porque no me gustan los tíos.
Na hombre tranqui que a mi tampoco me va xD, con que te haya servido me conformo
Gracias, me fue de gran ayuda
No es necesario poner la funcion en el archivo que indican, funciona mejor si se pone en functions.php toda la función y ya... igual, parece que la función no está andando para la versión 3.8.2, si saben de otra función, agradeceré la ayuda.
Qué error te da en esa versión al ejecutarlo?
algunos plugins tenían espacios en el final de sus archivos .php, lo que generaba que la version 3.8.2 generara el error para el que se escribió esta función, desactive plugins hasta que encontre errores y recupere los feeds y xml sin problemas. La solución al problema funciona mejor con cada theme en el archivo functions.php
Hola y como uso este codigo en functions.php? Saludos.
Si lo pones en el functions no va a funcionar, tienes que cargarlo en el index.php para que funcione correctamente.
No es necesario poner la funcion en el archivo que indican, funciona mejor si se pone en functions.php toda la función y ya... igual, parece que la función no está andando para la versión 3.8.2, si saben de otra función, agradeceré la ayuda.
Qué error te da en esa versión al ejecutarlo?
algunos plugins tenían espacios en el final de sus archivos .php, lo que generaba que la version 3.8.2 generara el error para el que se escribió esta función, desactive plugins hasta que encontre errores y recupere los feeds y xml sin problemas. La solución al problema funciona mejor con cada theme en el archivo functions.php
Hola y como uso este codigo en functions.php? Saludos.
Si lo pones en el functions no va a funcionar, tienes que cargarlo en el index.php para que funcione correctamente.
Me funciono muchas gracias