Archive for September, 2007

Turning a WordPress Sidebar Plugin Into a Widget

Converting a WordPress plugin to a widget doesn’t have to be difficult, but because the official API’s over at wordpress.org are so lacking in detail (the example they provide won’t even work if you cut and paste), many developers can become frustrated with the process.

STEP 1: Using a widget to call a plugin function (no user input)

To begin, assume you have a very simple sidebar plugin that can be called by editing the sidebar theme directly. In your plugin file, there is some function called “nifty_stuff” that outputs some sort of html code to display in the sidebar. In the bad old days of WordPress, the only way a user could display such a plugin would be to edit their theme and add the line of code provided by the plugin author to some point in their sidebar.php file (or whatever the sidebar’s name happens to be). And in older wordpress versions and themes this is still what a blogger needs to do, so you want to leave your user with that option.

If the plugin function requires no input from the user, then the following code will add it to their widgets menu where they can simply drag and drop it into a simplified representation of their sidebar. Just add this code to the same script that holds the “nifty_stuff” function:

function widget_nifty_stuff_init() {

if(!function_exists(‘register_sidebar_widget’)) { return; }
function widget_nifty_stuff($args) {

extract($args);
echo $before_widget . $before_title . $after_title;
nifty_stuff();
echo $after_widget;

}
register_sidebar_widget(‘Nifty Stuff’,’widget_nifty_stuff’);

}
add_action(‘plugins_loaded’, ‘widget_nifty_stuff_init’);

Going through the code, what’s happening is that we first want to create a wrapper for our widget function.

Without that wrapper, php will attempt to use the function “register_sidebar_widget” before the script containing it has been loaded. Using the ‘plugins_loaded’ action hook to run the init function ensures that everything loads in the right order first.

The lines surrounding the call to nifty_stuff are there because the widget-enabled wordpress themes may use them, and so they must be supported.

The register_sidebar_widget function associates a label for the widget with the actual widget function that will get called if the user adds it to their sidebar. That label is what the user sees in their widgets menu.

Now, that’s all well and good for really simple plugins. But if your widget needs that user input, then keep reading to learn how to add a widget control. continue reading »

September 30 2007 | open-source and technical articles | 4 Comments »

The ISR interview widget for affiliates

In my current full-time job as webmaster for Inside Success Radio, I don’t often get a lot of opportunity to do really cool new programming. However, I had a blast with my latest project, and I was proud enough of it that I’m going to share it here.

Basically, we run an internet talk radio website, and we have members who pay to listen to our exclusive content. Each interview is broken up into 3 segments, with the first segment telling the guest’s story, and then the second segment giving their expert advice (and this is the stuff people are willing to pay for), and a third segment where they offer predictions about developing trends in their fields. Our experts span the gamut from business and finance to parenting and romance. With multiple subtopics, it’s pretty easy to see how content from our site could be a valuable addition to anyone’s weblog.

So anyway, after I happened to mention to my boss that I knew how to write WordPress widgets, he asked me if we could use a widget to let someone easily add a feed from our site to their own blog, and get some free links back in the process. I said that I could, and after we hammered out the specs, we came up with this pretty little widget.

You can see the result of this effort in my own sidebar there to the left. It includes just a tiny amount of information about the guest, a feed for listening to the first segment of the interview, and then a link inviting people to our VIP page, where by giving us just their name and email address we’ll let them listen to the entire interview for free. In addition, we offer them a free trial membership. After the trial period expires, they can pay each month to continue to get access to our huge library of content as well as all of our new shows that we add every week.

Now, the exciting feature for the blog owner is that the link to the VIP page includes an affiliate id. If a person signs up as a member and starts paying us each month, we pay a 35% commission on every payment. With just a few new users each month, this can quickly become a great passive income source. In addition, the blog owner specifies the keywords and topics relevant to their own visitors, ensuring that the interviews displayed will be ones their traffic is most likely to be interested in. The featured interview changes each day. As a handy guide, the widget control lets the blog owner know how many interviews in the database currently match their preferences. They can narrow or generalize their settings as appropriate.

The exciting feature for Inside Success Radio of course is that we get numerous links back to our site to improve our search engine rankings. We get 1 link back to the insidesuccessradio.com homepage, 1 link to the homepage of the particular radio show being featured, and 2 links back to the guest’s own promotional page. The other cool thing is that if we want to promote one particular guest on a particular day, we can modify the feed on our end such that if the widget’s keyword, category, and radioshow preferences match, then that guest we’re promoting will be sure to show up as the featured interview. This way we can quickly get dozens of backlinks and traffic all at once. Isn’t that a cool idea?

Anyway, if you think you’d like to have it on your own blog, you can either become a member yourself and request an affiliate id, or else feel free to use mine – 405203. (Hey, it never hurts to ask, right?)

Here’s what bloggers see when configuring their feed:
Options for configuring the ISR feed widget

September 27 2007 | open-source and php projects | No Comments »

The Experts-Exchange Badge

Though I originally developed this wordpress plugin just for my personal use, I decided to generalize it so anyone can display their rank on experts-exchange.com. Now I’m hoping others find it useful as well.

The point tally automatically updates when you gain new expert points, so it’s never out of date. As you pass milestones like 50K, 150K, 300K and so on, the graphic will switch to show your current shield of courage. It’s a snap to use either as a direct function call in your sidebar.php file or as a widget. And the badge itself is a link back to your experts-exchange profile.

eebadge screenshot

Click this link to download the plugin.

After unzipping the contents, place them inside your wordpress plugins folder. In the admin panel, go to your Plugins menu and activate the Experts Exchange Badge plugin.

To have it display on your page, go to your Presentation menu and click the “Widgets” option. Drag the widget named “Experts Exchange Badge” into your preferred position in the sidebar. Click on the configuration link and complete the link to your profile in the input window. Now click “save changes”. Your badge will now appear for all your wordpress visitors to see.

As an alternate method, if you don’t want to use widgets you can modify your sidebar.php file directly. Again go to the Presentation menu, this time selecting the “Theme Editor” option. Select the sidebar file you wish to modify (or any other template you want to show your badge) and add the following line:
<?php ee_badge(‘[your profile id]’); ?>
(replace [your profile id] with the code that completes the link to your profile: http://www.experts-exchange.com/M_[your profile id].html)

September 19 2007 | open-source | 1 Comment »

Experts Exchange

Experts-Exchange shirt frontExperts exchange is a website where people who need an answer to a tricky technical question can go to seek out the help of self-proclaimed experts in various topics. Experts are given points for answering questions. Experts with lots of points can earn rankings, print out certificates and earn free t-shirts (the ultimate nerd motivator).

I first visited the site because I had been struggling with a particular function that had suddenly stopped working and I couldn’t figure out why. My boss got me set up with an account, and I was able to ask my question.

It was cool. At first, the suggestions I got were things I had already tried, or unhelpful comments from people who didn’t seem to understand what I was trying to do. Fortunately, there was a fellow who was able to suggest a way of rewriting the function. It worked, and I was happy.

Experts-Exchange shirt backBut while I was there, I happened to look at some of the other php questions in that “zone”. I started providing some answers. I started earning some expert points. I started having fun.

I really like working on php problems, and because the nature of my work prevents me from coming across every potential use for php, I used to find that I wasn’t being stretched as much as I like. So now, whenever work gets slow, I can always count on someone on experts-exchange posting a question that I wouldn’t otherwise have a reason to think about.

I almost always learn something new when I visit the site these days. Either I learn because I have to do some research in order to answer a question I’ve never come across before, or else I learn because someone posts an alternate way of doing something that I didn’t know about.

I’m pretty good at it too, which is nice as far as self-validation goes. I’ve now participated in 123 questions, not counting the handful I’ve asked myself. Of those, I was either credited with an accepted answer or an assisted answer on 73. Out of the remaining 50, only 15 were credited to another user. The rest are all still open or deleted by their authors. I happen to know that many of those open questions have simply been abandoned after I correctly answered them, and I’ll eventually get the points credited to me when the moderators come around and clean up the old questions.

Right now I am ranked a php “Master”, meaning I have over 50K points. The next ranking is Guru. Earning it requires hitting 150K points, and I expect to hit it sometime in October. Additionally, today marks a milestone for me with EE, as I have earned a spot among the top 15 php experts for the entire year. This is particularly thrilling seeing as I joined in July, so almost every other expert on the list has been answering questions since the year began.

Experts Exchange snapshotThe top php “rookie” – meaning someone who joined this year, is sitting at number 4 on the top experts for 2007. He joined in January, and currently has 225K points in php. I have 94K. If I can overtake him by the end of the year (and I think I can) I will receive an official award from experts-exchange recognizing me as the top php rookie.

I’m competitive, I like to collaborate with other techies, I like the challenge of trying to debug someone else’s code, I enjoy expanding my own knowledge, and I love free t-shirts. It’s only natural that I would be drawn to this site. And if showing off my expertise helps me land a job doing what I enjoy, then that just makes it all the better.

[UPDATE: I’m now at #13 for the year on the site, and within a single answer from #12. So far for the month of September I have just over 53,000 points in the php zone. Or, to put it another way, I have more points than the combined monthly totals of the 2nd-6th spots of top php experts this month.]
EE rankings in php for September (as of 9/8/07)

[UPDATE: I’m now a guru, and #9 for the entire year in php. My new shirt should be here in a few weeks. I created a little module for my blog that counts my current points score. It’s at the bottom of my left-hand sidebar.

To help me spend less time on the site and still answer questions, I developed a script which alerts me each time a new question is asked. This is important because when I’m working, I can’t keep checking the site throughout the day, but it’s not a problem to turn off my timer for a few minutes while I answer a question that I know I’m interested in solving.

I believe I have close to 40,000 points stored up in unclosed questions that I’ll receive toward the end of the month and the beginning of next as moderators come through and clean them up. The current top php rookie may not realize it yet, but he is very soon going to be replaced.]

[UPDATE (October 26, 2007): I have now been recruited as a zone advisor for the PHP and the blogging zones. This means that I’ll be the “go-to” guy if someone’s stuck with a particularly difficult problem in any of those areas, or if there’s a dispute about who answered a question best. It also means I can close any question and post a comment as an admin. Also, I get a new email address. If someone sends to my username (MasonWolf) followed by “experts-exchange.com” it’ll be forwarded to me. Anyway, it’s kinda cool. Out of thousands of experts on the site, there’s only 55 zone advisors, and I’m the newest.]

September 06 2007 | worth mentioning | 2 Comments »