Update for Servage Referral Widget etc

Last night after over an hour of coding I was able to finish version 1.2, the new version is able to count how many times a user clicks the link, then report it in the Widget control panel. I might make an option later to report it under the widget, or in the Dashboard.

Google Analytics is quite a handy tool to see who reads my site and for what purpose, the Webmaster Tools is also great, however I am noticing the search ranking isn’t very accurate for some reason.

In other news I went out half way through writing this entry, the slimline sets of Mythbusters seasons appear to be slowly coming out, I got my copy of Season 1 today.

I also just bought the spamannoys.me domain, mainly for e-mail of course.

WordPress/Servage spam IP filtering

I have Akismet set up to keep spam out as well as keeping all comments for moderation, I initially decided to do some IP blocks seeming as there would be a few that would constantly send spam.

The only problem was that as WordPress only use

$_SERVER['REMOTE_ADDR']

to determine a user’s IP address which as most people who know PHP know it is a bad idea because it doesn’t take into account proxies etc. In my case it was actually giving Servage’s own IP for every result which wasn’t of much use unless I wanted to block comments/trackbacks altogether.

As there’s no documentation that I could find about where WordPress actually contains the code to find the IP and Google wasn’t much help I had to look manually.

I eventually found it in comments.php in the wp-includes directory.

$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '', $_SERVER['REMOTE_ADDR'] );

First to add in the neccessary code a variable must be created, change the above code to this:

$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '',$bp_IP );

Then add the required code above that stating:

$bp_IP = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];

This allows the correct IP to be shown in most cases, most of the thanks must go to Jason for this.

Update: This piece of code also works in WordPress 2.6x.