[buddypress-trac] [BuddyPress Trac] #9057: Make register a deactivatable component

buddypress-trac noreply at wordpress.org
Mon Jan 15 09:39:43 UTC 2024


#9057: Make register a deactivatable component
-------------------------+---------------------
 Reporter:  shawfactor   |       Owner:  (none)
     Type:  enhancement  |      Status:  new
 Priority:  normal       |   Milestone:  14.0.0
Component:  Members      |     Version:
 Severity:  normal       |  Resolution:
 Keywords:               |
-------------------------+---------------------

Comment (by teeboy4real):

 Hello @imath

 I really like this idea and I would also like to add suggestion of the
 ability to control registrations based on a set threshold or the number of
 already registered members. I would love to share this code below with you
 so you can review it and improve on it. Adding this to core would be
 really awesome.

 Thanks


 {{{
 <?php
 /*
 * Plugin Name: BuddyPress Registration Control
 * Description: Allows administrators to enable or disable user
 registration and select a URL to redirect to when registration is
 disabled.
 * Version: 1.0
 */

 // Register the new setting in the BuddyPress options group
 function custom_bp_register_settings() {
     if ( ! function_exists( 'bp_is_active' ) ) {
         return;
     }
     register_setting( 'buddypress', 'bp-disable-site-registration',
 'custom_bp_sanitize_registration_status' );
     register_setting( 'buddypress', 'bp-disable-site-registration-
 redirection-url', 'custom_bp_sanitize_redirection_url' );
     register_setting( 'buddypress', 'bp-close-registration-at-users',
 'custom_bp_sanitize_user_registration_count' );
 }
 add_action( 'admin_init', 'custom_bp_register_settings' );

 // add sanitization function
 function custom_bp_sanitize_registration_status( $status ) {
     $allowed_values = array( 'open', 'closed' );
     if ( ! in_array( $status, $allowed_values ) ) {
         $status = 'open';
     }
     return $status;
 }

 function custom_bp_sanitize_redirection_url( $url ) {
     return esc_url_raw( $url, null, 'db' );
 }

 function custom_bp_sanitize_user_registration_count( $count ) {
     return absint( $count );
 }

 // Add the new setting to the BuddyPress options page
 function custom_bp_add_settings_field() {
     if ( ! function_exists( 'bp_is_active' ) ) {
         return;
     }
         add_settings_field(
         'bp-disable-site-registration',
         __( 'Registration', 'buddypress' ),
         'custom_bp_settings_field_html',
         'buddypress',
         'bp_main',
         array(
             'label_for' => 'bp-disable-site-registration',
         )
     );
     add_settings_field(
         'bp-disable-site-registration-redirection-url',
         __( 'Redirection URL', 'buddypress' ),
         'custom_bp_settings_redirection_url_html',
         'buddypress',
         'bp_main',
         array(
             'label_for' => 'bp-disable-site-registration-redirection-url',
         )
     );
     add_settings_field(
         'bp-close-registration-at-users',
         __( 'Limit User Registration Count', 'buddypress' ),
         'custom_bp_close_registration_at_users_html',
         'buddypress',
         'bp_main',
         array(
             'label_for' => 'bp-close-registration-at-users',
         )
     );
 }
 add_action( 'bp_register_admin_settings', 'custom_bp_add_settings_field',
 10, 1 );

 // Output the HTML for the setting field
 function custom_bp_settings_field_html() {
     $value = get_option( 'bp-disable-site-registration', 'open' );
     ?>
     <select name="bp-disable-site-registration" id="bp-disable-site-
 registration">
         <option value="open" <?php selected( $value, 'open' ); ?>><?php
 _e( 'Open', 'buddypress' ); ?></option>
         <option value="closed" <?php selected( $value, 'closed' );
 ?>><?php _e( 'Closed', 'buddypress' ); ?></option>
     </select>
     <?php
 }

 // Output the HTML for the redirection URL field
 function custom_bp_settings_redirection_url_html() {
     $value = get_option( 'bp-disable-site-registration-redirection-url',
 home_url() );
     ?>
     <input type="text" name="bp-disable-site-registration-redirection-url"
 id="bp-disable-site-registration-redirection-url" value="<?php echo
 esc_attr( $value ); ?>" required/>
     <?php
 }

 // Output the HTML for the close registration at users field
 function custom_bp_close_registration_at_users_html() {
     $value = get_option( 'bp-close-registration-at-users' );
     ?>
     <input type="number" name="bp-close-registration-at-users" id="bp-
 close-registration-at-users" value="<?php echo esc_attr( $value ); ?>"
 required/>
     <p class="description"><?php _e( 'Enter the maximum number of users
 allowed to register on the site. Leave it empty or set to 0 for no
 limit.', 'buddypress' ); ?></p>
     <?php
 }

 // Check if registration is open or closed
 function custom_bp_redirect_registration() {
         if ( ! bp_is_register_page() ) {
                 return;
         }
         if ( get_option( 'bp-disable-site-registration', 'open' ) !==
 'closed' ) {
                 return;
         }
         $total_users                   = count_users();
         $total_users                   = $total_users['total_users'];
         $limit_user_registration_count = absint( get_option( 'bp-close-
 registration-at-users' ) );

         if ( $total_users >= $limit_user_registration_count ) {
                 wp_redirect( get_option( 'bp-disable-site-registration-
 redirection-url' ) ); // wp_safe_redirect?
                 exit;
         }
 }
 add_action( 'bp_screens', 'custom_bp_redirect_registration' );
 }}}

-- 
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/9057#comment:3>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac


More information about the buddypress-trac mailing list