error-feed-rss-xml-wordpress-salto-linea

Solucion para error on line 2 at column 6: XML declaration allowed only at the start of the document wordpress

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.

Léete también  Cómo solucionar el error al instalar .NET Framework 3.5 desde la política de grupos en Windows 10

El procedimiento para utilizar este archivo es el siguiente

  1. 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.
  2. 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 siguiente

    include_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');
  3. 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.

Léete también  PHP - strtolower y el problema de los acentos [Solucionado]

¿Qué solución has utilizado tú?


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.