Ir directamente al contenido de esta página

Integrar contenido del RSS de WordPress por medio de PHP

Varios de nuestros clientes nos han pedido que en sus páginas aparezcan vínculos a las últimas entradas de sus blogs. Para hacerlo hemos aprovechado los feeds que genera WordPress, y los hemos integrado por medio de PHP.

Los feeds de WordPress

WordPress genera por defecto cuatro feeds:

Especificación URL Permalink
RSS 1.0 http://la-url-del-blog/?feed=rdf
http://la-url-del-blog/feed/rdf/
RSS 0.92 http://la-url-del-blog/?feed=rss
http://la-url-del-blog/feed/rss/
RSS 2.0 http://la-url-del-blog/?feed=rss2
http://la-url-del-blog/feed/rss2/
Atom http://la-url-del-blog/?feed=atom
http://la-url-del-blog/feed/atom/

Como un feed no es más que un documento XML, podemos recorrerlo gracias a las extensiones de DOM de PHP.

El código de PHP

Básicamente lo que hay que hacer es asignar a una variable un nuevo DomDocument en el que cargamos el feed, después sólo hay que obtener una lista de los nodos que contienen la información de las entradas, y por último crear un bucle que extraiga los datos que nos interesan y cree el marcado que queremos mostrar en la página:


<ul>
<?php
  $xml = new DomDocument();
  $xml->load('http://la-url-del-blog/?feed=rss2');
  $raiz = $xml->documentElement;
  $entradas = $raiz->getElementsByTagName('item');
  for($i=0;$i<10;$i++){
    $titulo = $entradas->item($i)->getElementsByTagName('title')->item(0)->nodeValue;
    $vinculo = $entradas->item($i)->getElementsByTagName('link')->item(0)->nodeValue;
    $fecha = $entradas->item($i)->getElementsByTagName('pubDate')->item(0)->nodeValue; 
    $fecha_unix = strtotime($fecha);
    $fecha = strftime("%d/%m/%Y",$fecha_unix);
    echo '<li><a href="'.$vinculo.'">'.$titulo.'</a> '.$fecha.'</li>';
  }
?>
</ul>
	

Vamos a analizar el código por partes:

Si alguien quiere ver un ejemplo de su funcionamiento, puede visitar nuestra página de ConstructoWeb.

¿Y por qué no hacer una petición a la base de datos?

Una pregunta muy inteligente. Sí, podríamos haber abierto una conexión con la base de datos y hacer una petición como (SELECT * FROM wp_posts WHERE post_status="publish" AND post_type="post") ORDER BY post_date_gmt DESC LIMIT 10, pero de cara a los proyectos ya entregados a los clientes nos presenta dos posibles problemas:

Por ello preferimos confiar en un estándar estable.

Esta entrada se publicó el 7 de abril de 2010, se archivó en PHP, y fue etiquetada como , . Autor: Saúl González Fernández. Hay 2 comentarios ›.

Comentarios

  1. Fran dice:

    Muy buenas,

    Veras, acabo de probar el codigo y me esta dando fallos.
    Con el código tal cual (sustituyendo solo por mi feed de wordpress) me dice:
    Parse error: parse error, unexpected T_OBJECT_OPERATOR in /var/www/www/varios/pruebas/prueba.php on line 8

    He probado otras maneras de colocar esa zona de código, pero creo que el problema viene de la linea anterior. Creo que no debe de recoger los elementos de una manera correcta.

    Seguro que el fallo es mío. Si necesitas algún dato más de cómo lo estoy haciendo, dímelo y te lo diré. Me gustaría hacerlo funcionar de manera correcta y saber en que me estoy equivocando.

  2. Por lo general cuando aparece ese mensaje en PHP está complementados con un expecting ‘ ‘ y entre las comillas aparece algún símbolo que se ha omitido, como un paréntesis o un punto y coma.
    ¿Podrías mostrarme la línea 8, que es la que se supone que genera el error?

¿Algún comentario?

* Los campos con un asterisco son necesarios

Últimos proyectos

© Digital Icon, S.L., 2007 – 2012