[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