This hook checks the user's role and if the role is "Administrator" then it displays additional fields. Everything works, but when I press the refresh button, the white screen. Apache writes:

PHP Fatal error: Cannot redeclare get_current_user_role() 

Code:

 add_filter('user_contactmethods', 'my_user_contactmethods'); function my_user_contactmethods($user_contactmethods){ function get_current_user_role() { global $wp_roles; $current_user = wp_get_current_user(); $roles = $current_user->roles; $role = array_shift($roles); return $wp_roles->role_names[$role]; } $current_user_role = get_current_user_role(); if ($current_user_role == 'Administrator') { $user_contactmethods['phone'] = 'Phone: '; $user_contactmethods['adress'] = 'Adress: '; return $user_contactmethods; } } 

    1 answer 1

    This is a standard php problem. If the my_user_contactmethods function my_user_contactmethods called twice (and filters can be called repeatedly by the kernel), the nested get_current_user_role function cannot be redefined and this causes a fatal error.

    In addition, your code does not always return something (you have a return inside if), and this can also overwhelm the site.

    The user_contactmethods filter user_contactmethods called with two parameters.

    Try this:

     add_filter( 'user_contactmethods', 'my_user_contactmethods', 10, 2 ); function my_user_contactmethods( $user_contactmethods, $user ){ $current_user_role = get_current_user_role( $user ); if ($current_user_role == 'Administrator') { $user_contactmethods['phone'] = 'Phone: '; $user_contactmethods['address'] = 'Address: '; } return $user_contactmethods; } function get_current_user_role( $current_user ) { global $wp_roles; $roles = $current_user->roles; $role = array_shift( $roles ); return $wp_roles->role_names[$role]; }