array( 'name' => _x( 'Favorites', 'Profile activity screen sub nav', 'buddypress' ), 'slug' => 'favorites', 'parent_slug' => $slug, 'screen_function' => 'bp_activity_screen_favorites', 'position' => 30, 'item_css_id' => 'activity-favs', 'generate' => bp_activity_can_favorite(), ); // Additional menu if friends is active. if ( bp_is_active( 'friends' ) ) { $sub_nav[] = array( 'name' => _x( 'Friends', 'Profile activity screen sub nav', 'buddypress' ), 'slug' => bp_get_friends_slug(), 'parent_slug' => $slug, 'screen_function' => 'bp_activity_screen_friends', 'position' => 40, 'item_css_id' => 'activity-friends', ); } // Additional menu if groups is active. if ( bp_is_active( 'groups' ) ) { $sub_nav[] = array( 'name' => _x( 'Groups', 'Profile activity screen sub nav', 'buddypress' ), 'slug' => bp_get_groups_slug(), 'parent_slug' => $slug, 'screen_function' => 'bp_activity_screen_groups', 'position' => 50, 'item_css_id' => 'activity-groups' ); } parent::register_nav( $main_nav, $sub_nav ); } /** * Set up the component entries in the WordPress Admin Bar. * * @since 1.5.0 * * @see BP_Component::setup_nav() for a description of the $wp_admin_nav * parameter array. * * @param array $wp_admin_nav See BP_Component::setup_admin_bar() for a * description. */ public function setup_admin_bar( $wp_admin_nav = array() ) { // Menus for logged in user. if ( is_user_logged_in() ) { // Setup the logged in user variables. $activity_slug = bp_get_activity_slug(); // Unread message count. if ( bp_activity_do_mentions() ) { $count = bp_get_total_mention_count_for_user( bp_loggedin_user_id() ); if ( ! empty( $count ) ) { $title = sprintf( /* translators: %s: Unread mention count for the current user */ _x( 'Mentions %s', 'Toolbar Mention logged in user', 'buddypress' ), '' . bp_core_number_format( $count ) . '' ); } else { $title = _x( 'Mentions', 'Toolbar Mention logged in user', 'buddypress' ); } } // Add the "Activity" sub menu. $wp_admin_nav[] = array( 'parent' => buddypress()->my_account_menu_id, 'id' => 'my-account-' . $this->id, 'title' => _x( 'Activity', 'My Account Activity sub nav', 'buddypress' ), 'href' => bp_loggedin_user_url( bp_members_get_path_chunks( array( $activity_slug ) ) ), ); // Personal. $wp_admin_nav[] = array( 'parent' => 'my-account-' . $this->id, 'id' => 'my-account-' . $this->id . '-personal', 'title' => _x( 'Personal', 'My Account Activity sub nav', 'buddypress' ), 'href' => bp_loggedin_user_url( bp_members_get_path_chunks( array( $activity_slug, 'just-me' ) ) ), 'position' => 10, ); // Mentions. if ( bp_activity_do_mentions() ) { $wp_admin_nav[] = array( 'parent' => 'my-account-' . $this->id, 'id' => 'my-account-' . $this->id . '-mentions', 'title' => $title, 'href' => bp_loggedin_user_url( bp_members_get_path_chunks( array( $activity_slug, 'mentions' ) ) ), 'position' => 20, ); } // Favorite activity items. if ( bp_activity_can_favorite() ) { $wp_admin_nav[] = array( 'parent' => 'my-account-' . $this->id, 'id' => 'my-account-' . $this->id . '-favorites', 'title' => _x( 'Favorites', 'My Account Activity sub nav', 'buddypress' ), 'href' => bp_loggedin_user_url( bp_members_get_path_chunks( array( $activity_slug, 'favorites' ) ) ), 'position' => 30, ); } // Friends? if ( bp_is_active( 'friends' ) ) { $wp_admin_nav[] = array( 'parent' => 'my-account-' . $this->id, 'id' => 'my-account-' . $this->id . '-friends', 'title' => _x( 'Friends', 'My Account Activity sub nav', 'buddypress' ), 'href' => bp_loggedin_user_url( bp_members_get_path_chunks( array( $activity_slug, bp_get_friends_slug() ) ) ), 'position' => 40, ); } // Groups? if ( bp_is_active( 'groups' ) ) { $wp_admin_nav[] = array( 'parent' => 'my-account-' . $this->id, 'id' => 'my-account-' . $this->id . '-groups', 'title' => _x( 'Groups', 'My Account Activity sub nav', 'buddypress' ), 'href' => bp_loggedin_user_url( bp_members_get_path_chunks( array( $activity_slug, bp_get_groups_slug() ) ) ), 'position' => 50 ); } } parent::setup_admin_bar( $wp_admin_nav ); } /** * Set up the title for pages and . * * @since 1.5.0 * */ public function setup_title() { // Adjust title based on view. if ( bp_is_activity_component() ) { $bp = buddypress(); if ( bp_is_my_profile() ) { $bp->bp_options_title = _x( 'My Activity', 'Page and <title>', 'buddypress' ); } else { $bp->bp_options_avatar = bp_core_fetch_avatar( array( 'item_id' => bp_displayed_user_id(), 'type' => 'thumb', 'alt' => sprintf( /* translators: %s: member name */ __( 'Profile picture of %s', 'buddypress' ), bp_get_displayed_user_fullname() ), ) ); $bp->bp_options_title = bp_get_displayed_user_fullname(); } } parent::setup_title(); } /** * Setup cache groups. * * @since 2.2.0 */ public function setup_cache_groups() { // Global groups. wp_cache_add_global_groups( array( 'bp_activity', 'bp_activity_comments', 'activity_meta' ) ); parent::setup_cache_groups(); } /** * Parse the WP_Query and eventually display the component's directory or single item. * * @since 12.0.0 * * @param WP_Query $query Required. See BP_Component::parse_query() for * description. */ public function parse_query( $query ) { /* * If BP Rewrites are not in use, no need to parse BP URI globals another time. * Legacy Parser should have already set these. */ if ( 'rewrites' !== bp_core_get_query_parser() ) { return parent::parse_query( $query ); } if ( bp_is_site_home() && bp_is_directory_homepage( $this->id ) ) { $query->set( $this->rewrite_ids['directory'], 1 ); } if ( 1 === (int) $query->get( $this->rewrite_ids['directory'] ) ) { $bp = buddypress(); // Set the Activity component as current. $bp->current_component = 'activity'; $current_action = $query->get( $this->rewrite_ids['single_item_action'] ); if ( $current_action ) { $bp->current_action = $current_action; } $action_variables = $query->get( $this->rewrite_ids['single_item_action_variables'] ); if ( $action_variables ) { if ( ! is_array( $action_variables ) ) { $bp->action_variables = explode( '/', ltrim( $action_variables, '/' ) ); } else { $bp->action_variables = $action_variables; } } // Set the BuddyPress queried object. if ( isset( $bp->pages->activity->id ) ) { $query->queried_object = get_post( $bp->pages->activity->id ); $query->queried_object_id = $query->queried_object->ID; } } parent::parse_query( $query ); } /** * Init the BP REST API. * * @since 5.0.0 * * @param array $controllers Optional. See BP_Component::rest_api_init() for * description. */ public function rest_api_init( $controllers = array() ) { parent::rest_api_init( array( 'BP_REST_Activity_Endpoint' ) ); } /** * Register the BP Activity Blocks. * * @since 7.0.0 * @since 12.0.0 Use the WP Blocks API v2. * * @param array $blocks Optional. See BP_Component::blocks_init() for * description. */ public function blocks_init( $blocks = array() ) { $blocks = array( 'bp/latest-activities' => array( 'metadata' => trailingslashit( buddypress()->plugin_dir ) . 'bp-activity/blocks/latest-activities', 'render_callback' => 'bp_activity_render_latest_activities_block', ), ); if ( bp_is_active( $this->id, 'embeds' ) ) { $blocks['bp/embed-activity'] = array( 'metadata' => trailingslashit( buddypress()->plugin_dir ) . 'bp-activity/blocks/embed-activity', ); } parent::blocks_init( $blocks ); } }