Vou falar sobre: ler namespace xml php.

Ler feed do wordpress com php

Estamos bem acostumados a ler o feeds do wordpress(o famoso RSS), para reaproveitarmos a listagem de posts em outro ambiente, colocando os últimos posts na home do nosso site, ou alguma coisa desse tipo.

Eu mesmo, aqui neste blog, já coloquei algumas formas de fazer isso:

-> Ler rss do WordPress com php

-> Exemplo prático de Orientação a Objetos (php), diferenças e vantagens em relação à um código Estruturado

Entender namespace xml php

Porém, eu ainda não havia falado nada sobre ler namespace do xml, usando php.

É necessário “registrar” aquele namespace, para que o php consiga ler corretamente. Se não, a única coisa que vai chegar será um objeto SimpleXML vazio:

object(SimpleXMLElement)#N (0) {}

Ou então, um nulo, não aparecendo absolutamente nada no var_dump() do objeto.

E isso conseguimos usando o children, em cima do objeto retornado pela simplexml_load_file() mesmo, desta forma aqui:

$content = $desc->children('http://purl.org/rss/1.0/modules/content/');

Note que a URL que passei para o children, é específica do meu namespace (“content”), se vc tiver trabalhando com outro namespace, então vc deve ir atrás da URL que registra ele.

Fiz toda essa volta, para conseguir ler a “Imagem Destacada”, que podemos vincular a cada um de nossos posts, depois de setar este filtro, no functions.php do tema:

add_filter('the_content_feed', 'featured_image_feed');

A imagem aparece lá no feed, porém dentro da tag:

<content:encoded>..</content:encoded>

E por isso, eu precisava ler o namespace content do xml do feed do wordpress, para extrair a featured image de lá.

Sem mais, o código completo fica assim:

<?php

$rss = 'http://blog.devintegration.locaweb.com.br/feed/';


$xml = simplexml_load_file( $rss, 'SimpleXMLElement', LIBXML_NOCDATA );
$desc = $xml->children()->channel->item[0]; //->description;


$content = $desc->children('http://purl.org/rss/1.0/modules/content/');
var_dump( $content->encoded );


exit();

É isso galera. Comentem.

Neste caso, eu gosto de usar a simplexml, sei que com DOM fica mais robusto e tal.. porém dá uma olhada na simplicidade do meu código. =)

Usou ? comente.