Skip to content


Updated version (0.2) of Custom Profile Filters for BuddyPress

I’m releasing a new version of my Custom Profile Filters for BuddyPress plugin. The initial version, described here, gave BuddyPress users more control over which terms in their profiles become linked to a community-wide profile search. The new version gives BP administrators the ability to tweak these links even more. Here’s what’s new:

  1. Some profile information – phone numbers, IM handles, and so on – is unique to the individual user. Thus there’s no real need to have this information linked to a community-wide search. Using this plugin, administrators can specify certain profile fields that will remain non-linked. By default, profile fields called Skype ID, Phone, and IM will not be processed as links, but you can tweak this to be whichever fields you want. See readme.txt and custom-profile-filters-for-buddypress.php for more information.
  2. Other fields, especially those social networking sites where each user’s handle is attached to a profile page, can be more usefully linked to those user profiles than to a search of the community. For example, it makes more sense for the contents of the Twitter field to link to an individual’s Twitter page rather than to other users in the community who have the same Twitter handle (hopefully no one!). With this plugin, administrators can specify that certain fields will turn the user’s social networking ID into a profile link. By default, the plugin recognizes fields called Twitter, Delicious ID, YouTube ID, Flickr ID, and FriendFeed ID. See custom-profile-filters-for-buddypress.php for more information and to change these settings.

I also added a little bit of code to make sure that BuddyPress can recognize email addresses with periods before the @-sign.

You can see some of these things at work in my profile here on the CUNY Academic Commons: http://commons.gc.cuny.edu/members/boonebgorges. You’ll notice that the Twitter field shows a link to my Twitter profile, even though I just entered my handle in the Edit Profile screen.

Grab the latest version from the trunk http://svn.wp-plugins.org/custom-profile-filters-for-buddypress/ or download it here: custom-profile-filters-for-buddypress-v02.zip

Posted in Plugins and Extensions.

Tagged with , , , .


52 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Avatar of Matthew K. Gold Matthew K. Gold says

    Great work, Boone! I know that many members of our community — along with others — will find this very useful.

  2. Ray says

    Hi Boone,

    I have a question about your filter.

    Let’s say I use a custom variable to get one variable.
    $bio = xprofile_get_field_data( ‘Bio’, bp_get_the_site_member_user_id() );

    How can I make sure your filter is triggered so I can utilize the square bracket linking?

  3. Avatar of Boone Gorges Boone Gorges says

    Hi Ray,

    It depends on when you define $bio.

    Here’s the way things normally work. The profile-loop template calls bp_the_profile_field_value for each field in xprofile, which then calls bp_get_the_profile_field_value. These custom profile filters are hooked to bp_get_the_profile_field_value. So if you’re isolating information from the bio after bp_get_the_profile_field_value has been run (i.e. if $bio gets defined in the page template), then the filter should already have run on it.

    If, on the other hand, $bio gets pulled earlier in the process (like in a separate plugin, or if you’ve hacked the core) then you’ll have to apply the filter manually. As it’s written, you can’t just run the bracket filter on a single string (it runs as a loop on every profile field). But you could try one of two things: 1) you could rework the bracket filter (lines 60-68, more or less) into their own function, which can then be called both in its current location as well as in your code (eg $bio = bp_add_links_to_bracketed_text($bio)), or 2) you could reproduce all of the filter code immediately after you define $bio (taking 60-68, pasting it into your code, changing the first “elseif” to “if”, and changing all instances of $field_value to $bio).

    Good luck!

  4. Ray says

    Thanks for that explanation, Boone.
    That was helpful.

    I think I’ll try method #1 first and we’ll go from there!

    One follow up question, I noticed that the $social_networking_fields in your plugin have a nofollow link (which is good!).

    I couldn’t find “nofollow” in your plugin, so i’m guessing another hook or filter in WordPress is handling the $social_networking_fields? Okay, just looked into it a bit… seems like it’s the make_clickable() function in WordPress.

    What’s the easiest way I could add the target attribute so those links open in a new window?

  5. Avatar of Boone Gorges Boone Gorges says

    Hi Ray,

    My best suggestion is to copy the make_clickable() function (out of /wp-includes/formatting.php), copy it into this plugin (or some other plugin, if you’d prefer), and rename it – maybe something like make_clickable_target_new(). Make the necessary change to the function – it’s pretty easy to see where, in the last line of the function, you can add target=”_blank” or whatever. Then change line 94 in the custom profile filter plugin to reader $new_values[] = make_clickable_target_new( $value );.

    This is probably the best way to do it, since (a) you can avoid hacking the core, and (b) it will only apply to URLs in BP, not all over your WPMU installation.

  6. Ray says

    Sounds like a plan!
    Thanks for the quick reply!

  7. Ray says

    Hey Boone,

    Sorry to bother you again.
    I copied the make_clickable() function as well as the _make_url_clickable_cb() function over to your plugin, and have made the necessary changes.

    However, for some reason, the $new_values[] array isn’t taking to the new function.

    I even called $new_values[] = fhdhlkfjahsldkhflkdhs($value);
    Just to see if an error would throw… but nothing happened.

    Any idea why?

  8. Avatar of Boone Gorges Boone Gorges says

    Hi Ray,

    I’m not exactly sure why you’re having a hard time getting $new_values to take new members. But I did manage to get the target=blank bit working, albeit with a bit of messing around. Check out this file: http://dev.commons.gc.cuny.edu/files/2009/07/bp-profile-custom-filtersphp.zip. Here’s what to look for:
    1) Like you, I copied over make_clickable() as well as _make_url_clickable_cb().
    2) Added the target=blank info to _make_url_clickable_cb, changed the names of the two functions, and changed the call in make_clickable_custom to point to _make_url_clickable_cb_custom()
    3) Changing the make_clickable() that already exists in the plugin (line 124 in this version) to make_clickable_custom() catches the external links OTHER THAN the ones in the social networking fields (i.e. it gets the blog link). This tells me that I messed something up in the logic of the plugin. I’ll fix it in a future version – thanks for bringing it to my attention. In the meantime, you can make the target=blank apply to social networking fields as well by adding the line $field_value = make_clickable_custom( $field_value ); to the social networking block, as I have at line 79.

    I’ll add fixing this quirk to my to-do list. Thanks, Ray!

  9. Ray says

    Ahh okay. So it wasn’t entirely my fault ;)

    Step 3 was what drove me mad!

    Thanks for posting that code, Boone.
    That worked perfectly.

    Glad I could help debug your plugin!

  10. DW says

    I’m creating a sports networking site and would like it when a user selects their favorite teams, instead of showing a list of all members who also like a particular team, it instead links to a static page I have created specifically with information on the team?

  11. Avatar of Boone Gorges Boone Gorges says

    Hi DW –

    This shouldn’t be too difficult. There’ll be a couple steps. (This is a rough and untested outline, but if you know a bit of PHP it shouldn’t be too much trouble to implement)
    - First, set up an array (or multiple arrays) associating team names (to be identified in the profiles) with the URLs of the static pages. If you’re going to rely on users to type in team names themselves, you’ll want to allow for multiple permutations of a given team. For instance:
    $teamarray = Array(
    ["Chicago Bears"] => 'http://mysite.com/bears';
    ["Bears"] => 'http://mysite.com/bears';
    ["Chicago"] => 'http://mysite.com/bears';
    ["Green Bay"] => 'http://mysite.com/packers';
    )

    and so on. Do this before the line while ( strpos( $field_value, ']') ) {
    - Next, break up the action in the while loop so that the text between square brackets gets put into its own variable, such as $linktext (it’s not set up that way right now)
    - Then do something like this
    if ( array_key_exists( $teamarray, $linktext ) )
    $field_value = substr($field_value, 0, $open_delin_pos) . '<a href="' . $teamarray[$linktext] . substr($field_value, $open_delin_pos+1, $close_delin_pos - $open_delin_pos - 1) . '" rel="nofollow">' . substr($field_value, $open_delin_pos+1, $close_delin_pos - $open_delin_pos - 1) . '</a>' . substr($field_value, $close_delin_pos+1);

    Again, I haven’t tested this, but it should work with some minimal tweakage. Good luck.

  12. DW says

    I will try this out this weekend.

    Thank you Boone, I appreciate the help.

  13. aly says

    uhmm.what do i do when i try to change my layout but my customize profile is all blank;; nothing is there?

  14. Avatar of Boone Gorges Boone Gorges says

    Hi Aly,

    What do you mean by “change your layout”? Do you mean that you’re changing your theme? And exactly what is “all blank”: the edit profile page, the profile page, the fields on the profile page?

  15. Bernard says

    Hi Boone,

    First of all, thanks for the wonderful plugin. Love it very much.

    Question: Is it possible to hide the full URL-output? For example: If you fill in your twitter username the profile only shows your username and not the full URL. Especially with longer URL’s it makes my profile page look bad.

    Thanks in advance.

  16. Avatar of Boone Gorges Boone Gorges says

    Good idea, Bernard.

    I added the feature and did a quick test on BP 1.1 – seems to work just fine. (There is no longer the option to have the full URL display, but I figure that few people would want that anyway.) Download it from the trunk http://wordpress.org/extend/plugins/custom-profile-filters-for-buddypress/ and see if it works for you.

  17. Bernard says

    It works great. Thanks so much!

  18. Avatar of Boone Gorges Boone Gorges says

    Excellent! Glad I can help – and thanks for the feedback, Bernard!

  19. Bernard says

    Hi Boone,

    Another question: in Holland we use a social network site called Hyves with an URL like http://username.hyves.nl (username before site-URL). Is it possible to automate that link too? That users only have to fill in their username?

    I look forward to see your reply.

  20. member11 says

    Hi Boone,
    I may have missed the boat here, but how can I make a link from a standard url.
    I tried [http://www.mysite.com] inside a text field but it still took me to the members search.
    Hope you can help
    Cheers
    Paul

  21. Avatar of Boone Gorges Boone Gorges says

    Hi Paul,

    The URL all by itself should work: http://www.mysite.com. No brackets. It’s possible that URL detection will break if you’re using brackets elsewhere in the field, however (I can’t remember off the top of my head). Thus, if you just enter http://www.mysite.com it should link; if you enter “My website is http://www.mysite.com” it should link; but if you enter “My [website] is http://www.mysite.com“, only the word “website” will link.

    Let me know if you’re able to get it working.

    Boone

  22. member1 says

    Thanks Boone.
    Yes, full url does work. duh! It didn’t without your plugin, so I went straight into test the [square brackets] without trying the full url…

    FWIW, in the meantime I found an alternative fix as well:

    in the $social_networking_fields = array
    ‘Website URL’ =>’www.’ ,
    It works as long as the instructions clear in the field description about how to format the url. i.e. with [mydomain.com] and no http:// or www.

    I think the full url is better!

    Thanks for your help and a cool little plugin that opens up the profile field options in a very easy to manage way.

    Paul

  23. jez says

    just wanted to stop by and thank you for the plugin,
    it is really amazing and a time safer,

    thanks for sharing it with the bp and mu community!

  24. tom says

    I wasn’t able to get this to work, and it’s a shame since it’s exactly what I was looking for (I want rid of ALL links in profiles)

    Am I right in thinking after enabling the plugin, you can’t edit anything via the admin panel? You need to edit the php file in Dreamweaver?

    I never saw anything back-end, so edited the file, and here’s what I done:

    $no_link_fields = array( // Enter the field ID of any field that you want to appear as plain, non-clickable text. Don’t forget to separate with commas.

        ‘Gender ‘     ,
        ‘Phone’     ,
        ‘IM’       
       
        );

     

    However after uploading the file again, there was no changes on the ‘Gener’ section on user profiles.

    I’m using 1.1.3/ 2.8.6

    Any help would be great, otherwise I guess I’ll just need to put up with the links :)

  25. Avatar of Boone Gorges Boone Gorges says

    tom – I’m not sure why it’s not working. Is it possible that the field names should have trailing spaces? (eg ‘Gender ‘ instead of ‘Gender’)

    You’re correct that there is currently no administrative panel. All configuration must be done in the PHP file. At some point I’ll add Dashboard options for changing the settings, but I’m kind of waiting for the backend of BuddyPress to be rebuilt somewhat to make it easier.

    If you want to turn off linking in ALL fields, then there might be a better way than my plugin. See this thread: http://buddypress.org/forums/topic/remove-automatic-links-in-profile#post-32749 See my message about the remove_filter code? That’s what you need. 

  26. tom says

    Sorry not sure what you mean with trailing spaces, but just looked at your other link, and tried adding:

    remove_filter( 'bp_get_the_profile_field_value',
    'xprofile_filter_link_profile_data', 2 );

    to bp-custom.php but it’s not removed any linking fields. Do I need to chance the number 2, and add the ID of each profile field I wish to remove the link from? If so- How do I find the ID in number form? I can’t see those anywhere.

  27. Avatar of Boone Gorges Boone Gorges says

    Hi Tom. The 2 at the end of the remove_filter code is the priority argument. It shouldn’t have anything to do with the field ids.

    Try the following code in bp-custom.php:

    <?php

    function remove_xprofile_links() {
    remove_filter( ‘bp_get_the_profile_field_value‘, ‘xprofile_filter_link_profile_data’, 2, 2 );
    }
    add_action( ‘plugins_loaded’, ‘remove_xprofile_links’ );
    ?>

  28. tom says

    Oh right I see.

    OK Just tried that option also, but never worked.

  29. tom says

    Aha.. got it. I think maybe what you posted displayed incorrectly due to not wrapping the code in tags (Hopefully this will post correctly):

    function remove_xprofile_links() {
    remove_filter(“bp_get_the_profile_field_value”,”xprofile_filter_link_profile_data”, 2 );
    }
    add_action( “plugins_loaded”, “remove_xprofile_links” );

    ..Of course.. post it inside php tags. All working fine & dandy now thank you very much for your help :)

  30. Avatar of Boone Gorges Boone Gorges says

    Excellent! So glad to hear it worked, Tom.

  31. James says

    Hey, awsome script. However i’m having a slight issue.

    I’ve installed the plugin and added the custom fields but am left with this – http://www.obs-gsw.co.uk/members/admin/profile/ – is there anyway to completely remove the links on custom fields?

  32. Avatar of Boone Gorges Boone Gorges says

    Hi James. Sure, you can make any profile field non-linked by adding its name to $no_link_fields around line 14. Users can remove links from a given profile field by adding some brackets: eg “[]Intel Q6700″.

    I see you’re using BP 1.2 – and I can’t guarantee that the plugin will work perfectly for 1.2 just yet. I’ll be updating within the next week.

  33. James says

    Yeah I’ve listed the custom profile fields already and it removes the underline but keeps the link active. Might be a bug with 1.2 possibly?

  34. James says

    Right, the [] works but just entering the custom field name into $no_link_fields doesn’t work, it keeps the link active. Hope this helps you with your update :o)

  35. Avatar of Boone Gorges Boone Gorges says

    It’s almost certainly due to a difference in the way 1.2 handles profile fields. More to come soon. Thanks for your patience, James.

  36. Gene53 says

    Oops, doesn’t seem to work with a standard WP install. I uploaded and activated it and there’s no options page.

  37. Gene53 says

    Sorry Boone, didn’t read the instructions right (changing the parameters in the PHP file) and got it working.

    Thanks,
    Gene

  38. Robin Hale says

    Boone,
    Thanks for this is a great help, but just to let you know, I too could not get the plugin working (version 0.3.1 downloaded from WP).
    I’m using BP1.1.2 WPMU2.8.6
    I clicked on your download link for version 02.zip above which incorporates the functions and plugin in one file and it worked fine.

    Thanks

    Robin

  39. Avatar of Boone Gorges Boone Gorges says

    Hi Robin,

    If you’re running version BP 1.1.x, you’ll have to make a modification to the plugin in order for it to load. In the main plugin file (custom-profile-filters-for-buddypress.php) looks for the lines that look like this:

    function custom_profile_filters_for_buddypress_init() {
    require( dirname( __FILE__ ) . '/custom-profile-filters-for-buddypress-bp-functions.php' );
    }
    add_action( 'bp_init', 'custom_profile_filters_for_buddypress_init' );

    Remove the first, third and fourth lines, so that only this remains:

    require( dirname( __FILE__ ) . '/custom-profile-filters-for-buddypress-bp-functions.php' );

    That should do the trick.

  40. Robin Hale says

    Boone, thanks for that.
    Now I have it working I don’t like to touch stuff, and I know that when I finally upgrade from 1.1.2 to 1.2 its going to be real work with a lot of my plugins.
    The developers on Buddypress are just awesome, perhaps too awesome as its difficult to keep up…never mind good problem to have. Keep up the good work and thanks again for the quick response.

  41. Øyvind says

    Hi Boone, thanks for this great plugin. I’ve used it to filter an URL-link to an image and convert it to a img src tag so the image is displayed on the public profile. Awesome.

    I am trying to figure out how to in the best way allow the user to upload an image to my server (a logo) in the ‘edit profile’. Could your plugin be used on the edit-side as well you think? So I can display a form where the can upload the image. Or display a button with link to the Media function on my blog. (If I let them use it)

  42. Avatar of Boone Gorges Boone Gorges says

    Hi Oyvind – Glad it’s helpful to you!

    I don’t think this plugin has what you need to do what you’re looking to do. I take it that you’d like to have logos *in addition to* avatars (if logos are to take the place of avatars, wouldn’t you just change the word ‘avatar’ to ‘logo’?) I haven’t heard of anyone adding file uploads to the profile page, but I assume it could be done: try hooking a custom field to bp_custom_profile_edit_fields to create the upload field, and then grabbing the $_FILES global when xprofile_screen_edit_profile is called and saving the file somewhere. (You’ll also have to make sure that an enctype is given to the form tag on the profile edit page.) You might have a look at http://wordpress.org/extend/plugins/forum-attachments-for-buddypress/ to see the kinds of mechanism required to save files in a BP plugin.

    (I wish there was an easier answer – that BP or even WP had a ready-made API for uploading files. Sadly, that’s not yet the case!)

    You could also create a link to the Media function on your blog, as you suggest, but there are a few hurdles: 1) You’ll want to use a custom role plugin (like http://wordpress.org/extend/plugins/members/) that allows you to give upload_file rights to Subscribers; 2) When files are uploaded through the WP Add Media panel, they are named/sorted by date and not type, which means that users would have to copy and paste the URL into a custom field that you create on the profile pages. At that point, you could use my plugin in order to show images rather than links whenever it encounters a profile field called “Logo”.

    Sorry for the longwindedness – good luck!

  43. carl says

    Hey boone! kickass plugin! =)
    Im googling around for youtube video embeds in custom profile fields and it brought me here!
    its so annoying, i have Youtube embeds working on activity stream just from normal yt links, but whatever i try for profile fields fail.
    Do you know a way of doing this with your plugin?

  44. Avatar of Boone Gorges Boone Gorges says

    Hi Carl – I don’t know of a super easy way to embed YouTube into *profiles*, but I do know that more generally you could use oEmbed to make YouTube links turn into embedded objects within BuddyPress. Check out http://wordpress.org/extend/plugins/oembed-for-buddypress/ and see what you can come up with.

  45. carl says

    thanks for quick reply! i’m on it! =)

  46. Flo says

    I have tried to use the buddypress adminbar (of my buddypress page) outside the BP/WP in a normal php/html page. it seems that it loads the bar but it don´t show up. Just wanted to ask if this is possible?

  47. Dean says

    I think this plugin is just what I need. I have 2 sites, and one needs the member profile to have a link to the second sites member profile. I plan to put an extra field in the first sites user profile (using xProfiles ACL), asking for the user name of the second site. Clicking on this, will then take the viewer to the the profile on the second site (don’t ask why, it’s complicated!) Not knowing much PHP, how would I do this? Thanks in advance.

  48. Avatar of Boone Gorges Boone Gorges says

    Dean – If the new fields you created are WP profile fields (the kind you fill out on your Dashboard profile) as opposed to BP xprofile fields (the kind you fill out from Edit Profile on the front end) then I’m afraid this plugin won’t help you much.

    If you are indeed using a BP field for this purpose, you can use the plugin as a kind of template for what you want to do. Essentially, you will take the function cpfb_add_social_networking_links() and rewrite it so that it checks to see whether $bp_this_field_name matches the name of your added profile field, and if so, then rewrite the content of the profile field to be a link.

    Good luck!

  49. Andrew Whittaker says

    Hi Boone, this is a great Plugin. I have a directory site in the UK with various counties on the homepage. Is there any way of adapting the code from Custom Profile Filters to pickup words on the homepage? That way when someone clicks London they will be directed London profiles.

    Any help is appreciated.

    Andy

  50. CJ says

    HI, I deactivated the plugin but the links stayed. Is there a way to remove those links now?

  51. lindsay says

    This is absolutely GREAT!!! Thank you so much for the hard work on such a wonderful plugin!

  52. Crispin says

    Hi Boone – Another happy chappy user here :) I have removed all the links I want by coding ‘custom-profile-filters-for-buddypress.php’

    However, can you suggest a way to make the email address ‘clickable” as a mailto link? (eg, name@domain.com is clickable – but does not go to the members’ directory, it creates a new email message using the mailto protocol)

    (Maybe it’s not possible? Your profile still links your email to your members’ directory…)



Some HTML is OK

or, reply to this post via trackback.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image

Additional comments powered by BackType



css.php