Hace unos días instalé en la bitácora el plugin Twitter Tools de Alex King principalmente para automatizar la notificación de las nuevas entradas en la bitácora en mi twitter. Efectivamente, el plugin se encargaba de enviar los tweets cada vez que escribía un nuevo post, pero me di cuenta de que también estaba enviando tweets cuando modificaba entradas antiguas (por ejemplo, las que todavía están pendientes de asignar categoría). Mirando el código del plugin, me encontré con lo siguiente (alrededor de la línea :
function do_blog_post_tweet($post_id = 0) {
if ($this->notify_twitter == '0'
|| $post_id == 0
|| get_post_meta($post_id, 'aktt_tweeted', true) == '1'
) {
return;
}
$post = get_post($post_id);
$tweet = new aktt_tweet;
$tweet->tw_text = sprintf(
__($this->tweet_format, 'twitter-tools'),
$post->post_title, get_permalink($post_id)
);
$this->do_tweet($tweet);
add_post_meta($post_id, 'aktt_tweeted', '1', true);
}
Al principio de la función se puede ver como entre otras cosas se comprueba si dentro de los metadatos de la entrada aktt_tweeted tiene valor 1. En caso afirmativo, no se envía un tweet, ya que se interpreta como que ya se envió en el momento de la publicación. El problema viene dado en que en las historias antiguas ya publicadas dicho metadato no está definido, con lo cual al editar las historias se procede a enviar el tweet y añadir el metadato de que ha sido “twiteada”.
Una posible solución a este problema dejar la última parte de la función de la siguiente manera:
if ($post->post_date == current_time('mysql')) {
$tweet = new aktt_tweet;
$tweet->tw_text = sprintf(
__($this->tweet_format, 'twitter-tools'),
$post->post_title, get_permalink($post_id)
);
$this->do_tweet($tweet);
}
add_post_meta($post_id, 'aktt_tweeted', '1', true);
Como podéis ver, lo que hemos hecho es añadir una comprobación de si la fecha de la entrada y la actual del sistema es la misma, ya que esto solo ocurre en el momento en el que se está publicando una nueva entrada. Si las fechas son distintas lo que nos indica es que nos encontramos en la modificación de una entrada ya publicada en el pasado, con lo cual no se debería enviar el tweet. Por último, guardamos como metadato de la entrada aktt_tweeted con valor 1 para evitar en futuras modificaciones de la entrada el pasar del primer if.
Con estos dos pequeños cambios conseguimos evitar el problema del envío de tweets en modificaciones de entradas antiguas ya publicadas.
Espero que os sirva :)
