Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- Plugin Name: Change The Role
- Plugin URI: https://ja.forums.wordpress.org/topic/141608
- Version: 0.1a.20141031
- Author: mizube
- Author URI: https://ja.forums.wordpress.org/profile/419438
- Text Domain: change-the-role
- Domain Path: /languages/
- Description: Enables users to change the user role in some roles.
- */
- add_action( 'plugins_loaded', array( 'ChangeTheRole', '__boot' ) );
- register_deactivation_hook( __FILE__, array( 'ChangeTheRole', 'deactivated' ) );
- class ChangeTheRole {
- public $textdomain = 'change-the-role';
- public static function __boot() {
- $class = __CLASS__;
- new $class();
- }
- public function __construct() {
- load_plugin_textdomain( $this->textdomain, false, basename( dirname( __FILE__ ) ) . '/languages/' );
- add_action( 'personal_options_update', array( $this, 'action_personal_options_update' ) );
- add_action( 'personal_options', array( $this, 'action_personal_options' ) );
- add_action( 'admin_init', array( $this, 'action_admin_init' ) );
- }
- public function action_personal_options_update( $user_id ) {
- if ( !$user_id || !isset( $_POST['erc_role'] ) || !current_user_can( 'edit_user', $user_id ) )
- return;
- $erc_roles = get_option( 'erc_changeable_roles', array() );
- $erc_role = sanitize_text_field( $_POST['erc_role'] );
- if ( !in_array( $erc_role, $erc_roles ) )
- return;
- $user_roles = get_userdata( $user_id )->roles;
- $has_roles = false;
- foreach ( $user_roles as $user_role ) {
- if ( in_array( $user_role, $erc_roles ) ) {
- $has_roles = true;
- break;
- }
- }
- if ( !$has_roles ) return;
- $wp_user = new WP_User( $user_id );
- $wp_user->set_role( $erc_role );
- unset( $wp_user );
- }
- public function action_personal_options( $profileuser ) {
- global $wp_roles;
- $role_names = $wp_roles->get_names();
- $erc_roles = get_option( 'erc_changeable_roles', array() );
- $has_roles = false;
- foreach ( $profileuser->roles as $user_role ) {
- if ( in_array( $user_role, $erc_roles ) ) {
- $has_roles = true;
- break;
- }
- }
- if ( !empty( $erc_roles ) && $has_roles && !current_user_can( 'edit_users' ) ) {
- echo '<table class="form-table"><tr><th scope="row"><label for="erc_role">' . __( 'Role' ) . '</label></th><td>';
- echo '<select name="erc_role" id="erc_role">';
- foreach ( $erc_roles as $role ) {
- echo '<option value="' . $role . '"'
- . selected( in_array( $role, $profileuser->roles ), true, false ) . '>'
- . translate_user_role( $role_names[$role] ) . '</option>';
- }
- echo '</select>';
- echo '</td></tr></table>';
- }
- }
- public function action_admin_init() {
- add_settings_field(
- 'erc_changeable_roles',
- __( 'Changeable Roles', $this->textdomain ),
- array( $this, 'callback_render_roles_list' ),
- 'general',
- 'default'
- );
- register_setting( 'general', 'erc_changeable_roles' );
- }
- public function callback_render_roles_list() {
- global $wp_roles;
- $roles = $wp_roles->get_names();
- $option = get_option( 'erc_changeable_roles', array() );
- echo '<ul>';
- foreach ( $roles as $role => $label ) {
- if( isset( $wp_roles->roles[$role]['capabilities']['manage_options'] ) ) continue;
- echo '<li><label><input type="checkbox" name="erc_changeable_roles[]" value="' . $role . '" '
- . checked( in_array( $role, $option ), true, false ) . ' /> '
- . translate_user_role( $label ) . '</label></li>';
- }
- echo '</ul>';
- }
- public static function deactivated() {
- delete_option( 'erc_changeable_roles' );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement