hide profile fields only for certain fields
-
Hi there,
I use both BP 2.0.1 and the BP custom fields type plugin and i got the the links removed with:
function remove_xprofile_links() { remove_filter( 'bp_get_the_profile_field_value', 'xprofile_filter_link_profile_data', 9, 2 ); } add_action('bp_setup_globals', 'remove_xprofile_links');
I was wondering if you could use this to only hide the links from certain profile fields, like only for profile field 2, 6 & 7 ?
https://wordpress.org/plugins/buddypress-xprofile-custom-fields-type/
-
Hi,
I believe the only way to do this is rewrite the function responsible of create buddypress links, you need to use the following code and delete the previous:
/** * This is the custom filter to create links */ function my_xprofile_filter_link_profile_data( $field_value, $field_type = 'textbox' ) { // Access the field you are going to display value. global $field; // In this array you write the ids of the fields you want to hide the link. $excluded_field_ids = array(2,6,7); // If the id of this $field is in the array, we return the value only and not the link. if (in_array($field->id, $excluded_field_ids)) return $field_value; if ( 'datebox' == $field_type ) return $field_value; if ( !strpos( $field_value, ',' ) && ( count( explode( ' ', $field_value ) ) > 5 ) ) return $field_value; $values = explode( ',', $field_value ); if ( !empty( $values ) ) { foreach ( (array) $values as $value ) { $value = trim( $value ); // If the value is a URL, skip it and just make it clickable. if ( preg_match( '@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', $value ) ) { $new_values[] = make_clickable( $value ); // Is not clickable } else { // More than 5 spaces if ( count( explode( ' ', $value ) ) > 5 ) { $new_values[] = $value; // Less than 5 spaces } else { $search_url = add_query_arg( array( 's' => urlencode( $value ) ), bp_get_members_directory_permalink() ); $new_values[] = '<a href="' . $search_url . '" rel="nofollow">' . $value . '</a>'; } } } $values = implode( ', ', $new_values ); } return $values; } /** * We remove the buddypress filter and add our custom filter. */ function remove_xprofile_links() { // Remove the old filter. remove_filter( 'bp_get_the_profile_field_value', 'xprofile_filter_link_profile_data', 9, 2 ); // Add your custom filter. add_filter( 'bp_get_the_profile_field_value', 'my_xprofile_filter_link_profile_data', 9, 2); } add_action('bp_setup_globals', 'remove_xprofile_links');
Try it and get in touch if this does not work.
Hi man! sorry for the late response, i just tested your code and it works perfect! awesome 🙂
Any chance of a rewrite of this … To remove or hide the “HOME” link in BuddyPress Group?
And some help in where to add this what file between what lined?
Thanks Good Friendly PeopleHi, this code has nothing to do with what you want to achieve…
It would be really cool if the
$excluded_field_ids
array could be populated by the admin via a the plugins settings page with checkboxes like:
Select which fields you do not want to be linked.
Available fields:
[ ] Field 1
[x] Field 2
[ ] Field 3
[x] Field 4
[x] Field 5[SUBMIT]
would trigger your new function above with:
$excluded_field_ids = array(2,4,5);
I think a lot of people would find this type of flexibility useful.
Thoughts?
You can request this feature to buddypress team, maybe they consider it for next updates.
Thanks for this code @donmik. I just had to adjust it a little bit to work for me (see filters at the end)
/* ------------------------------------------------------------------------- * * Removing specific field links automatically created in a BP member’s profile https://wordpress.org/support/topic/hide-profile-fields-only-for-certain-fields#post-5667106 /* ------------------------------------------------------------------------- */ /** * This is the custom filter to create links */ function my_xprofile_filter_link_profile_data( $field_value, $field_type = 'textbox' ) { // Access the field you are going to display value. global $field; // In this array you write the ids of the fields you want to hide the link. $excluded_field_ids = array(1,264,265,268); // If the id of this $field is in the array, we return the value only and not the link. if (in_array($field->id, $excluded_field_ids)) return $field_value; if ( 'datebox' == $field_type ) return $field_value; if ( !strpos( $field_value, ',' ) && ( count( explode( ' ', $field_value ) ) > 5 ) ) return $field_value; $values = explode( ',', $field_value ); if ( !empty( $values ) ) { foreach ( (array) $values as $value ) { $value = trim( $value ); // If the value is a URL, skip it and just make it clickable. if ( preg_match( '@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', $value ) ) { $new_values[] = make_clickable( $value ); // Is not clickable } else { // More than 5 spaces if ( count( explode( ' ', $value ) ) > 5 ) { $new_values[] = $value; // Less than 5 spaces } else { $search_url = add_query_arg( array( 's' => urlencode( $value ) ), bp_get_members_directory_permalink() ); $new_values[] = '<a href="' . $search_url . '" rel="nofollow">' . $value . '</a>'; } } } $values = implode( ', ', $new_values ); } return $values; } /** * We remove the buddypress filter and add our custom filter. */ function remove_xprofile_links() { remove_filter( 'bp_get_the_profile_field_value', 'xprofile_filter_link_profile_data', 9, 2 ); } add_action('bp_setup_globals', 'remove_xprofile_links'); // Add your custom filter. add_filter( 'bp_get_the_profile_field_value', 'my_xprofile_filter_link_profile_data', 9, 2);
- The topic ‘hide profile fields only for certain fields’ is closed to new replies.