Ler namespace xml php, usando a simplexml – content:encoded – feed WordPress
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
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.
Featured Image
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.