BuddyPress Status – Developer Guide

Get Started

Architecture Overview

BuddyPress Status is built using WordPress plugin architecture with separate admin and public components. The plugin follows WordPress coding standards and uses modern JavaScript practices.

Directory Structure

buddypress-status/
├── admin/                      # Admin-specific functionality
│   ├── class-buddypress-status-admin.php
│   ├── css/                   # Admin styles
│   ├── js/                    # Admin scripts
│   ├── inc/                   # Admin includes
│   └── wbcom/                 # Wbcom admin framework
├── public/                    # Frontend functionality
│   ├── class-buddypress-status-public.php
│   ├── css/                   # Frontend styles
│   ├── js/                    # Frontend scripts
│   └── inc/                   # Frontend includes
├── includes/                  # Core plugin files
├── languages/                 # Translation files
└── templates/                 # Template files

Key Components

1. Status Management System

Database Structure

  • Statuses are stored in user meta with key bpsts_user_statuses
  • Current status stored in bpsts_current_status
  • Status icons stored in bpsts_user_status_icons

Status Object Structure

array(
    'status_id' => unique_id,
    'status' => 'Status text',
    'timestamp' => time(),
    'mood_type' => 'feeling',
    'mood_value' => 'happy'
)

2. Emoji System

Modern Emoji Implementation

  • Native emoji picker with 1500+ emojis
  • Category-based organization
  • Real-time search functionality
  • No external dependencies

Emoji Categories

  • Smileys & Emotion
  • People & Body
  • Animals & Nature
  • Food & Drink
  • Activities
  • Travel & Places
  • Objects
  • Symbols
  • Flags

3. Feeling & Activity System

Custom Activities

  • Admin can add custom feeling activities
  • Support for both SVG images and Font Awesome icons
  • Stored in option bpsts_feeling_activities

Activity Structure

array(
    'id' => unique_id,
    'name' => 'Activity Name',
    'type' => 'custom',
    'icon_type' => 'fontawesome', // or 'image'
    'icon_class' => 'fa-solid fa-star',
    'icon_url' => 'url_to_image'
)

4. Font Awesome Integration

Version: Font Awesome 6.5.1

Implementation

  • Proper deregistration of older versions
  • CDN-based loading with fallback
  • Support for all Font Awesome 6 icon styles

API Reference

PHP Functions

Status Functions

// Add a new status
bpsts_add_user_status($user_id, $status_text, $set_current = false)

// Update existing status
bpsts_update_user_status($user_id, $status_id, $new_status_text)

// Delete a status
bpsts_delete_user_status($user_id, $status_id)

// Get all user statuses
bpsts_get_user_statuses($user_id)

// Get current status
bpsts_get_current_status($user_id)

// Set current status
bpsts_set_current_status($user_id, $status_id)

Activity Functions

// Get all feeling activities
bpsts_get_feeling_activities()

// Add custom feeling activity
bpsts_add_feeling_activity($activity_data)

// Delete feeling activity
bpsts_delete_feeling_activity($activity_id)

// Get default activities
bpsts_get_default_activities()

JavaScript API

Status Selection

// Select mood emoji
$.bp_status_select_mood_emojis(parent, item, value, title, image, iconClass)

// Select activity emoji
$.bp_status_select_activity_emojis(parent, value, title, image, text, iconClass)

AJAX Actions

// Available AJAX actions
'bpsts_add_status'         // Add new status
'bpsts_update_status'      // Update existing status
'bpsts_delete_status'      // Delete status
'bpsts_current_status'     // Set current status
'bpsts_delete_status_icon' // Delete status icon

Hooks & Filters

Actions

// After status added
do_action('bpsts_after_status_added', $user_id, $status_id, $status_data)

// After status deleted
do_action('bpsts_after_status_deleted', $user_id, $status_id)

// After current status set
do_action('bpsts_after_current_status_set', $user_id, $status_id)

Filters

// Filter status before saving
apply_filters('bpsts_before_save_status', $status_text, $user_id)

// Filter status display
apply_filters('bpsts_status_display', $status_text, $user_id)

// Filter feeling activities
apply_filters('bpsts_feeling_activities', $activities)

// Filter status character limit
apply_filters('bpsts_status_character_limit', 140)

Customization

Adding Custom Status Locations

// Display current status
function my_custom_status_display() {
    $user_id = get_current_user_id();
    $current_status = bpsts_get_current_status($user_id);
    
    if ($current_status) {
        echo '<div class="custom-status">';
        echo esc_html($current_status['status']);
        echo '</div>';
    }
}

Custom Feeling Activities

// Add via code
function add_custom_activities() {
    $activity = array(
        'name' => 'Coding',
        'icon_type' => 'fontawesome',
        'icon_class' => 'fa-solid fa-code'
    );
    
    bpsts_add_feeling_activity($activity);
}
add_action('init', 'add_custom_activities');

Styling Customization

/* Override status styles */
.bpsts-current-status {
    /* Your custom styles */
}

/* Custom emoji picker styles */
.bpsts-emoji-picker-popup {
    /* Your custom styles */
}

Build Process

Prerequisites

  • Node.js and npm
  • Grunt CLI

Setup

npm install

Build Commands

# Build all assets
grunt

# Watch for changes
grunt watch

# Build for production
grunt build

Grunt Tasks

  • clean: Clean build directories
  • rtlcss: Generate RTL stylesheets
  • cssmin: Minify CSS files
  • uglify: Minify JavaScript files

Security Considerations

Nonce Verification

All AJAX requests include nonce verification:

check_ajax_referer('bpsts-ajax-nonce', 'ajax_nonce');

Data Sanitization

  • Status text: sanitize_text_field()
  • HTML content: wp_kses_post()
  • User input: esc_attr()esc_html()

Capability Checks

if (!bp_is_my_profile() && !current_user_can('manage_options')) {
    return;
}

Performance Optimization

Caching

  • User statuses cached in memory during request
  • Transients for expensive queries
  • Proper cache invalidation on updates

Asset Loading

  • Conditional loading based on page context
  • Minified assets in production
  • CDN usage for Font Awesome

Translation

Text Domain

buddypress-status

Localization Functions

__('Text', 'buddypress-status')
_e('Text', 'buddypress-status')
esc_html__('Text', 'buddypress-status')

JavaScript Localization

bpsts_ajax_object.translation_key

Debugging

Debug Constants

define('BPSTS_DEBUG', true);

Error Logging

if (defined('BPSTS_DEBUG') && BPSTS_DEBUG) {
    error_log('BuddyPress Status: ' . $message);
}

Testing

Unit Tests

Located in tests/ directory (if implemented)

Manual Testing Checklist

  •  Status CRUD operations
  •  Emoji picker functionality
  •  Feeling/Activity selection
  •  Character limit enforcement
  •  AJAX operations
  •  RTL support
  •  Translation strings

Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)
  • Mobile browsers (iOS Safari, Chrome Mobile)

Contributing

  1. Follow WordPress Coding Standards
  2. Add proper documentation
  3. Test thoroughly
  4. Submit pull requests with clear descriptions

Future Enhancements

  • REST API endpoints
  • Gutenberg block support
  • Advanced privacy controls
  • Status scheduling
  • Rich media attachments
  • WebSocket real-time updates
Update on August 1, 2025