如何在WordPress中添加注册中的用户角色下拉菜单

时间:2015-07-26 作者:madu

如何在wordpress注册中添加用户角色下拉列表

 function myplugin_register_form() {

global $wp_roles;

echo \'<select name="role">\';
foreach ( $wp_roles->roles as $key=>$value ): 
echo \'<option value="\'.$key.\'">\'.$value[\'name\'].\'</option>\';
 endforeach;
echo \'</select>\';


}

add_action( \'register_form\', \'myplugin_register_form\' );

add_action( \'user_register\', \'myplugin_user_register\' );
    function myplugin_user_register( $user_id ) {
        if ( ! empty( $_POST[\'role\'] ) ) {
            update_user_meta( $user_id, \'role\', trim( $_POST[\'role\'] ) );
        }
    }
我在函数中使用了此代码。php但不起作用

2 个回复
最合适的回答,由SO网友:Webloper 整理而成

  1. https://codex.wordpress.org/Customizing_the_Registration_Form
  2. https://codex.wordpress.org/Function_Reference/wp_update_user
而不是update_user_meta 用户注册钩子使用中的函数wp_update_user

以下是工作示例:

//1. Add a new form element...
add_action( \'register_form\', \'myplugin_register_form\' );
function myplugin_register_form() {

    global $wp_roles;

    echo \'<select name="role" class="input">\';
    foreach ( $wp_roles->roles as $key=>$value ) {
       // Exclude default roles such as administrator etc. Add your own
       if ( ! in_array( $value[\'name\'], [ \'Administrator\', \'Contributor\', ] ) {
          echo \'<option value="\'.$key.\'">\'.$value[\'name\'].\'</option>\';
       }
    }
    echo \'</select>\';
}

//2. Add validation.
add_filter( \'registration_errors\', \'myplugin_registration_errors\', 10, 3 );
function myplugin_registration_errors( $errors, $sanitized_user_login, $user_email ) {

    if ( empty( $_POST[\'role\'] ) || ! empty( $_POST[\'role\'] ) && trim( $_POST[\'role\'] ) == \'\' ) {
         $errors->add( \'role_error\', __( \'<strong>ERROR</strong>: You must include a role.\', \'mydomain\' ) );
    }

    return $errors;
}

//3. Finally, save our extra registration user meta.
add_action( \'user_register\', \'myplugin_user_register\' );
function myplugin_user_register( $user_id ) {

   $user_id = wp_update_user( array( \'ID\' => $user_id, \'role\' => $_POST[\'role\'] ) );
}

SO网友:sohan
<?php global $wp_roles; ?>

<select name="role">
<?php foreach ( $wp_roles->roles as $key=>$value ): ?>
<option value="<?php echo $key; ?>"><?php echo $value[\'name\']; ?></option>
<?php endforeach; ?>
</select>
结束