Opened 14 months ago
Last modified 3 months ago
#9057 assigned enhancement
Make BP Signups a Member's component deactivable feature
Reported by: |
|
Owned by: |
|
---|---|---|---|
Milestone: | Up Next | Priority: | high |
Severity: | normal | Version: | 2.0 |
Component: | Members | Keywords: | has-patch has-unit-tests needs-testing |
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 (19)
#1
@
14 months ago
- Component changed from Core to Members
- Milestone changed from Awaiting Review to 14.0.0
This ticket was mentioned in Slack in #buddypress by imath. View the logs.
13 months ago
#3
@
13 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 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' );
#4
@
13 months ago
Hi @teeboy4real
Thanks for your feedback, suggestion & code. I’ll look at it asap 👍
This ticket was mentioned in Slack in #buddypress by emaralive. View the logs.
11 months ago
#7
@
11 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.
9 months ago
This ticket was mentioned in Slack in #buddypress by dcavins. View the logs.
8 months ago
#10
@
8 months ago
- Milestone changed from 14.0.0 to Up Next
We need more time, sorry to postpone this to next major release.
This ticket was mentioned in Slack in #buddypress by imath. View the logs.
6 months ago
This ticket was mentioned in Slack in #buddypress by espellcaste. View the logs.
5 months ago
This ticket was mentioned in PR #386 on buddypress/buddypress by @imath.
4 months ago
#15
- Keywords has-patch has-unit-tests added; needs-patch removed
This PR introduces a way to completely disable BuddyPress signups using the following filter:
add_filter( 'bp_is_members_signups_active', '__return_false' );
Once this filter is in place:
- The registration workflow used is the one provided by WordPress.
- The Admin screen to manage pending accounts is not available.
- The Admin/Tools screen about invitations and optouts are disabled.
- Options to allow site invitations or site memberships are disabled.
I'd need @dcavins to check everything is fine if a user tries to reach a front-end screen about site invitations or site memberships. In particular, I believe there's still work to do in the case the above filter was added after site invitations or site memberships were allowed from BuddyPress settings.
I've currently tested on a regular WordPress config:
- registering when the Members component signups feature is active.
- registering when the Members component signups feature is not active.
We need more testing for Multisite configs.
Some parts of this PR code is duplicating with https://github.com/buddypress/buddypress/pull/368: mainly the BP_Component_Feature
class.
Trac ticket: https://buddypress.trac.wordpress.org/ticket/9057
This ticket was mentioned in Slack in #buddypress by imath. View the logs.
4 months ago
#18
@
4 months ago
@imath What would we expect to happen in the case I think you're describing above?
- User is sent a site invitation or makes a membership request (and the request is accepted--so the activation link is sent to the user)
- Admin completely disables BP signup
- User tries to accept invitation or follow activation link
- What should happen?
I think that if the admin has deactivated BP signups, then the invitation or activation should fail, since that refers back to a now-disabled method. What do you think?
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.