I’m really bad at thsi since, generally, I don’t know why people would want to with the plugins I make. Which means I don’t do it. Which means I didn’t know how.
I have a plugin that records the IP address of users as they register and outputs it on the ‘show users’ page. It’s simple and it works.
Someone asked me if I could make it link to a place where he could see where the IP was from. Now my intent with the plugin was to list the IPs so I could spot serial sock puppets. But this use-case, I agreed, was valid. I just didn’t want to tie my plugin into one service or another. So I made it filterable.
As it happens, it was incredibly simple. This is filed under “Stuff I should have known years ago…”
Make The Output Filterable
Originally I had the code outputting $theip
and, in order to make it filterable, I wrapped that with this:
if ( has_filter('ripm_show_ip') ) { $theip = apply_filters('ripm_show_ip', $theip); }
The whole function looks like this:
public function columns($value, $column_name, $user_id) { if ( $column_name == 'signup_ip' ) { $ip = get_user_meta($user_id, 'signup_ip', true); if ($ip != ""){ $theip = $ip; if ( has_filter('ripm_show_ip') ) { $theip = apply_filters('ripm_show_ip', $theip); } return $theip; } else { $theip = '<em>'.__('None Recorded', 'register-ip-multisite').'</em>'; return $theip; } } return $value; }
You’ll notice the has_filter()
check is only on one possible output? That’s because I’m translating the output on the other one, which says “None Recorded” I could filter that, so people could change it to anything they want, but right now I think that’s a bit odd.
Filter The Output
To test this, I made a file /mu-plugins/register-ip-multisite.php
and put the following inside:
function filter_ripm_show_ip($theip) { $theip = '<a href="https://duckduckgo.com/?q='.$theip.'" target="new">'.$theip.'</a>'; return $theip; } add_filter('ripm_show_ip', 'filter_ripm_show_ip');
That made it a link. Simple.
Does It Work?
Of course!
I did not apply the filter to the output on the edit-users page, but if that turns out to be needed, I can.