You can have full control over the taxonomy/term/ID page by intercepting the menu call with hook_menu_alter() and let the content be generated by a custom function.
This allows you to completely customize the taxonomy term page. You can check for a certain vocabulary ("Authors") and have a custom generated page for that vocab and leave the others untouched.
You can have fine grained control over how results are displayed using view modes and templates.
No contributed modules are needed.
Here is an example to be used in a custom module. The custom content is generated using Drupals EntityFieldQuery because it is a lazy and robust way of generating a list of content, but anything goes here.
.
/**
* * Implements hook_menu_alter().
*/
function YOURMODULE_menu_alter(&$menu) {
if (isset($menu['taxonomy/term/%taxonomy_term'])) {
$menu['taxonomy/term/%taxonomy_term']['page callback'] = 'YOURMODULE_taxonomy_term_page';
$menu['taxonomy/term/%taxonomy_term']['access arguments'] = array(2);
}
}
/**
* Callback function for taxonomy/term/%taxonomy_term.
*
* @param $taxonomy_term object
* @return * Themed page for a taxonomy term, specific to the term's vocabulary.
*/
function YOURMODULE_taxonomy_term_page($term) {
$voc = taxonomy_vocabulary_load($term->vid);
switch ($voc->machine_name) {
case 'SOMEVOCUBALARY':
// here you generate the actual content of the page
// could be done e.g. with an entityfieldquery as follows
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->fieldCondition('field_gallery', 'tid', $term->tid)
->propertyOrderBy('sticky', 'DESC')
->propertyCondition('status', 1);
$result = $query->execute();
if (!empty($result['node'])) {
$build['content']['nodes'] = node_view_multiple(node_load_multiple(array_keys($result['node'])), 'teaser'); // output the node teasers. you can control the markup of the 'teaser' view mode with a template in the theme folder
} else {
$build['content']['status']['#markup'] = t('No results found for term ID !tid.', array('!tid' => $term->tid));
}
return $build;
// If the term page is for an other vocabulary then use Drupal's default taxonomy page
default:
module_load_include('inc', 'taxonomy', 'taxonomy.pages');
return taxonomy_term_page($term);
}
}