[buddypress-trac] [BuddyPress Trac] #6667: Please add filter to bp_field_has_data

buddypress-trac noreply at wordpress.org
Fri Oct 16 06:40:59 UTC 2015


#6667: Please add filter to bp_field_has_data
----------------------------------+-----------------------------
 Reporter:  nightbook             |      Owner:
     Type:  enhancement           |     Status:  new
 Priority:  normal                |  Milestone:  Awaiting Review
Component:  Component - XProfile  |    Version:  2.3.3
 Severity:  normal                |   Keywords:
----------------------------------+-----------------------------
 Hello,

 I would like a filter applied to the bp_field_has_data function to allow
 overriding the boolean return, this would allow me to more easily tie in a
 plugin I'm working on to provide global fields across all profiles that is
 editable only by the admin.

 Existing bp_field_has_data Function below simply returns the
 field_has_data property of the $profile_template global.
 {{{
 function bp_field_has_data() {
         global $profile_template;
         return $profile_template->field_has_data;
 }
 }}}
 *Found on Line 438 in bp-xprofile/bp-xprofile-template.php :
 https://github.com/buddypress/BuddyPress/blob/0b97ae6bb5bf027d2e2573b9b6ab99058a0e6eca/src
 /bp-xprofile/bp-xprofile-template.php#L438

 It's currently only utilized in the profile-loop for conditionally
 including the fields if they have information.
 {{{
 <?php if ( bp_field_has_data() ) : ?>
 }}}
 Link to code -
 https://github.com/buddypress/BuddyPress/blob/4763945472ecb534dad1d84eb5b91482760d82f3/src
 /bp-templates/bp-legacy/buddypress/members/single/profile/profile-
 loop.php#L31


 By introducing a filter I'll be able to display Fields which have no user
 inputted information and rather pull a global value from some custom
 xprofile_meta I've associated with the field.
 Plugin URL - https://github.com/nightbook/buddypress-admin-global-profile-
 fields

 Proposed Code Change for the bp_field_has_data function;
 {{{
 function bp_field_has_data() {
         global $profile_template;
         /**
          * Filters the profile field value.
          *
          * @since 1.0.0
          *
          * @param boolean $field_has_data Toggle to indicate field should
 be displayed.
          * @param global $profile_template  The profile template.
          * @param object    $field    The profile field.
          * @param int    $field_id    The id of the profile field.
          */
          return apply_filters( 'bp_profile_field_has_data',
 $profile_template->field_has_data, $profile_template,
 $profile_template->field, $profile_template->field->id );
 }
 }}}
 *May only need to pass $field_has_data and $profile_template as it gives
 access to others.

 With this filter available along with the bp_get_the_profile_field_value
 filter that already exists I'd be able to easily complete implementation.
 Sample of how I would use the proposed filter.
 {{{
 add_filter( 'bp_profile_field_has_data', array($this,
 'display_global_fields'), 10, 4);
 function display_global_fields( $field_has_data, $profile_template,
 $field, $field_id ) {
         if ( $field->visibility_level == 'global' ) {
                 $global_field_value = bp_xprofile_get_meta( $field->id,
 'field', 'global_value' );
                 if ( ! empty( $global_field_value ) || ( '0' ===
 $global_field_value ) ) {
                         return true;
                 }
         }
         return $field_has_data;
 }
 }}}

 Other uses would be disabling fields with specific values such as a Not
 Applicable option/value in a dropdown type. Or showing empty fields and
 replacing with Information not Provided text.

 Much appreciated,
 Cheers

--
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/6667>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac


More information about the buddypress-trac mailing list