Contenido

getCommentsFromPingbacks(), trae los comentarios de tus pingbacks

28 Abr

+ 7

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.

Adios my-hacks.php, Adios!!

23 Abr

+ 2

En AyudaWordpress nos cuenta Fernando que en la nueva versión de WordPress, la 2.8. El fichero my-hacks.php dejará de ser soportado, lo que significa que todo lo que tengamos definido en él, dejará de funcionar. Hace ya casi 6 años que se anunciaba esta funcionalidad y desde entonces ha ido creciendo en muchos blogs alojando esos scripts que no sabíamos donde colocar. Ahora tendremos que buscar un lugar donde ubicar estos scripts:

  1. functions.php: El fichero functions.php es el que encontramos dentro de nuestro theme. En él podemos incluir todo el contenido de my-hacks.php y funcionará perfectamente.
  2. plugin: Podemos aprovechar el fichero my-hacks.php para convertirlo en un plugin con funcionalidades varias. ¿Como? Sigue leyendo 😀

Es muy sencillo, únicamente hemos de añadir esto al principio del fichero:

/*
Plugin Name: my-Hacks.php
Plugin URI: http://
Description: my-hacks.php convertido en plugin
Author: TU MISMO
Version: 1.0
Author URI: http://
*/

Despues lo úbicamos en la carpeta wp-content/plugins/ y nos aparecerá un plugin más en el panel de plugins de panel administrador. Lo activamos y listo. Ya tenemos my-hacks.php fuera de la raiz. ¿Fácil verdad?

Resalta los resultados de búsqueda en tu WordPress con JQuery

10 Abr

+ 2

En WeblogToolsCollection publican un artículo con el que nos muestran como realzar los resultados de nuestras búsquedas mediante el uso de un pequeño script con jQuery. Simplemente tendremos que realizar dos pasos muy sencillos para que nuestro theme ayude al usuario a encontrar esa palabra que está buscando.

1. Añadimos jQuery y la palabra a buscar

function hls_set_query() {
  $query  = attribute_escape(get_search_query());

  if(strlen($query) > 0){
    echo '
      <script type="text/javascript">
        var hls_query  = "'.$query.'";
      </script>
    ';
  }
}

function hls_init_jquery() {
  wp_enqueue_script('jquery');
}

add_action('init', 'hls_init_jquery');
add_action('wp_print_scripts', 'hls_set_query');

Añadiendo este código al fichero functions.php de nuestro theme dispondremos de jQuery en nuestro theme, y además tendremos una variable javascript (hls_query) con el valor de la búsqueda que jQuery deberá encontrar en el texto y resaltar.

2. Añadimos el script a nuestro header.php

 <style type="text/css" media="screen">
    .hls { background: #D3E18A; }
  </style>
  <script type="text/javascript">
  jQuery.fn.extend({
    highlight: function(search, insensitive, class){
      var regex = new RegExp("(<[^>]*>)|(\\b"+ search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +")", insensitive ? "ig" : "g");
      return this.html(this.html().replace(regex, function(a, b, c){
        return (a.charAt(0) == "<") ? a : "<strong class=\""+ class +"\">" + c + "</strong>";
      }));
    }
  });
  jQuery(document).ready(function($){
    $("#post-area").highlight(hls_query, 1, "hls");
  });
  </script>

Este código se encargará de buscar en nuestro contenido, concretamente en el id #post-area (hay que reemplazarlo por nuestro el contenedor de nuestros posts), y resaltará el texto buscado con la clase CSS .hls que está definida al inicio del código.

Importante

  1. Reemplaza #post-area por el valor del contenedor de posts.
  2. Cambia el color del resaltado reemplazando el valor (#D3E18A) por uno que se ajuste a tu diseño.

Alternativa

Si quieres resaltar los resultados sin necesidad de usar javascript, puedes usar WP-Resalta Busqueda.

Posts relacionados sin usar plugin

24 Mar

+ 26

Si eres de los reacios a usar plugin por que prefieres que las funcionalidades estén en el theme, estás de enhorabuena. Ya puedes desinstalar el plugin Related Posts por que podrás obtener posts relacionados mediante una pequeña función que se aprovecha de la potencia de WP_Query() para obtenerlos.

<?php
//Para usar dentro del Loop, muestra 5 artículos relacionados.
if ($tags) {
  echo 'Related Posts';
  $first_tag = $tags[0]->term_id;
  $args=array(
    'tag__in' => array($first_tag),
    'post__not_in' => array($post->ID),
    'showposts'=>5,
    'caller_get_posts'=>1
   );
  $my_query = new WP_Query($args);
  if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
      <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
      <?php
    endwhile;
  }
}
?>

Este código debe ir colocado dentro del Loop de WordPress, se encargará de mostrarnos 5 (podemos modificarlo haciendo cambios a showposts) usando el primer tag del post en el que nos encontremos.

[Solucionado] Safari4 y WordPress 2.7

11 Mar

+ 6

Hace unos días comentabamos que encontramos unos problemas a la hora de usar nuestro WordPress 2.7 en Safari 4. Más concretamente al insertar Links o imagenes. Bueno pues ya tenemos una solución.

safari4wordpress

Despues de leer que el problema estaba en todas las adaptaciones de TinyMCE y que disponian de una versión devel funcional para este navegador he probado a integrarla en WordPress y así poder trabajar con Safari 4 sin problemas con nuestros WordPress.

Solución

  1. Descargas este fichero
  2. Haz una copia de la carpeta wp-includes/js/tinymce/ a wp-incldes/js/tinymceOLD/
  3. Sin borrar la original (wp-incldes/js/tinymce/) sobreescribe los ficheros con el contenido del fichero descargado.
  4. Ya puedes probarlo en tu panel de administración.

Hazlo tu mismo

  1. Descargar la última versión «devel» de tinyMCE.
  2. Haz una copia de la carpeta wp-incldes/js/tinymce/
  3. Saca el contenido del fichero que acabas descargar, lo que necesitas está en la ruta (tinymce\jscripts\tiny_mce)

safari4wordpress2

Estos son los ficheros que necesitas, copialos sobre la carpeta original en wp-incldes/js/tinymce/. Y listo! 😀

iCal Archive para WordPress

17 Feb

+ 13

Ya podemos descargar iCal Archive para WordPress. Se trata de de una adaptación sobre WordPress del script que vimos hace unos días con el que podiamos crear un calendario al estilo iCal (del iPhone) con jQuery.

ical_archive_wordpress

Ver Demo

Instalación

  1. Descargamos el ficheros
  2. Descomprimimos y colocamos el directorio completo en la raiz de WordPress.
  3. Modificamos el HTML si queremos adaptarlo al diseño del blog.

Descargar

Versión 0.1

Separar comentarios de pingbacks en tus themes de WordPress 2.7en

8 Nov

+ 15

Hace unos días, vimos que WordPress 2.7 integra un Loop para comentarios que simplifica la plantilla de comentarios una barbaridad. Esto puede parecer muy sencillo, pero a simple vista te preguntas: ¿Como separo los comentarios de los pingbacks/trackbacks?

if ( have_comments() ) : ?>
<h4 id="comments"><?php comments_number('No Comments', 'One Comment', '% Comments' );?></h4>
<ul class="commentlist">
	<?php wp_list_comments(); ?></ul>
<div class="navigation">
<div class="alignleft"><?php previous_comments_link() ?></div>
<div class="alignright"><?php next_comments_link() ?></div>
</div>
<?php else : // this is displayed if there are no comments so far ?>
	<?php if ('open' == $post->comment_status) :
		// If comments are open, but there are no comments.
	else : // comments are closed
	endif;
endif;

Matt de Sivel.net se lo ha preguntado y ha dado con una solución igual de sencilla que el uso del nuevo Loop.

<?php if ( have_comments() ) : ?>
	<?php if ( ! empty($comments_by_type['comment']) ) : ?>
	<h3 id="comments"><?php comments_number('No Responses', 'One Response', '% Responses' );?> to &#8220;<?php the_title(); ?>&#8221;</h3>

	<ol class="commentlist">
	<?php wp_list_comments('type=comment'); // COMENTARIOS ?> 
	</ol>
	<?php endif; ?>

	<?php if ( ! empty($comments_by_type['pings']) ) : ?>
	<h3 id="pings">Trackbacks/Pingbacks</h3>

	<ol class="commentlist">
	<?php wp_list_comments('type=pings');   // PINGBACKS Y TRACKBACKS ?>
	</ol>
	<?php endif; ?>

	<div class="navigation">
		<div class="alignleft"><?php previous_comments_link() ?></div>
		<div class="alignright"><?php next_comments_link() ?></div>
	</div>
 <?php else : // SI NO HAY COMENTARIOS ?>

	<?php if ('open' == $post->comment_status) : ?>
		<!-- COMENTARIOS ESTAN ABIERTOS, PERO ESTAN VACIOS -->

	<?php else : // SI LOS COMENTARIOS ESTAN CERRADOS ?>
		<!-- If comments are closed. -->
		<p class="nocomments">Comments are closed.</p>

	<?php endif; ?>
<?php endif; ?>

La magia

Como podemos ver el código es realmente sencillo, únicamente hemos de solicitar mediante un parámetro el tipo de comentarios que queremos en cada una de las llamadas a wp_list_comments().

Llamada al template (Actualización)

tikitakfire me avisa de que falta añadir la llamada al template de comentarios comments_template() que en esta versión ha sido modificada y tendremos que llamarla de la siguiente forma :

comments_template('', true);

este código deberá ir en el lugar de tu theme donde antes estaba comments_template(), generalmente en el fichero index.php, single.php y page.php.

Usando Quickpress para insertar miniposts

8 Nov

+ 8

La nueva WordPress 2.7 integra la posibilidad de escribir posts rápidos directamente desde el panel de administrador, pero me he fijado que no usa las categorías, lo que hace que el sistema para montar mini posts que desarrollamos no sirva de mucho.

quickpress_wordpress_27

Por suerte, podemos modificar este formulario para añadirle la categoría del mini posts y así darle partido a los asides o miniposts que montamos.

Solo hemos de modificar la categoría a la que ha de asociar directamente el post. Para ello, podemos hacerlo con javascript o editando el fichero dashboard.php a la altura de la línea 310 para insertar el <input /> con el ID de la categoría para los asides.

En javascript:

jQuery("#quick-post-title").after('<input type="hidden" name="post_category[]" value="ID_CATEGORIA" />');

fichero dashboard.php línea 310

//Añadimos esto
<input type="hidden" name="post_category[]" value="ID_CATEGORIA" />

La opción de editar el fichero dashboard.php tiene una serie de problemas como:

  • Tener que modificarlo cada actualización de WordPress ya que se borraría.
  • Todo los posts escritos desde el QuickPress serían Asides.

Así que cada uno use el que crea más conveniente.

Más de 30 trucos para tu WordPress

5 Oct

+ 3

La gente de Hongkiat ha recopilado (una vez más) más de 30 trucos para mejorar nuestros WordPress.