Archive for the ‘wordpress tips’ Category

Showing off your FeedBurner subscribers

Thursday, November 20th, 2008

Another great post from http://yoast.com

Quite a few websites have started to show of their FeedBurner subscriber count with something else than a widget. To do that, you have to be able to grab the number of subscribers through the FeedBurner API.

Now I bet you want to know how! It’s bloody easy in WordPress, just do this:

$fb = get_option("feedburnersubscribecount");
if ($fb['lastcheck'] < ( mktime() - 600 ) ) {
	$snoopy = new Snoopy;
	$result = $snoopy->fetch("http://api.feedburner.com/awareness/1.0/GetFeedData?uri=feedburnerid");
	if ($result) {
		preg_match('/circulation=\"([0-9]+)\"/',$snoopy->results, $matches);
		if ($matches[1] != 0)
			$fb['count'] = $matches[1];
		$fb['lastcheck'] = mktime();
		update_option("feedburnersubscribecount",$fb);
	}
}
echo ''.$fb['count'].' Subscribers can\'t be wrong! Subscribe by <a href="http://yoast.com/email-blog-updates/">email</a> or to the <a rel="nofollow" href="http://feeds.feedburner.com/joostdevalk">RSS feed</a> now!';

Copy, paste, replace feedburnerid with your own FeedBurner ID, and you’re done!

Update: updated the code to include caching, as you might overload the FeedBurner API otherwise.

Update 2: if you get an error saying it can’t find the class Snoopy, add this above the code:

require_once(ABSPATH . 'wp-includes/class-snoopy.php');

How to display your last tweet in WordPress

Monday, November 17th, 2008

I found this great post here. Check this blog out if you want more wordpress advice.

I wanted to show my latest tweet on the front page of this site, and although I know there are several plugins which probably could’ve helped me do this, I decided to see how easy the API was to use.

It turned out to be incredibly easy, as long as you have PHP 5.2 or higher, that is.

This is the code:

require_once(ABSPATH . 'wp-includes/class-snoopy.php');
$snoopy = new Snoopy;
$snoopy->fetch("http://twitter.com/statuses/user_timeline/jdevalk.json?count=1");
$twitterdata = json_decode($snoopy->results,true);
echo "<p>\"".$twitterdata[0]["text"]."\"</p>";

As you can see, I use the Snoopy library to fetch the data, as that comes with WordPress by default. Than I decode the JSON results by using the json_decode function. This is the reason you need PHP 5.2 or up, as this was only included with this version of PHP.

Next, we output it. Of course, this is a quick & dirty implementation. If I got dugg now, and 1,000 people a minute came looking at that page, it should have some sort of caching in there. For now though, this is fine as it is!

Update: As Kim noticed in the comments, I’ve added some code to automatically link any @username mentions to those usernames. Replace the last echo line above with this:

$pattern = '/\@([a-zA-Z]+)/';
$replace = '<a href="http://twitter.com/'.strtolower('\1').'">@\1</a>';
$output = preg_replace($pattern,$replace,$twitterdata[0]["text"]);
echo "<p>\"".$output."\"</p>";

You could even decide to add rel="nofollow" the $replace if you don’t want those links to give juice.

Update 2: To make it even more complex, here is the entire code I now use, which excludes replies and caches the Twitter API requests so you won’t overload the API:

require_once(ABSPATH . 'wp-includes/class-snoopy.php');
$tweet   = get_option("lasttweet");
$url  = "http://twitter.com/statuses/user_timeline/jdevalk.json?count=20";
if ($tweet['lastcheck'] < ( mktime() - 60 ) ) {
  $snoopy = new Snoopy;
  $result = $snoopy->fetch($url);
  if ($result) {
    $twitterdata   = json_decode($snoopy->results,true);
    $i = 0;
    while ($twitterdata[$i]['in_reply_to_user_id'] != '') {
      $i++;
    }
    $pattern  = '/\@([a-zA-Z]+)/';
    $replace  = '<a href="http://twitter.com/'.strtolower('\1').'">@\1</a>';
    $output   = preg_replace($pattern,$replace,$twitterdata[$i]["text"]);  

    $tweet['lastcheck'] = mktime();
    $tweet['data']    = $output;
    $tweet['rawdata']  = $twitterdata;
    $tweet['followers'] = $twitterdata[0]['user']['followers_count'];
    update_option('lasttweet',$tweet);
  } else {
    echo "Twitter API not responding.";
  }
} else {
  $output = $tweet['data'];
}
echo "<p>\"".$output."\"</p>";

As you can see it also saves the amount of followers you have into $tweet['followers'], which I then use to display this:

<p>
  <a href="http://twitter.com/jdevalk">
    <?=$tweet['followers']?> followers on Twitter, and you?
  </a>
</p>

Update 3: Another fix to automatically make all links clickable, below this line:

$output = preg_replace($pattern,$replace,$twitterdata[$i]["text"]);

Add:

$output = make_clickable($output);

This will use the WordPress internal make_clickable function to make sure that all URL’s are clickable.

Enjoy!