Skip to:
Content

BuddyPress.org

Opened 6 months ago

Last modified 5 days ago

#9057 assigned enhancement

Make BP Signups a Member's component deactivable feature

Reported by: shawfactor's profile shawfactor Owned by: imath's profile imath
Milestone: Up Next Priority: normal
Severity: normal Version: 2.0
Component: Members Keywords: needs-patch
Cc:

Description

Right now register is a fully fledged comonent but it is not listed in options-general.php?page=bp-components and cannot be deactivated.

This is not ideal as users may want to use non buddypress ways to register users some of which (e.g. registering via a third party like google) are much lower friction. These methods usually require registration to be open so it is not a question of toggling the global setting

Change History (10)

#1 @imath
6 months ago

  • Component changed from Core to Members
  • Milestone changed from Awaiting Review to 14.0.0

Thanks for your feedback, I agree about giving the choice to admin, see #9046

I’m unsure about the how, moving signups out of the members component to make it a separate one seems a bit too much to me. I was more thinking to an option. But let’s discuss about it during 14.0.0 dev cycle.

This ticket was mentioned in Slack in #buddypress by imath. View the logs.


5 months ago

#3 @teeboy4real
5 months ago

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 number of already registered members. I would love to share my personal custom code with you so you can review it and improve on it. Adding this to core would be really awesome.

For example disable registrations when community has reached a threshold of 10,000 registered members

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' );
Last edited 5 months ago by teeboy4real (previous) (diff)

#4 @imath
5 months ago

Hi @teeboy4real

Thanks for your feedback, suggestion & code. I’ll look at it asap 👍

#5 @imath
4 months ago

  • Owner set to imath
  • Status changed from new to assigned

This ticket was mentioned in Slack in #buddypress by emaralive. View the logs.


3 months ago

#7 @imath
3 months ago

  • Keywords needs-patch added
  • Summary changed from Make register a deactivatable component to Make BP Signups a Member's component deactivable feature
  • Version set to 2.0

This ticket was mentioned in Slack in #buddypress by imath. View the logs.


5 weeks ago

This ticket was mentioned in Slack in #buddypress by dcavins. View the logs.


13 days ago

#10 @imath
5 days ago

  • Milestone changed from 14.0.0 to Up Next

We need more time, sorry to postpone this to next major release.

Note: See TracTickets for help on using tickets.