Advertisement
vapvarun

WBCOM BuddyPress Member Type Custom Fields Extension

Jul 16th, 2025
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.73 KB | Source Code | 0 0
  1.  
  2. /**
  3.  * Add custom fields to BuddyPress Member Type taxonomy labels
  4.  *
  5.  * This function extends the existing member type labels to include
  6.  * our custom fields for Badge Color and Icon.
  7.  *
  8.  * @since 1.0.0
  9.  * @param array $fields Array of existing member type fields
  10.  * @return array Modified array with custom fields added
  11.  */
  12. function wbcom_bp_add_member_type_custom_fields( $fields ) {
  13.     $fields['bp_member_type_badge_color'] = _x( 'Badge Color', 'BP Member type badge color label', 'wbcom-member-type-extension' );
  14.     $fields['bp_member_type_icon'] = _x( 'Icon', 'BP Member type icon label', 'wbcom-member-type-extension' );
  15.    
  16.     return $fields;
  17. }
  18. add_filter( 'bp_get_member_type_tax_labels', 'wbcom_bp_add_member_type_custom_fields' );
  19.  
  20. /**
  21.  * Add custom fields to BuddyPress Member Type metadata schema
  22.  *
  23.  * This function registers our custom fields in the BuddyPress metadata schema
  24.  * so they are properly handled by the BuddyPress type system.
  25.  *
  26.  * @since 1.0.0
  27.  * @param array  $schema   The existing metadata schema
  28.  * @param string $taxonomy The taxonomy name being processed
  29.  * @return array Modified schema with custom fields added
  30.  */
  31. function wbcom_bp_add_member_type_metadata_schema( $schema = array(), $taxonomy = '' ) {
  32.     if ( bp_get_member_type_tax_name() === $taxonomy ) {
  33.        
  34.         // Badge Color field schema
  35.         $schema['bp_member_type_badge_color'] = array(
  36.             'description'       => __( 'Choose a color for member type badges.', 'wbcom-member-type-extension' ),
  37.             'type'              => 'string',
  38.             'single'            => true,
  39.             'sanitize_callback' => 'sanitize_hex_color',
  40.         );
  41.  
  42.         // Icon field schema
  43.         $schema['bp_member_type_icon'] = array(
  44.             'description'       => __( 'Icon class (e.g., fa-user) or image URL.', 'wbcom-member-type-extension' ),
  45.             'type'              => 'string',
  46.             'single'            => true,
  47.             'sanitize_callback' => 'sanitize_text_field',
  48.         );
  49.     }
  50.  
  51.     return $schema;
  52. }
  53. add_filter( 'bp_get_type_metadata_schema', 'wbcom_bp_add_member_type_metadata_schema', 10, 2 );
  54.  
  55. /**
  56.  * Add custom fields to the member type add form
  57.  *
  58.  * This function adds our custom fields to the "Add New Member Type" form
  59.  * in the WordPress admin area.
  60.  *
  61.  * @since 1.0.0
  62.  * @param string $taxonomy The taxonomy name
  63.  */
  64. function wbcom_bp_member_type_add_form_custom_fields( $taxonomy ) {
  65.     ?>
  66.     <div class="form-field">
  67.         <label for="bp_member_type_badge_color"><?php _e( 'Badge Color', 'wbcom-member-type-extension' ); ?></label>
  68.         <input type="color" id="bp_member_type_badge_color" name="bp_member_type_badge_color" value="" />
  69.         <p class="description"><?php _e( 'Choose a color for member type badges.', 'wbcom-member-type-extension' ); ?></p>
  70.     </div>
  71.    
  72.     <div class="form-field">
  73.         <label for="bp_member_type_icon"><?php _e( 'Icon', 'wbcom-member-type-extension' ); ?></label>
  74.         <input type="text" id="bp_member_type_icon" name="bp_member_type_icon" value="" class="regular-text" />
  75.         <p class="description"><?php _e( 'Icon class (e.g., fa-user) or image URL.', 'wbcom-member-type-extension' ); ?></p>
  76.     </div>
  77.     <?php
  78. }
  79. add_action( 'bp_member_type_add_form_fields', 'wbcom_bp_member_type_add_form_custom_fields', 999 );
  80.  
  81. /**
  82.  * Add custom fields to the member type edit form
  83.  *
  84.  * This function adds our custom fields to the "Edit Member Type" form
  85.  * in the WordPress admin area, pre-populated with existing values.
  86.  *
  87.  * @since 1.0.0
  88.  * @param WP_Term $term The member type term object being edited
  89.  */
  90. function wbcom_bp_member_type_edit_form_custom_fields( $term ) {
  91.     $badge_color = get_term_meta( $term->term_id, 'bp_member_type_badge_color', true );
  92.     $icon = get_term_meta( $term->term_id, 'bp_member_type_icon', true );
  93.     ?>
  94.     <tr class="form-field">
  95.         <th scope="row">
  96.             <label for="bp_member_type_badge_color"><?php _e( 'Badge Color', 'wbcom-member-type-extension' ); ?></label>
  97.         </th>
  98.         <td>
  99.             <input type="color" id="bp_member_type_badge_color" name="bp_member_type_badge_color" value="<?php echo esc_attr( $badge_color ); ?>" />
  100.             <p class="description"><?php _e( 'Choose a color for member type badges.', 'wbcom-member-type-extension' ); ?></p>
  101.         </td>
  102.     </tr>
  103.    
  104.     <tr class="form-field">
  105.         <th scope="row">
  106.             <label for="bp_member_type_icon"><?php _e( 'Icon', 'wbcom-member-type-extension' ); ?></label>
  107.         </th>
  108.         <td>
  109.             <input type="text" id="bp_member_type_icon" name="bp_member_type_icon" value="<?php echo esc_attr( $icon ); ?>" class="regular-text" />
  110.             <p class="description"><?php _e( 'Icon class (e.g., fa-user) or image URL.', 'wbcom-member-type-extension' ); ?></p>
  111.         </td>
  112.     </tr>
  113.     <?php
  114. }
  115. add_action( 'bp_member_type_edit_form_fields', 'wbcom_bp_member_type_edit_form_custom_fields', 999 );
  116.  
  117. /**
  118.  * Save custom fields when member type is created
  119.  *
  120.  * This function saves our custom field values when a new member type
  121.  * is created in the WordPress admin area.
  122.  *
  123.  * @since 1.0.0
  124.  * @param array $result Array containing information about the newly created term
  125.  */
  126. function wbcom_bp_member_type_save_custom_fields( $result ) {
  127.     // Save Badge Color if provided
  128.     if ( isset( $_POST['bp_member_type_badge_color'] ) && ! empty( $_POST['bp_member_type_badge_color'] ) ) {
  129.         add_term_meta( $result['term_id'], 'bp_member_type_badge_color', sanitize_hex_color( $_POST['bp_member_type_badge_color'] ), true );
  130.     }
  131.    
  132.     // Save Icon if provided
  133.     if ( isset( $_POST['bp_member_type_icon'] ) && ! empty( $_POST['bp_member_type_icon'] ) ) {
  134.         add_term_meta( $result['term_id'], 'bp_member_type_icon', sanitize_text_field( $_POST['bp_member_type_icon'] ), true );
  135.     }
  136. }
  137. add_action( 'bp_type_inserted', 'wbcom_bp_member_type_save_custom_fields', 999 );
  138.  
  139. /**
  140.  * Update custom fields when member type is updated
  141.  *
  142.  * This function updates our custom field values when an existing member type
  143.  * is modified in the WordPress admin area.
  144.  *
  145.  * @since 1.0.0
  146.  * @param int $term_id The term ID of the member type being updated
  147.  * @param int $tt_id   The term taxonomy ID
  148.  */
  149. function wbcom_bp_member_type_update_custom_fields( $term_id, $tt_id ) {
  150.     // Update Badge Color
  151.     if ( isset( $_POST['bp_member_type_badge_color'] ) ) {
  152.         if ( ! empty( $_POST['bp_member_type_badge_color'] ) ) {
  153.             update_term_meta( $term_id, 'bp_member_type_badge_color', sanitize_hex_color( $_POST['bp_member_type_badge_color'] ) );
  154.         } else {
  155.             delete_term_meta( $term_id, 'bp_member_type_badge_color' );
  156.         }
  157.     }
  158.    
  159.     // Update Icon
  160.     if ( isset( $_POST['bp_member_type_icon'] ) ) {
  161.         if ( ! empty( $_POST['bp_member_type_icon'] ) ) {
  162.             update_term_meta( $term_id, 'bp_member_type_icon', sanitize_text_field( $_POST['bp_member_type_icon'] ) );
  163.         } else {
  164.             delete_term_meta( $term_id, 'bp_member_type_icon' );
  165.         }
  166.     }
  167. }
  168. add_action( 'bp_type_updated', 'wbcom_bp_member_type_update_custom_fields', 999, 2 );
  169.  
  170. /**
  171.  * Helper function to get member type custom meta
  172.  *
  173.  * This utility function retrieves custom metadata for a specific member type.
  174.  * It's used by other functions to get badge color and icon values.
  175.  *
  176.  * @since 1.0.0
  177.  * @param string $member_type The member type name/slug
  178.  * @param string $meta_key    The metadata key to retrieve
  179.  * @param mixed  $default     Default value to return if meta not found
  180.  * @return mixed The metadata value or default value
  181.  */
  182. function wbcom_bp_get_member_type_custom_meta( $member_type, $meta_key, $default = '' ) {
  183.     // Check if BuddyPress member types are available
  184.     if ( ! function_exists( 'bp_get_member_type_tax_name' ) ) {
  185.         return $default;
  186.     }
  187.    
  188.     // Get the term object for this member type
  189.     $term = get_term_by( 'name', $member_type, bp_get_member_type_tax_name() );
  190.    
  191.     if ( ! $term ) {
  192.         return $default;
  193.     }
  194.  
  195.     // Get the metadata value
  196.     $meta_value = get_term_meta( $term->term_id, $meta_key, true );
  197.    
  198.     return ! empty( $meta_value ) ? $meta_value : $default;
  199. }
  200.  
  201. /**
  202.  * Display member type badge in member header
  203.  *
  204.  * This function displays a styled badge showing the member's type(s)
  205.  * with custom color and icon if configured. It appears in the member
  206.  * header section on BuddyPress member profiles.
  207.  *
  208.  * @since 1.0.0
  209.  */
  210. function wbcom_bp_display_member_type_badge() {
  211.     // Only display on individual member profiles
  212.     if ( ! function_exists( 'bp_is_user' ) || ! bp_is_user() ) {
  213.         return;
  214.     }
  215.    
  216.     // Get the member types for the displayed user
  217.     $member_types = bp_get_member_type( bp_displayed_user_id(), false );
  218.    
  219.     if ( empty( $member_types ) ) {
  220.         return;
  221.     }
  222.  
  223.     // Loop through each member type and display badge
  224.     foreach ( $member_types as $member_type ) {
  225.         $badge_color = wbcom_bp_get_member_type_custom_meta( $member_type, 'bp_member_type_badge_color' );
  226.         $icon = wbcom_bp_get_member_type_custom_meta( $member_type, 'bp_member_type_icon' );
  227.        
  228.         // Only display badge if we have color or icon
  229.         if ( $badge_color || $icon ) {
  230.             $background_color = $badge_color ? $badge_color : '#0073aa';
  231.            
  232.             echo '<div class="wbcom-member-type-badge" style="background-color: ' . esc_attr( $background_color ) . '; color: white; padding: 5px 10px; margin: 5px 0; border-radius: 3px; display: inline-block; font-size: 12px;">';
  233.            
  234.             // Display icon if available
  235.             if ( $icon ) {
  236.                 if ( filter_var( $icon, FILTER_VALIDATE_URL ) ) {
  237.                     // If icon is a URL, display as image
  238.                     echo '<img src="' . esc_url( $icon ) . '" alt="' . esc_attr( $member_type ) . '" style="width: 16px; height: 16px; margin-right: 5px; vertical-align: middle;" />';
  239.                 } else {
  240.                     // If icon is a CSS class, display as icon
  241.                     echo '<i class="' . esc_attr( $icon ) . '" style="margin-right: 5px;"></i>';
  242.                 }
  243.             }
  244.            
  245.             // Display member type name
  246.             echo '<span>' . esc_html( $member_type ) . '</span>';
  247.             echo '</div>';
  248.         }
  249.     }
  250. }
  251. add_action( 'bp_member_header_meta', 'wbcom_bp_display_member_type_badge' );
  252.  
  253. /**
  254.  * Add CSS styles for member type badges
  255.  *
  256.  * This function adds basic CSS styling for the member type badges
  257.  * to ensure they display properly across different themes.
  258.  *
  259.  * @since 1.0.0
  260.  */
  261. function wbcom_bp_member_type_badge_styles() {
  262.     if ( ! bp_is_user() ) {
  263.         return;
  264.     }
  265.     ?>
  266.     <style type="text/css">
  267.         .wbcom-member-type-badge {
  268.             display: inline-block;
  269.             padding: 5px 10px;
  270.             margin: 5px 5px 5px 0;
  271.             border-radius: 3px;
  272.             font-size: 12px;
  273.             font-weight: 500;
  274.             text-transform: uppercase;
  275.             letter-spacing: 0.5px;
  276.             box-shadow: 0 1px 3px rgba(0,0,0,0.1);
  277.             transition: all 0.3s ease;
  278.         }
  279.        
  280.         .wbcom-member-type-badge:hover {
  281.             transform: translateY(-1px);
  282.             box-shadow: 0 2px 6px rgba(0,0,0,0.15);
  283.         }
  284.        
  285.         .wbcom-member-type-badge i {
  286.             margin-right: 5px;
  287.             vertical-align: middle;
  288.         }
  289.        
  290.         .wbcom-member-type-badge img {
  291.             width: 16px;
  292.             height: 16px;
  293.             margin-right: 5px;
  294.             vertical-align: middle;
  295.         }
  296.     </style>
  297.     <?php
  298. }
  299. add_action( 'wp_head', 'wbcom_bp_member_type_badge_styles' );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement