Acho que tens que usar conditional tags na sua single.php. Dependendo da categoria, vc carrega o código correspondente com includes (chama os arquivos para cada categoria – tipo “single-cinema.php”, “single-musica.php”, etc.).
http://codex.wordpress.org/Conditional_Tags
Tenho um tema aqui que possui o seguinte no category.php
<?php
if (in_category('blog')) {include (TEMPLATEPATH . '/category_blog.php');
}
else if (in_category('gallery')) {include (TEMPLATEPATH . '/category_image.php');
}
else if (in_category('media')) {include (TEMPLATEPATH . '/category_media.php');
}
else if (in_category('folio')) {include (TEMPLATEPATH . '/category_portfolio.php');
}
else if (in_category('archive')) {include (TEMPLATEPATH . '/category_list.php');
}
else { include (TEMPLATEPATH . '/category_standard.php');
}
?>
Deve dar uma luz..
Seria mais ou menos assim mesmo, só que no single.php.
Single diferente de acordo com a categoria:
<?php
// Chamo a variavel global que me trás as informações do post acessado
global $post;
// Aqui eu pego o array com os dados da categoria do post
$categoria_arr = get_the_category($post->ID);
// Aqui eu pego o slug da primeira categoria do post
$categoria = $categoria_arr[0]->slug;
// inicio o swit que vai verificar a categoria e incluir o arquivo com leyout correspondente
switch ($categoria) {
case 'x':
include_once TEMPLATEPATH . '/category-x.php';
break;
case 'y':
include_once TEMPLATEPATH . '/category-y.php';
break;
case 'z':
include_once TEMPLATEPATH . '/category-z.php';
break;
// Se naõ for nenhuma das categorias com layout pré definido chamo o layout padrão
default:
include_once TEMPLATEPATH . '/singl.php';
}
?>