Hello Brajesh,
Please can you take a look at this code I cant seem to add the settings option in the default buddypress options page
/* * 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() { register_setting( 'bp', 'bp-disable-site-registration', 'sanitize_text_field' ); register_setting( 'bp', 'bp-disable-site-registration-redirection-url', 'sanitize_text_field' ); } add_action( 'admin_init', 'custom_bp_register_settings' ); // Add the new setting to the BuddyPress options page function custom_bp_add_settings_field() { add_settings_field( 'bp-disable-site-registration', __( 'Registration', 'buddypress' ), 'custom_bp_settings_field_html', 'buddypress', 'bp_settings_tab_general', 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_settings_tab_general', array( 'label_for' => 'bp-disable-site-registration-redirection-url', ) ); } add_action( 'bp_admin_settings_sanitize_option', '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' ); ?> <input type="text" name="bp-disable-site-registration-redirection-url" id="bp-disable-site-registration-redirection-url" value="<?php echo esc_attr( $value ); ?>" /> <?php } // Redirect users if registration is closed function custom_bp_redirect_registration() { if ( get_option( 'bp-disable-site-registration' ) === 'closed' ) { wp_redirect( get_option( 'bp-disable-site-registration-redirection-url' ) ); exit; } } add_action( 'bp_screens', 'custom_bp_redirect_registration' );
Thanks
What im trying to achieve is instead of using the default wordpress settings option to disable registrations (Anyone can register). I want to leave this default option enabled but disable buddypress registration using page redirection
when user tries to access (sign-up) page redirect the user to (coming-soon) page
Hi Tosin,
The problem with above code is the option group name and section name.Please find it updated here.
<?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() { register_setting( 'buddypress', 'bp-disable-site-registration', 'sanitize_text_field' ); register_setting( 'buddypress', 'bp-disable-site-registration-redirection-url', 'sanitize_text_field' ); } add_action( 'bp_register_admin_settings', 'custom_bp_register_settings' ); // Add the new setting to the BuddyPress options page function custom_bp_add_settings_field() { 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_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' ); ?> <input type="text" name="bp-disable-site-registration-redirection-url" id="bp-disable-site-registration-redirection-url" value="<?php echo esc_attr( $value ); ?>" /> <?php } // Redirect users if registration is closed function custom_bp_redirect_registration() { if ( get_option( 'bp-disable-site-registration' ) === 'closed' ) { wp_redirect( get_option( 'bp-disable-site-registration-redirection-url' ) ); exit; } } add_action( 'bp_screens', 'custom_bp_redirect_registration' );
I did not go through other sections of your code. In case you need assistance there, I can look into that.
Regards
BrajeshHi Brajesh
The code worked, it has been further improved to limit based of membership count and work only on bp_is_register_page() can you please review it
<?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() { register_setting( 'buddypress', 'bp-disable-site-registration', 'sanitize_text_field' ); register_setting( 'buddypress', 'bp-disable-site-registration-redirection-url', 'sanitize_text_field' ); register_setting( 'buddypress', 'bp-close-registration-at-users', 'intval' ); // added this line } add_action( 'bp_register_admin_settings', 'custom_bp_register_settings' ); // Add the new setting to the BuddyPress options page function custom_bp_add_settings_field() { 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( // added this block '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' ); ?> <input type="text" name="bp-disable-site-registration-redirection-url" id="bp-disable-site-registration-redirection-url" value="<?php echo esc_attr( $value ); ?>" /> <?php } // Output the HTML for the close registration at users field // added this function 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 ); ?>" /> <p class="description"><?php _e( 'Close registration when the total number of users reaches this number.', 'buddypress' ); ?></p> <?php } // Redirect users if registration is closed function custom_bp_redirect_registration() { $total_users = count_users(); // added this line $total_users = $total_users['total_users']; // added this line if ( bp_is_register_page() && ( get_option( 'bp-disable-site-registration' ) === 'closed' || $total_users >= get_option( 'bp-close-registration-at-users' ) ) ) { // modified this line wp_redirect( get_option( 'bp-disable-site-registration-redirection-url' ) ); exit; } } add_action( 'bp_screens', 'custom_bp_redirect_registration' );
Hi Brajesh
This is the improved code, there are no more issues
<?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 wp_kses_post( $url ); } 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() { $total_users = count_users(); $total_users = $total_users['total_users']; $registration_status = get_option( 'bp-disable-site-registration', 'open' ); $limit_user_registration_count = get_option( 'bp-close-registration-at-users' ); if ( bp_is_register_page() && $registration_status === 'closed' && ( (empty($limit_user_registration_count) || $limit_user_registration_count == 0) || $total_users >= $limit_user_registration_count ) ) { wp_redirect( get_option( 'bp-disable-site-registration-redirection-url' ) ); exit; } } add_action( 'bp_screens', 'custom_bp_redirect_registration' );
Hi Tosin,
Code seems to be fine except for sanitizing url, wp_kses_post is overkill, esc_url_raw should be fine.Also, your redirection callback is very inefficient, hitting database for user count on each page load.
Here is an updated version to avoid that.
// 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; } }
Regards
Brajesh
You must be logged in to reply to this topic.