Opened 3 years ago
Last modified 21 months ago
#9057 assigned enhancement
Make BP Signups a Member's component deactivable feature
| Reported by: | shawfactor | Owned by: | imath |
|---|---|---|---|
| Priority: | high | Milestone: | Up Next |
| Component: | Members | Version: | 2.0 |
| Severity: | normal | 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)
This ticket was mentioned in Slack in #buddypress by imath. View the logs.
3 years ago
#3
@
3 years 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
@
3 years 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.
2 years ago
#7
@
2 years ago
- Keywords needs-patch added
- Summary Make register a deactivatable component → Make BP Signups a Member's component deactivable feature
- Version → 2.0
This ticket was mentioned in Slack in #buddypress by imath. View the logs.
2 years ago
This ticket was mentioned in Slack in #buddypress by dcavins. View the logs.
2 years ago
#10
@
2 years ago
- Milestone 14.0.0 → 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.
2 years ago
This ticket was mentioned in Slack in #buddypress by espellcaste. View the logs.
2 years ago
This ticket was mentioned in PR #386 on buddypress/buddypress by @imath.
22 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.
22 months ago
#18
@
22 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?
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)
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.