bp_core_maybe_hook_new_subnav_screen_function( array $subnav_item, string $component = 'members' )
For a given subnav item, either hook the screen function or generate redirect arguments, as necessary.
Description
Parameters
- $subnav_item
-
(Required) The subnav array added to the secondary navigation of the component in bp_core_new_subnav_item().
- $component
-
(Optional) The component the navigation is attached to. Defaults to 'members'.
Default value: 'members'
Return
(array)
Source
File: bp-core/bp-core-buddybar.php
function bp_core_maybe_hook_new_subnav_screen_function( $subnav_item, $component = 'members' ) { $retval = array( 'status' => '', ); // Is this accessible by site admins only? $site_admin_restricted = false; if ( ! empty( $subnav_item['site_admin_only'] ) && ! bp_current_user_can( 'bp_moderate' ) ) { $site_admin_restricted = true; } // User has access, so let's try to hook the display callback. if ( ! empty( $subnav_item['user_has_access'] ) && ! $site_admin_restricted ) { // Screen function is invalid. if ( ! is_callable( $subnav_item['screen_function'] ) ) { $retval['status'] = 'failure'; // Success - hook to bp_screens. } else { add_action( 'bp_screens', $subnav_item['screen_function'], 3 ); $retval['status'] = 'success'; } // User doesn't have access. Determine redirect arguments based on // user status. } else { $retval['status'] = 'failure'; if ( is_user_logged_in() ) { $bp = buddypress(); // If a redirect URL has been passed to the subnav item, respect it. if ( ! empty( $subnav_item['no_access_url'] ) ) { $message = __( 'You do not have access to this page.', 'buddyboss' ); $redirect_to = trailingslashit( $subnav_item['no_access_url'] ); // In the case of a user page, we try to assume a // redirect URL. } elseif ( bp_is_user() ) { $parent_nav_default = $bp->{$component}->nav->get_primary( array( 'slug' => $bp->default_component ), false ); if ( $parent_nav_default ) { $parent_nav_default_item = reset( $parent_nav_default ); } // Redirect to the displayed user's default // component, as long as that component is // publicly accessible. if ( bp_is_my_profile() || ( isset( $parent_nav_default_item ) && $parent_nav_default_item->show_for_displayed_user ) ) { $message = __( 'You do not have access to this page.', 'buddyboss' ); $redirect_to = bp_displayed_user_domain(); // In some cases, the default tab is not accessible to // the logged-in user. So we fall back on a tab that we // know will be accessible. } else { // Try 'activity' first. if ( bp_is_active( 'activity' ) && isset( $bp->pages->activity ) ) { $redirect_to = trailingslashit( bp_displayed_user_domain() . bp_get_activity_slug() ); // Then try 'profile'. } else { $redirect_to = trailingslashit( bp_displayed_user_domain() . ( 'xprofile' == $bp->profile->id ? 'profile' : $bp->profile->id ) ); } $message = ''; } // Fall back to the home page. } else { $message = __( 'You do not have access to this page.', 'buddyboss' ); $redirect_to = bp_get_root_domain(); } $retval['redirect_args'] = array( 'message' => $message, 'root' => $redirect_to, 'redirect' => false, 'mode' => 1 ); } else { // When the user is logged out, pass an empty array // This indicates that the default arguments should be // used in bp_core_no_access(). $retval['redirect_args'] = array(); } } return $retval; }
Changelog
Version | Description |
---|---|
BuddyPress 2.1.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.