/** * Add custom fields to BuddyPress Member Type taxonomy labels * * This function extends the existing member type labels to include * our custom fields for Badge Color and Icon. * * @since 1.0.0 * @param array $fields Array of existing member type fields * @return array Modified array with custom fields added */ function wbcom_bp_add_member_type_custom_fields( $fields ) { $fields['bp_member_type_badge_color'] = _x( 'Badge Color', 'BP Member type badge color label', 'wbcom-member-type-extension' ); $fields['bp_member_type_icon'] = _x( 'Icon', 'BP Member type icon label', 'wbcom-member-type-extension' ); return $fields; } add_filter( 'bp_get_member_type_tax_labels', 'wbcom_bp_add_member_type_custom_fields' ); /** * Add custom fields to BuddyPress Member Type metadata schema * * This function registers our custom fields in the BuddyPress metadata schema * so they are properly handled by the BuddyPress type system. * * @since 1.0.0 * @param array $schema The existing metadata schema * @param string $taxonomy The taxonomy name being processed * @return array Modified schema with custom fields added */ function wbcom_bp_add_member_type_metadata_schema( $schema = array(), $taxonomy = '' ) { if ( bp_get_member_type_tax_name() === $taxonomy ) { // Badge Color field schema $schema['bp_member_type_badge_color'] = array( 'description' => __( 'Choose a color for member type badges.', 'wbcom-member-type-extension' ), 'type' => 'string', 'single' => true, 'sanitize_callback' => 'sanitize_hex_color', ); // Icon field schema $schema['bp_member_type_icon'] = array( 'description' => __( 'Icon class (e.g., fa-user) or image URL.', 'wbcom-member-type-extension' ), 'type' => 'string', 'single' => true, 'sanitize_callback' => 'sanitize_text_field', ); } return $schema; } add_filter( 'bp_get_type_metadata_schema', 'wbcom_bp_add_member_type_metadata_schema', 10, 2 ); /** * Add custom fields to the member type add form * * This function adds our custom fields to the "Add New Member Type" form * in the WordPress admin area. * * @since 1.0.0 * @param string $taxonomy The taxonomy name */ function wbcom_bp_member_type_add_form_custom_fields( $taxonomy ) { ?>

term_id, 'bp_member_type_badge_color', true ); $icon = get_term_meta( $term->term_id, 'bp_member_type_icon', true ); ?>

term_id, $meta_key, true ); return ! empty( $meta_value ) ? $meta_value : $default; } /** * Display member type badge in member header * * This function displays a styled badge showing the member's type(s) * with custom color and icon if configured. It appears in the member * header section on BuddyPress member profiles. * * @since 1.0.0 */ function wbcom_bp_display_member_type_badge() { // Only display on individual member profiles if ( ! function_exists( 'bp_is_user' ) || ! bp_is_user() ) { return; } // Get the member types for the displayed user $member_types = bp_get_member_type( bp_displayed_user_id(), false ); if ( empty( $member_types ) ) { return; } // Loop through each member type and display badge foreach ( $member_types as $member_type ) { $badge_color = wbcom_bp_get_member_type_custom_meta( $member_type, 'bp_member_type_badge_color' ); $icon = wbcom_bp_get_member_type_custom_meta( $member_type, 'bp_member_type_icon' ); // Only display badge if we have color or icon if ( $badge_color || $icon ) { $background_color = $badge_color ? $badge_color : '#0073aa'; echo '
'; // Display icon if available if ( $icon ) { if ( filter_var( $icon, FILTER_VALIDATE_URL ) ) { // If icon is a URL, display as image echo '' . esc_attr( $member_type ) . ''; } else { // If icon is a CSS class, display as icon echo ''; } } // Display member type name echo '' . esc_html( $member_type ) . ''; echo '
'; } } } add_action( 'bp_member_header_meta', 'wbcom_bp_display_member_type_badge' ); /** * Add CSS styles for member type badges * * This function adds basic CSS styling for the member type badges * to ensure they display properly across different themes. * * @since 1.0.0 */ function wbcom_bp_member_type_badge_styles() { if ( ! bp_is_user() ) { return; } ?>