vapvarun icon

WBCOM BuddyPress Member Type Custom Fields Extension

vapvarun | PRO | 07/16/25 06:59:07 AM UTC | 0 ⭐ | 10128 👁️ | Never ⏰ | []
PHP |

11.73 KB

|

Source Code

|

0 👍

/

0 👎

 
/**
 * 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 ) {
    ?>
    <div class="form-field">
        <label for="bp_member_type_badge_color"><?php _e( 'Badge Color', 'wbcom-member-type-extension' ); ?></label>
        <input type="color" id="bp_member_type_badge_color" name="bp_member_type_badge_color" value="" />
        <p class="description"><?php _e( 'Choose a color for member type badges.', 'wbcom-member-type-extension' ); ?></p>
    </div>
    
    <div class="form-field">
        <label for="bp_member_type_icon"><?php _e( 'Icon', 'wbcom-member-type-extension' ); ?></label>
        <input type="text" id="bp_member_type_icon" name="bp_member_type_icon" value="" class="regular-text" />
        <p class="description"><?php _e( 'Icon class (e.g., fa-user) or image URL.', 'wbcom-member-type-extension' ); ?></p>
    </div>
    <?php
}
add_action( 'bp_member_type_add_form_fields', 'wbcom_bp_member_type_add_form_custom_fields', 999 );
 
/**
 * Add custom fields to the member type edit form
 * 
 * This function adds our custom fields to the "Edit Member Type" form
 * in the WordPress admin area, pre-populated with existing values.
 *
 * @since 1.0.0
 * @param WP_Term $term The member type term object being edited
 */
function wbcom_bp_member_type_edit_form_custom_fields( $term ) {
    $badge_color = get_term_meta( $term->term_id, 'bp_member_type_badge_color', true );
    $icon = get_term_meta( $term->term_id, 'bp_member_type_icon', true );
    ?>
    <tr class="form-field">
        <th scope="row">
            <label for="bp_member_type_badge_color"><?php _e( 'Badge Color', 'wbcom-member-type-extension' ); ?></label>
        </th>
        <td>
            <input type="color" id="bp_member_type_badge_color" name="bp_member_type_badge_color" value="<?php echo esc_attr( $badge_color ); ?>" />
            <p class="description"><?php _e( 'Choose a color for member type badges.', 'wbcom-member-type-extension' ); ?></p>
        </td>
    </tr>
    
    <tr class="form-field">
        <th scope="row">
            <label for="bp_member_type_icon"><?php _e( 'Icon', 'wbcom-member-type-extension' ); ?></label>
        </th>
        <td>
            <input type="text" id="bp_member_type_icon" name="bp_member_type_icon" value="<?php echo esc_attr( $icon ); ?>" class="regular-text" />
            <p class="description"><?php _e( 'Icon class (e.g., fa-user) or image URL.', 'wbcom-member-type-extension' ); ?></p>
        </td>
    </tr>
    <?php
}
add_action( 'bp_member_type_edit_form_fields', 'wbcom_bp_member_type_edit_form_custom_fields', 999 );
 
/**
 * Save custom fields when member type is created
 * 
 * This function saves our custom field values when a new member type
 * is created in the WordPress admin area.
 *
 * @since 1.0.0
 * @param array $result Array containing information about the newly created term
 */
function wbcom_bp_member_type_save_custom_fields( $result ) {
    // Save Badge Color if provided
    if ( isset( $_POST['bp_member_type_badge_color'] ) && ! empty( $_POST['bp_member_type_badge_color'] ) ) {
        add_term_meta( $result['term_id'], 'bp_member_type_badge_color', sanitize_hex_color( $_POST['bp_member_type_badge_color'] ), true );
    }
    
    // Save Icon if provided
    if ( isset( $_POST['bp_member_type_icon'] ) && ! empty( $_POST['bp_member_type_icon'] ) ) {
        add_term_meta( $result['term_id'], 'bp_member_type_icon', sanitize_text_field( $_POST['bp_member_type_icon'] ), true );
    }
}
add_action( 'bp_type_inserted', 'wbcom_bp_member_type_save_custom_fields', 999 );
 
/**
 * Update custom fields when member type is updated
 * 
 * This function updates our custom field values when an existing member type
 * is modified in the WordPress admin area.
 *
 * @since 1.0.0
 * @param int $term_id The term ID of the member type being updated
 * @param int $tt_id   The term taxonomy ID
 */
function wbcom_bp_member_type_update_custom_fields( $term_id, $tt_id ) {
    // Update Badge Color
    if ( isset( $_POST['bp_member_type_badge_color'] ) ) {
        if ( ! empty( $_POST['bp_member_type_badge_color'] ) ) {
            update_term_meta( $term_id, 'bp_member_type_badge_color', sanitize_hex_color( $_POST['bp_member_type_badge_color'] ) );
        } else {
            delete_term_meta( $term_id, 'bp_member_type_badge_color' );
        }
    }
    
    // Update Icon
    if ( isset( $_POST['bp_member_type_icon'] ) ) {
        if ( ! empty( $_POST['bp_member_type_icon'] ) ) {
            update_term_meta( $term_id, 'bp_member_type_icon', sanitize_text_field( $_POST['bp_member_type_icon'] ) );
        } else {
            delete_term_meta( $term_id, 'bp_member_type_icon' );
        }
    }
}
add_action( 'bp_type_updated', 'wbcom_bp_member_type_update_custom_fields', 999, 2 );
 
/**
 * Helper function to get member type custom meta
 * 
 * This utility function retrieves custom metadata for a specific member type.
 * It's used by other functions to get badge color and icon values.
 *
 * @since 1.0.0
 * @param string $member_type The member type name/slug
 * @param string $meta_key    The metadata key to retrieve
 * @param mixed  $default     Default value to return if meta not found
 * @return mixed The metadata value or default value
 */
function wbcom_bp_get_member_type_custom_meta( $member_type, $meta_key, $default = '' ) {
    // Check if BuddyPress member types are available
    if ( ! function_exists( 'bp_get_member_type_tax_name' ) ) {
        return $default;
    }
    
    // Get the term object for this member type
    $term = get_term_by( 'name', $member_type, bp_get_member_type_tax_name() );
    
    if ( ! $term ) {
        return $default;
    }
 
    // Get the metadata value
    $meta_value = get_term_meta( $term->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 '<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;">';
            
            // Display icon if available
            if ( $icon ) {
                if ( filter_var( $icon, FILTER_VALIDATE_URL ) ) {
                    // If icon is a URL, display as image
                    echo '<img src="' . esc_url( $icon ) . '" alt="' . esc_attr( $member_type ) . '" style="width: 16px; height: 16px; margin-right: 5px; vertical-align: middle;" />';
                } else {
                    // If icon is a CSS class, display as icon
                    echo '<i class="' . esc_attr( $icon ) . '" style="margin-right: 5px;"></i>';
                }
            }
            
            // Display member type name
            echo '<span>' . esc_html( $member_type ) . '</span>';
            echo '</div>';
        }
    }
}
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;
    }
    ?>
    <style type="text/css">
        .wbcom-member-type-badge {
            display: inline-block;
            padding: 5px 10px;
            margin: 5px 5px 5px 0;
            border-radius: 3px;
            font-size: 12px;
            font-weight: 500;
            text-transform: uppercase;
            letter-spacing: 0.5px;
            box-shadow: 0 1px 3px rgba(0,0,0,0.1);
            transition: all 0.3s ease;
        }
        
        .wbcom-member-type-badge:hover {
            transform: translateY(-1px);
            box-shadow: 0 2px 6px rgba(0,0,0,0.15);
        }
        
        .wbcom-member-type-badge i {
            margin-right: 5px;
            vertical-align: middle;
        }
        
        .wbcom-member-type-badge img {
            width: 16px;
            height: 16px;
            margin-right: 5px;
            vertical-align: middle;
        }
    </style>
    <?php
}
add_action( 'wp_head', 'wbcom_bp_member_type_badge_styles' );

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎