Skip to content

Developer Overview

This section covers the technical details of BuddyPress Schedule Activity for developers who want to integrate with, extend, or customize the plugin.

  • WordPress 5.0+
  • BuddyPress 6.0+ or BuddyBoss Platform
  • PHP 7.4+
buddypress-schedule-activity/
├── buddypress-schedule-activity.php # Bootstrap: constants, activation hooks, deferred init
├── uninstall.php # Cleans up activity meta on uninstall
├── includes/
│ ├── class-buddypress-schedule-activity.php # Core class: wires all hooks
│ ├── class-buddypress-schedule-activity-loader.php # Hook registration helper
│ ├── class-buddypress-schedule-activity-activator.php
│ ├── class-buddypress-schedule-activity-deactivator.php
│ └── class-buddypress-schedule-activity-i18n.php
├── public/
│ └── class-buddypress-schedule-activity-public.php # All frontend logic
├── admin/
│ ├── class-buddypress-schedule-activity-admin.php # Enqueues admin assets
│ └── wbcom/ # License and Wbcom admin panel
└── edd-license/ # EDD license management

The plugin is instantiated at plugins_loaded (priority 10), after confirming BuddyPress is active:

plugins_loaded (priority 10)
└── run_buddypress_schedule_activity()
└── new Buddypress_Schedule_Activity()
├── load_dependencies() # Require all class files
├── set_locale() # Register text domain
├── define_admin_hooks() # Admin CSS/JS enqueue
└── define_public_hooks() # All frontend behavior
Member submits activity form with schedule data
└── bp_activity_posted_update (priority 9999)
└── buddypress_schedule_activity_posted_update()
├── Verify nonce (buddypress-schedule-activity)
├── Verify post author ownership
├── Validate date (YYYY-MM-DD, real date, not past)
├── Validate time (H:MM or HH:MM)
├── Validate meridiem (am/pm)
├── Convert 12-hour time to 24-hour
├── UPDATE bp_activity SET date_recorded = future_datetime WHERE id = activity_id
└── bp_activity_update_meta( id, '_bp_activity_status', 'scheduled' )
WordPress cron (every minute via 'buddypress_schedule_activity_publish')
└── buddypress_check_schedule_activity_publish()
├── Check / set transient lock 'bpsa_publish_lock' (60s TTL)
├── SELECT activities WHERE date_recorded <= now AND meta = 'scheduled'
├── For each: UPDATE meta to 'publishing' (atomic - prevents duplicates)
├── DELETE '_bp_activity_status' meta (makes post visible)
└── UPDATE date_recorded = current_time (so post appears at top of feed)
Table Column / key Value Purpose
{prefix}bp_activity date_recorded Future datetime string When the post should publish
{prefix}bp_activity_meta _bp_activity_status scheduled or publishing Tracks scheduling lifecycle
{prefix}bp_activity_meta _bp_schedule_activity_title_for_youzify true Youzify action string fix

buddypress-schedule-activity

BUDDYPRESS_SCHEDULE_ACTIVITY_VERSION // '1.4.4'
BUDDYPRESS_SCHEDULE_ACTIVITY_URL // plugin_dir_url() result
if ( defined( 'BUDDYPRESS_SCHEDULE_ACTIVITY_VERSION' ) ) {
// Plugin is active
}