You’re going to want to use the author_template
filter to process this. Just to clarify, the filter’s “author” means all users, it appears. I’m not sure why. This will be called while the backend is deciding which template page to use when showing a user’s profile on your site. You need to add an author-editor.php
file and then filter to it if the user matches your criteria.
function author_role_template( $templates="" )
{
$author = get_queried_object();
$role=$author->roles[0];
if($role == 'author') {
$templates=locate_template(array("author-author.php",$templates),false);
} else { // error if not author
$templates=locate_template(array("404.php",$templates),false);
}
return $templates;
}
add_filter( 'author_template', 'author_role_template' );
Source: Codex — Template Hierarchy
NOTE: You’ll need to verify that roll returns true for this. I’m not 100% on it the comparison of the roll
to the string
.