bp_core_activation_notice()
Verify that some BP prerequisites are set up properly, and notify the admin if not.
Description
On every Dashboard page, this function checks the following:
- that pretty permalinks are enabled.
- that every BP component that needs a WP page for a directory has one.
- that no WP page has multiple BP components associated with it. The administrator will be shown a notice for each check that fails.
Source
File: bp-core/admin/bp-core-admin-functions.php
function bp_core_activation_notice() { global $wp_rewrite, $wpdb; // Only the super admin gets warnings. if ( ! bp_current_user_can( 'bp_moderate' ) ) { return; } // Bail in user admin. if ( is_user_admin() ) { return; } // On multisite installs, don't load on a non-root blog, unless do_network_admin is overridden. if ( is_multisite() && bp_core_do_network_admin() && ! bp_is_root_blog() ) { return; } // Bail if in network admin, and BuddyPress is not network activated. if ( is_network_admin() && ! bp_is_network_activated() ) { return; } /** * Check to make sure that the blog setup routine has run. This can't * happen during the wizard because of the order which the components * are loaded. */ if ( bp_is_active( 'blogs' ) ) { $bp = buddypress(); $count = $wpdb->get_var( "SELECT COUNT(*) FROM {$bp->blogs->table_name}" ); if ( empty( $count ) ) { bp_blogs_record_existing_blogs(); } } // Add notice if no rewrite rules are enabled. if ( empty( $wp_rewrite->permalink_structure ) ) { bp_core_add_admin_notice( sprintf( __( '<strong>BuddyBoss Platform is almost ready</strong>. You must <a href="%s">update your permalink structure</a> to something other than the default for it to work.', 'buddyboss' ), admin_url( 'options-permalink.php' ) ), 'error' ); } // Get BuddyPress instance. $bp = buddypress(); /** * Check for orphaned BP components (BP component is enabled, no WP page exists). */ $orphaned_components = array(); $wp_page_components = array(); // Only components with 'has_directory' require a WP page to function. foreach( array_keys( $bp->loaded_components ) as $component_id ) { if ( !empty( $bp->{$component_id}->has_directory ) ) { $wp_page_components[] = array( 'id' => $component_id, 'name' => isset( $bp->{$component_id}->name ) ? $bp->{$component_id}->name : ucwords( $bp->{$component_id}->id ) ); } } // Activate and Register are special cases. They are not components but they need WP pages. // If user registration is disabled, we can skip this step. if ( bp_get_signup_allowed() ) { $wp_page_components[] = array( 'id' => 'activate', 'name' => __( 'Activate', 'buddyboss' ) ); $wp_page_components[] = array( 'id' => 'register', 'name' => __( 'Register', 'buddyboss' ) ); } // On the first admin screen after a new installation, this isn't set, so grab it to suppress // a misleading error message. if ( empty( $bp->pages->members ) ) { $bp->pages = bp_core_get_directory_pages(); } foreach( $wp_page_components as $component ) { if ( !isset( $bp->pages->{$component['id']} ) ) { $orphaned_components[] = $component['name']; } } if ( function_exists( 'bp_nouveau_get_appearance_settings' ) ) { if ( bp_nouveau_get_appearance_settings( 'user_front_page' ) ) { if ( ! isset( $bp->pages->profile_dashboard ) ) { $orphaned_components[] = 'Profile Dashboard'; } } } // If forum enabled and forum page is not set then add to forums to $orphaned_components components to show the notice. if ( bp_is_active( 'forums' ) ) { $id = (int) bp_get_option( '_bbp_root_slug_custom_slug'); // Check the status of current set value. $status = get_post_status( $id ); // Set the page id if page exists and in publish otherwise set blank. $id = ( '' !== $status && 'publish' === $status ) ? $id : ''; if ( empty( $id ) ) { $orphaned_components[] = 'Forums'; } } if ( !empty( $orphaned_components ) ) { $admin_url = bp_get_admin_url( add_query_arg( array( 'page' => 'bp-pages' ), 'admin.php' ) ); if ( isset( $_GET['page'] ) && 'bp-pages' === $_GET['page'] ) { $notice = sprintf( '%1$s', sprintf( __( 'The following active BuddyBoss Components do not have associated WordPress Pages: %s.', 'buddyboss' ), '<strong>' . implode( '</strong>, <strong>', array_map( 'esc_html', $orphaned_components ) ) . '</strong>' ) ); } else { $notice = sprintf( '%1$s <a href="%2$s">%3$s</a>', sprintf( __( 'The following active BuddyBoss Components do not have associated WordPress Pages: %s.', 'buddyboss' ), '<strong>' . implode( '</strong>, <strong>', array_map( 'esc_html', $orphaned_components ) ) . '</strong>' ), esc_url( $admin_url ), __( 'Repair', 'buddyboss' ) ); } bp_core_add_admin_notice( $notice ); } // BP components cannot share a single WP page. Check for duplicate assignments, and post a message if found. $dupe_names = array(); $page_ids = bp_core_get_directory_page_ids(); $dupes = array_diff_assoc( $page_ids, array_unique( $page_ids ) ); if ( !empty( $dupes ) ) { foreach( array_keys( $dupes ) as $dupe_component ) { $dupe_names[] = $bp->pages->{$dupe_component}->title; } // Make sure that there are no duplicate duplicates :). $dupe_names = array_unique( $dupe_names ); } // If there are duplicates, post a message about them. if ( !empty( $dupe_names ) ) { $admin_url = bp_get_admin_url( add_query_arg( array( 'page' => 'bp-page-settings' ), 'admin.php' ) ); if ( isset( $_GET['page'] ) && 'bp-pages' === $_GET['page'] ) { $notice = sprintf( '%1$s', sprintf( __( 'Each BuddyBoss Component needs its own WordPress page. The following WordPress Pages have more than one component associated with them: %s.', 'buddyboss' ), '<strong>' . implode( '</strong>, <strong>', array_map( 'esc_html', $dupe_names ) ) . '</strong>' ) ); } else { $notice = sprintf( '%1$s <a href="%2$s">%3$s</a>', sprintf( __( 'Each BuddyBoss Component needs its own WordPress page. The following WordPress Pages have more than one component associated with them: %s.', 'buddyboss' ), '<strong>' . implode( '</strong>, <strong>', array_map( 'esc_html', $dupe_names ) ) . '</strong>' ), esc_url( $admin_url ), __( 'Repair', 'buddyboss' ) ); } bp_core_add_admin_notice( $notice ); } do_action( 'bp_core_activation_notice' ); }
Changelog
Version | Description |
---|---|
BuddyPress 1.2.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.