[WORDPRESS] Créer un widget avec vos derniers Tweets !

Nous avons vu dernièrement comment créer un Widget avec WordPress. Voici maintenant comment afficher vos derniers Tweets dans un widget !

Cette méthode est en fait une adaptation de ce qui est utilisé dans le thème Mystique que j’utilisais avant sur ce blog.

Pour faire cela il va me falloir quelques fonctions que j’ai mise dans le fichier lib/core.php.

function objectToArray($object){
   if(!is_object($object) && !is_array($object)) return $object;
   if(is_object($object)) $object = get_object_vars($object);
   return array_map('objectToArray', $object);
}

function timeSince($older_date, $newer_date = false){
  $chunks = array(
   'year'   => 60 * 60 * 24 * 365,  // 31,536,000 seconds
   'month'  => 60 * 60 * 24 * 30,   // 2,592,000 seconds
   'week'   => 60 * 60 * 24 * 7,    // 604,800 seconds
   'day'    => 60 * 60 * 24,        // 86,400 seconds
   'hour'   => 60 * 60,             // 3600 seconds
   'minute' => 60,                  // 60 seconds
   'second' => 1                    // 1 second
  );

 $newer_date = ($newer_date == false) ? (time()+(60*60*get_settings("gmt_offset"))) : $newer_date;
 $since = $newer_date - $older_date;

 foreach ($chunks as $key => $seconds)
  if (($count = floor($since / $seconds)) != 0) break;

 $messages = array(
   'year'   => ' il y a %s an(s)',
   'month'  => ' il y a %s mois',
   'week'   => ' il y a %s semaines',
   'day'    => ' il y a %s jours',
   'hour'   => ' il y a %s heures',
   'minute' => ' il y a %s minutes',
   'second' => ' il y a %s secondes',
  );
  return sprintf($messages[$key],$count);
}


function display_twitter_data($id, $twituser, $twitcount, $twitdata = false){
  $error = false;
  if(!$twitdata):
   if (false === ($twitdata = get_transient('mystique_twitter_'.$id))):
    require_once(ABSPATH.'wp-includes/class-snoopy.php');
    $snoopy = new Snoopy;
    $response = @$snoopy->fetch("http://twitter.com/users/show/".$twituser.".json");
    if ($response) $userdata = json_decode($snoopy->results, true); else $error = true;
    $response = @$snoopy->fetch("http://twitter.com/statuses/user_timeline/".$twituser.".json");
    if ($response) $tweets = json_decode($snoopy->results, true); else $error = true;
    if(!$error):
      // for php < 5 (included JSON returns object)
      $userdata = objectToArray($userdata);
      $tweets = objectToArray($tweets);

      $twitdata = array();

      $twitdata['user']['profile_image_url'] = $userdata['profile_image_url'];
      $twitdata['user']['name'] = $userdata['name'];
      $twitdata['user']['screen_name'] = $userdata['screen_name'];
      $twitdata['user']['followers_count'] = $userdata['followers_count'];
      $i = 0;
      foreach($tweets as $tweet):
        $twitdata['tweets'][$i]['text'] = $tweet['text'];
        $twitdata['tweets'][$i]['created_at'] = $tweet['created_at'];
        $twitdata['tweets'][$i]['id'] = $tweet['id'];
        $i++;
      endforeach;
    endif;
   endif;
  endif;

  // only show if the twitter data from the database is newer than 6 hours
  if(!$error && is_array($twitdata['tweets'])): ?>
   <div class="clear-block">
     <div class="avatar"><img src="<?php echo $twitdata['user']['profile_image_url']; ?>" alt="<?php echo $twitdata['user']['name']; ?>" /></div>
     <div class="info"><a href="http://www.twitter.com/<?php echo $twituser; ?>"><?php echo $twitdata['user']['name']; ?> </a><br /><span class="followers"> <?php printf("%s suiveurs",$twitdata['user']['followers_count']); ?></span></div>
   </div>

   <ul>
    <?php
      $i = 0;
      foreach($twitdata['tweets'] as $tweet):
        $pattern = '/\@(\w+)/';
        $replace = '<a rel="nofollow" href="http://twitter.com/$1">@$1</a>';
        $tweet['text'] = preg_replace($pattern, $replace , $tweet['text']);
        $tweet['text'] = make_clickable($tweet['text']);

        // remove +XXXX
        $tweettime = substr_replace($tweet['created_at'],'',strpos($tweet['created_at'],"+"),5);

        $link = "http://twitter.com/".$twitdata['user']['screen_name']."/statuses/".$tweet['id'];
        echo '<li><span class="entry">' . $tweet['text'] .'<a class="date" href="'.$link.'" rel="nofollow">'.timeSince(abs(strtotime($tweettime . " GMT")),time()). '</a></span></li>';
        $i++;
        if ($i == $twitcount) break;
      endforeach;
    ?>
   </ul>

  <?php else: ?>
   <p class="error"><?php echo 'error'; ?></p>
  <?php endif;
}

Maintenant passons au widget à proprement parlé. On trouve son code dans core/widgets.php.

class Wanders_Last_Tweets extends WP_Widget {
	function Wanders_Last_Tweets() {
	//Constructor
		$widget_ops = array('classname' => 'widget_wanders_last_tweets', 'description' => 'Afficher les derniers tweets');
		$this->WP_Widget('last_tweets','[WANDERS] Derniers Tweets !',$widget_ops);
	}
	function widget($args, $instance) {
	// prints the widget
		extract($args, EXTR_SKIP);
		echo $before_widget;
		
		$title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
		$login = empty($instance['login']) ? ' ' : apply_filters('widget_login', $instance['login']);
		$number = empty($instance['number']) ? ' ' : apply_filters('widget_number', $instance['number']);
		
		echo $before_title . $title . $after_title; 

		display_twitter_data(wp_specialchars($_GET['widget_id']),$login,$number);

		echo $after_widget;
	}
	function update($new_instance, $old_instance) {
	//save the widget
		$instance = $old_instance;
		
		$instance['title'] = strip_tags($new_instance['title']);
		$instance['login'] = strip_tags($new_instance['login']);
		$instance['number'] = strip_tags($new_instance['number']);
		
		return $instance;
	}
	function form($instance) {
	//widgetform in backend
		$instance = wp_parse_args( (array) $instance, array('title' => '','login' => '','number'=>''));
		
		$title = strip_tags($instance['title']);
		$number = strip_tags($instance['number']);
		$login = strip_tags($instance['login']);
		
		?>
		<p>Afficher les derniers Tweets</p>
		<p><label for="<?php echo $this->get_field_id('title'); ?>">Titre : <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" /></label></p>
		<p><label for="<?php echo $this->get_field_id('login'); ?>">Login Twitter : <input class="widefat" id="<?php echo $this->get_field_id('login'); ?>" name="<?php echo $this->get_field_name('login'); ?>" type="text" value="<?php echo attribute_escape($login); ?>" /></label></p>
		<p><label for="<?php echo $this->get_field_id('number'); ?>">Nombre de Tweets : <input class="widefat" id="<?php echo $this->get_field_id('number'); ?>" name="<?php echo $this->get_field_name('number'); ?>" type="text" value="<?php echo attribute_escape($number); ?>" /></label></p>
		<?php
	}
}

register_widget('Wanders_Last_Tweets');

On n’oublie pas d’inclure ces deux fichiers dans functions.php.

include('lib/widgets.php');
include ('lib/core.php');

Tout cela va nous donner un widget que l’on pourra configurer avec notre identifiant Twitter ainsi que le nombre de Tweets que nous voulons afficher.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.