Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
02/24/2023 09:37:44 AM (14 months ago)
Author:
imath
Message:

Use a custom post type instead of the page post type for directories

  • The buddypress post type is now the one used for the BP component

directory page.

  • Introduce the bp_core_set_unique_directory_page_slug() function to

make sure there is no conflict with an existing WP page when setting the
BP Component directory page post_name.

  • Introduce the bp_restricted custom status. We'll be able to use it for

future visibility features.

  • Deprecate the Admin Slugs screen and corresponding functions
  • Bump raw_db_version to 13422 (the first commit about merging BP

Rewrites).

  • Add an update function to update the post type of the existing BP

component directory pages and potential WP Nav Menus including these.

Props r-a-y, johnjamesjacoby, boonebgorges

Closes https://github.com/buddypress/buddypress/pull/67
See #4954

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/admin/bp-core-admin-slugs.php

    r13138 r13431  
    66 * @subpackage CoreAdministration
    77 * @since 2.3.0
     8 * @deprecated 12.0.0
    89 */
    910
     
    1112defined( 'ABSPATH' ) || exit;
    1213
    13 /**
    14  * Renders the page mapping admin panel.
    15  *
    16  * @since 1.6.0
    17  * @todo Use settings API
    18  */
    19 function bp_core_admin_slugs_settings() {
    20     bp_core_admin_tabbed_screen_header( __( 'BuddyPress Settings', 'buddypress' ), __( 'Pages', 'buddypress' ) );
    21 ?>
    22 
    23     <div class="buddypress-body">
    24         <form action="" method="post" id="bp-admin-page-form">
    25 
    26             <?php bp_core_admin_slugs_options(); ?>
    27 
    28             <p class="submit clear">
    29                 <input class="button-primary" type="submit" name="bp-admin-pages-submit" id="bp-admin-pages-submit" value="<?php esc_attr_e( 'Save Settings', 'buddypress' ) ?>"/>
    30             </p>
    31 
    32             <?php wp_nonce_field( 'bp-admin-pages-setup' ); ?>
    33 
    34         </form>
    35     </div>
    36 
    37 <?php
    38 }
    39 
    40 /**
    41  * Generate a list of directory pages, for use when building Components panel markup.
    42  *
    43  * @since 2.4.1
    44  *
    45  * @return array
    46  */
    47 function bp_core_admin_get_directory_pages() {
    48     $bp = buddypress();
    49     $directory_pages = array();
    50 
    51     // Loop through loaded components and collect directories.
    52     if ( is_array( $bp->loaded_components ) ) {
    53         foreach( $bp->loaded_components as $component_slug => $component_id ) {
    54 
    55             // Only components that need directories should be listed here.
    56             if ( isset( $bp->{$component_id} ) && !empty( $bp->{$component_id}->has_directory ) ) {
    57 
    58                 // The component->name property was introduced in BP 1.5, so we must provide a fallback.
    59                 $directory_pages[$component_id] = !empty( $bp->{$component_id}->name ) ? $bp->{$component_id}->name : ucwords( $component_id );
    60             }
    61         }
    62     }
    63 
    64     /** Directory Display *****************************************************/
    65 
    66     /**
    67      * Filters the loaded components needing directory page association to a WordPress page.
    68      *
    69      * @since 1.5.0
    70      *
    71      * @param array $directory_pages Array of available components to set associations for.
    72      */
    73     return apply_filters( 'bp_directory_pages', $directory_pages );
    74 }
    75 
    76 /**
    77  * Generate a list of static pages, for use when building Components panel markup.
    78  *
    79  * By default, this list contains 'register' and 'activate'.
    80  *
    81  * @since 2.4.1
    82  *
    83  * @return array
    84  */
    85 function bp_core_admin_get_static_pages() {
    86     $static_pages = array(
    87         'register' => __( 'Register', 'buddypress' ),
    88         'activate' => __( 'Activate', 'buddypress' ),
    89     );
    90 
    91     /**
    92      * Filters the default static pages for BuddyPress setup.
    93      *
    94      * @since 1.6.0
    95      *
    96      * @param array $static_pages Array of static default static pages.
    97      */
    98     return apply_filters( 'bp_static_pages', $static_pages );
    99 }
    100 
    101 /**
    102  * Creates reusable markup for page setup on the Components and Pages dashboard panel.
    103  *
    104  * @package BuddyPress
    105  * @since 1.6.0
    106  * @todo Use settings API
    107  */
    108 function bp_core_admin_slugs_options() {
    109 
    110     // Get the existing WP pages.
    111     $existing_pages = bp_core_get_directory_page_ids();
    112 
    113     // Set up an array of components (along with component names) that have directory pages.
    114     $directory_pages = bp_core_admin_get_directory_pages();
    115 
    116     if ( ! empty( $directory_pages ) ) : ?>
    117 
    118         <h3><?php esc_html_e( 'Directories', 'buddypress' ); ?></h3>
    119 
    120         <p><?php esc_html_e( 'Associate a WordPress Page with each BuddyPress component directory.', 'buddypress' ); ?></p>
    121 
    122         <table class="form-table">
    123             <tbody>
    124 
    125                 <?php foreach ( $directory_pages as $name => $label ) : ?>
    126 
    127                     <tr valign="top">
    128                         <th scope="row">
    129                             <label for="bp_pages[<?php echo esc_attr( $name ) ?>]"><?php echo esc_html( $label ) ?></label>
    130                         </th>
    131 
    132                         <td>
    133 
    134                             <?php if ( ! bp_is_root_blog() ) switch_to_blog( bp_get_root_blog_id() ); ?>
    135 
    136                             <?php echo wp_dropdown_pages( array(
    137                                 'name'             => 'bp_pages[' . esc_attr( $name ) . ']',
    138                                 'echo'             => false,
    139                                 'show_option_none' => __( '- None -', 'buddypress' ),
    140                                 'selected'         => ! empty( $existing_pages[$name] ) ? $existing_pages[$name] : false
    141                             ) ); ?>
    142 
    143                             <?php if ( ! empty( $existing_pages[ $name ] ) && get_post( $existing_pages[ $name ] ) ) : ?>
    144 
    145                                 <a href="<?php echo esc_url( get_permalink( $existing_pages[$name] ) ); ?>" class="button-secondary" target="_bp">
    146                                     <?php esc_html_e( 'View', 'buddypress' ); ?> <span class="dashicons dashicons-external" aria-hidden="true"></span>
    147                                     <span class="screen-reader-text"><?php esc_html_e( '(opens in a new tab)', 'buddypress' ); ?></span>
    148                                 </a>
    149 
    150                             <?php endif; ?>
    151 
    152                             <?php if ( ! bp_is_root_blog() ) restore_current_blog(); ?>
    153 
    154                         </td>
    155                     </tr>
    156 
    157 
    158                 <?php endforeach ?>
    159 
    160                 <?php
    161 
    162                 /**
    163                  * Fires after the display of default directories.
    164                  *
    165                  * Allows plugins to add their own directory associations.
    166                  *
    167                  * @since 1.5.0
    168                  */
    169                 do_action( 'bp_active_external_directories' ); ?>
    170 
    171             </tbody>
    172         </table>
    173 
    174     <?php
    175 
    176     endif;
    177 
    178     /** Static Display ********************************************************/
    179 
    180     $static_pages = bp_core_admin_get_static_pages();
    181 
    182     if ( ! empty( $static_pages ) ) : ?>
    183 
    184         <h3><?php esc_html_e( 'Registration', 'buddypress' ); ?></h3>
    185 
    186         <?php if ( bp_allow_access_to_registration_pages() ) : ?>
    187             <p>
    188                 <?php esc_html_e( 'Associate WordPress Pages with the following BuddyPress Registration pages.', 'buddypress' ); ?>
    189                 <?php esc_html_e( 'These pages will only be reachable by users who are not logged in.', 'buddypress' ); ?>
    190             </p>
    191 
    192             <table class="form-table">
    193                 <tbody>
    194 
    195                     <?php foreach ( $static_pages as $name => $label ) : ?>
    196 
    197                         <tr valign="top">
    198                             <th scope="row">
    199                                 <label for="bp_pages[<?php echo esc_attr( $name ) ?>]"><?php echo esc_html( $label ) ?></label>
    200                             </th>
    201 
    202                             <td>
    203 
    204                                 <?php if ( ! bp_is_root_blog() ) switch_to_blog( bp_get_root_blog_id() ); ?>
    205 
    206                                 <?php echo wp_dropdown_pages( array(
    207                                     'name'             => 'bp_pages[' . esc_attr( $name ) . ']',
    208                                     'echo'             => false,
    209                                     'show_option_none' => __( '- None -', 'buddypress' ),
    210                                     'selected'         => !empty( $existing_pages[$name] ) ? $existing_pages[$name] : false
    211                                 ) ) ?>
    212 
    213                                 <?php if ( ! bp_is_root_blog() ) restore_current_blog(); ?>
    214 
    215                             </td>
    216                         </tr>
    217 
    218                     <?php endforeach; ?>
    219 
    220                     <?php
    221 
    222                     /**
    223                      * Fires after the display of default static pages for BuddyPress setup.
    224                      *
    225                      * @since 1.5.0
    226                      */
    227                     do_action( 'bp_active_external_pages' ); ?>
    228 
    229                 </tbody>
    230             </table>
    231         <?php else : ?>
    232             <?php if ( is_multisite() ) : ?>
    233                 <p>
    234                     <?php
    235                     printf(
    236                         /* translators: %s: the link to the Network settings page */
    237                         esc_html_x( 'Registration is currently disabled. Before associating a page is allowed, please enable registration by selecting either the "User accounts may be registered" or "Both sites and user accounts can be registered" option on %s.', 'Disabled registration message for multisite config', 'buddypress' ),
    238                         sprintf(
    239                             '<a href="%1$s">%2$s</a>',
    240                             esc_url( network_admin_url( 'settings.php' ) ),
    241                             esc_html_x( 'this page', 'Link text for the Multisite’s network settings page', 'buddypress' )
    242                         )
    243                     );
    244                     ?>
    245                 </p>
    246             <?php else : ?>
    247                 <p>
    248                     <?php
    249                     printf(
    250                         /* translators: %s: the link to the Site general options page */
    251                         esc_html_x( 'Registration is currently disabled. Before associating a page is allowed, please enable registration by clicking on the "Anyone can register" checkbox on %s.', 'Disabled registration message for regular site config', 'buddypress' ),
    252                         sprintf(
    253                             '<a href="%1$s">%2$s</a>',
    254                             esc_url( admin_url( 'options-general.php' ) ),
    255                             esc_html_x( 'this page', 'Link text for the Site’s general options page', 'buddypress' )
    256                         )
    257                     );
    258                     ?>
    259                 </p>
    260             <?php endif; ?>
    261         <?php endif;
    262     endif;
    263 }
    264 
    265 /**
    266  * Handle saving of the BuddyPress slugs.
    267  *
    268  * @since 1.6.0
    269  * @todo Use settings API
    270  */
    271 function bp_core_admin_slugs_setup_handler() {
    272 
    273     if ( isset( $_POST['bp-admin-pages-submit'] ) ) {
    274         if ( ! check_admin_referer( 'bp-admin-pages-setup' ) ) {
    275             return false;
    276         }
    277 
    278         // Then, update the directory pages.
    279         if ( isset( $_POST['bp_pages'] ) ) {
    280             $valid_pages = array_merge( bp_core_admin_get_directory_pages(), bp_core_admin_get_static_pages() );
    281 
    282             $new_directory_pages = array();
    283             foreach ( (array) $_POST['bp_pages'] as $key => $value ) {
    284                 if ( isset( $valid_pages[ $key ] ) ) {
    285                     $new_directory_pages[ $key ] = (int) $value;
    286                 }
    287             }
    288             bp_core_update_directory_page_ids( $new_directory_pages );
    289         }
    290 
    291         $base_url = bp_get_admin_url( add_query_arg( array( 'page' => 'bp-page-settings', 'updated' => 'true' ), 'admin.php' ) );
    292 
    293         wp_redirect( $base_url );
    294     }
    295 }
    296 add_action( 'bp_admin_init', 'bp_core_admin_slugs_setup_handler' );
     14_deprecated_file( basename( __FILE__ ), '12.0.0', '', __( 'BuddyPress does not used page association anymore, you can restore it using the BP Classic plugin', 'buddypress' ) );
Note: See TracChangeset for help on using the changeset viewer.