La proliferación de blogs ha hecho que le contenido esté muy distribuido por Internet y de un artículo pueden llegar a salir miles de links (pingbacks) en los que puede haber debate sobre el mismo contenido inicial.
Imagina que pueda estar vinculado con todos los blogs (WordPress) que han hecho un ping a tus artículo, y que en tu blog puedas mostrar los comentarios de estos blogs (siempre y cuando estos lo permitan).
getCommentsFromPingbacks()
es una función que he montado que permite mostrar de los pingbacks encontrados por cada post, un listado de comentarios sobre esa anotación en cada uno de los anteriores pingbacks.
El código
<?php
include_once(ABSPATH . WPINC . '/rss.php');
function getCommentsFromPingbacks($postID = 0, $limit = 5, $propios = false){
global $wpdb;
// Obtenemos la dirección de nuestro blog
$localhost = '';
if ($propios)
$localhost = "AND comment_author_url NOT LIKE '".get_option("siteurl")."%";
// Lanzamos petición
$urls = $wpdb->get_results("SELECT comment_author, comment_author_url FROM $wpdb->comments WHERE comment_post_ID = ".intval($postID)." $localhost AND comment_type = 'pingback' AND comment_agent LIKE '%WordPress%' LIMIT ".intval($limit));
// Sinó hay pingbacks, salimos
if (!$urls) return;
// Recorremos los pingbacks
foreach($urls as $url) {
// Parátro RSS de comentarios
if (strpos($url->comment_author_url,'?') === false) $actual = $url->comment_author_url.'?feed=comments-rss2';
else $actual = $url->comment_author_url.'&feed=comments-rss2';
// Leemos comentarios
$rss = fetch_rss($actual);
// Si no hay $rss o items seguimos con el siguiente.
if (!$rss || !$rss->items) continue;
$items = array_reverse($rss->items);
echo '<h3>'.$url->comment_author.'</h3><ul class="external_comments">';
for($id = count($items); $id>0; $id--){
$item = false;
// Datos basicos
$item->comment_author = $items[$id]['dc']['creator'];
$item->comment_author_url = $items[$id]['link'];
$item->comment_date = $items[$id]['pubdate'];
$item->comment_content = $items[$id]['content']['encoded'];
// comment_ID
$item->comment_ID = 'external-'.$id;
$item->comment_type = 'external';
// Pintamos el comentario
createComments($item);
}
echo '</ul>';
}
}
/*
Pintamos el comentario
*/
function createComments($com) {
echo '<li>
<h4>'.$com->comment_author.'</h4>
<small>'.$com->comment_date.'</small>
<div class="comment_content">
'.$com->comment_content.'
</div>
</li>';
}
// Solicitamos los comentarios del post
getCommentsFromPingbacks($post->ID);
?>
El código, se encarga de buscar pingbacks en el post indicado como parámetro. Además podemos indicar un límite de sitios que comprobar, por defecto le he puesto 5 (hay que tener en cuenta el tiempo de carga de la página) y despues como tercer parámetro podemos indicar si queremos que aparezcan los comentarios enlazados de nuestro propio blog.
Una vez localizadas las url’s de los pingbacks, procedemos a solicitar los comentarios, para ello usamos el parámetro de WordPress feed=comments_rss2
, que nos devolverá un RSS con los comentarios del post. Esto implica una limitación de tamaño (sinó recuerdo mal, no he podido probarlo) y que el blog externo debe tenerlo activo. Mediante el uso de fetch_rss()
podremos realizar la petición y además recibir el comentario como un objeto fácil de iterar y procesar.
El código está pensado para usarse en el sistema de comentarios de WordPress 2.7, creando un comentario virtual con los datos necesarios para que el callback de wp_lists_comments()
pueda procesarlo como un comentario.
Por defecto, indicará el atributo class de cada comentario, como «external», esto es debido al comment_type
que lo informamos en la función.
Para el ejemplo, he montado createComments()
que recibe un parémtro $com
, que es el comentario con los datos necesarios.
¿Donde iría este código?
Pues este código solo necesita que se cumpla una premisa y es que el ID del comentario esté informado. Realmente puede ir cualquier parte de WordPress siempre y cuando se pase el ID de un artículo de nuestro WordPress. Si usamos el ejemplo tal cual, debería estar dentro del Loop y más concretamente en el fichero comments.php
de nuestro theme, pero lo mejor es ir probando y ubicarlo en el sitio que creamos más acertado.
¿Que os parece?
Opiniones, impresiones, se agredecen.
7 comentarios, 0 referencias
+
#