Moved host from the fairly useless 123-reg and am now with http://krystal.co.uk/ (their servers are located in an ex MOD bunker!), so I thought it was high time to give the website the usual refresh and do up. This time I am using WordPress and so far so good really. Excellent support and community, simply fantastic administration section. Couldn’t ask for more.
I’m in the process of adding features and fixing things around the site. Also I am moving content over from the old site to here as it can’t be easily imported. The old site is still available using an alternate link, http://www.low-tech.co.uk/, which will be moved over at a later date.
So one thing I thought I’d share is how I integrated my Twitter feed into my main feed on the site as I saw a few people asking about it and there isn’t a plugin available for it. It’s very simple really but requires editing of PHP files, I might make it into a plugin when I have a bit of spare time to learn how plugins work.
Firstly you need to set up some cron job or alternative for downloading your Twitter RSS feed however frequently you like. Your Twitter RSS feed is located at:
https://twitter.com/statuses/user_timeline/{your_twitter_username}.rss
Once you have got that inside a folder it’s time to parse it. Instead of using some sort of XML parser I am instead using a nice XML2Array function that I found here http://www.bin-co.com/php/scripts/xml2array/.
Create a function in your functions.php file to parse your RSS feed, mine looks like this.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * Returns a an array of Tweets for user data in cache/user.xml with timestamp */ function toolbox_get_twitter_feed() { require_once('xml2array.php'); $twitter_feed = file_get_contents(get_template_directory() . '/cache/user.xml'); $arr = xml2array($twitter_feed); $items = $arr['rss']['channel']['item']; return $items; } |
Now in your home.php or index.php you need to use that function to get your array of tweets and then put them into your main feed. The idea is that in your main while loop you first check your tweet array to see if you have tweets that are newer than that post, if there are then display the tweet and remove it from the array. Eventually all the tweets left are older than the posts on that page so you can just output them at the end.
My home.php has this inside the main loop with $tweets being the array of tweets.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!--?php foreach( $tweets as $key => $tweet) : if( strtotime($tweet['pubDate']) >= get_the_time('U')) : ?--> <div id="tweet"> <!--?php echo $tweet['description']; ?--> <div class="date"><!--?php echo strftime("%d/%m/%Y %H:%M:%S", strtotime($tweet['pubDate'])); ?--></div> </div> <!--?php unset($tweets[$key]); else: break; endif; endforeach; get_template_part( 'content', get_post_format() ); ?--> |
At the end simply repeat the foreach loop to print the remaining tweets in the tweet array.
Questions? Comments?