Eu publiquei um How To sobre isso há uma semana http://en.bainternet.info/2011/wordpress-category-extra-fields
espero que isto ajude.
Ohad.
Aqui estão os detalhes do post:
A primeira coisa que precisamos fazer é adicionar os campos extras ao formulário de edição de categoria usando o gancho edit_category_form_fields e usamos uma função simples que imprimirá os campos extras.
<?php
//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');
//add extra fields to category edit form callback function
function extra_category_fields( $tag ) { //check for existing featured ID
$t_id = $tag->term_id;
$cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
<span class="description"><?php _e('Image for category: use full url with '); ?></span>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
<span class="description"><?php _e('extra field'); ?></span>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
<span class="description"><?php _e('extra field'); ?></span>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
<textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
<span class="description"><?php _e('extra field'); ?></span>
</td>
</tr>
<?php
}
Como você pode ver, adicionei 4 novos campos e todos eles estão em uma matriz Cat_meta [key], porque dessa forma criamos apenas na linha da tabela de opções para salvar todos os campos extras da categoria em vez de uma linha para cada campo.
Em seguida, precisamos salvar os campos extras no banco de dados assim que um usuário enviar o formulário de edição da categoria e o fizermos usando "category_ editado" com uma função que percorrerá cada um dos campos enviados e os inserirá no banco de dados usando a função update_option , como isso:
<?php
// save extra category extra fields hook
add_action ( 'edited_category', 'save_extra_category_fileds');
// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
if ( isset( $_POST['Cat_meta'] ) ) {
$t_id = $term_id;
$cat_meta = get_option( "category_$t_id");
$cat_keys = array_keys($_POST['Cat_meta']);
foreach ($cat_keys as $key){
if (isset($_POST['Cat_meta'][$key])){
$cat_meta[$key] = $_POST['Cat_meta'][$key];
}
}
//save the option array
update_option( "category_$t_id", $cat_meta );
}
}
No código acima, você pode ver que todos os campos extras adicionados foram armazenados na tabela de opções do banco de dados com o nome 'category_ID', em que ID é o ID da categoria específica que acabamos de editar e isso significa que podemos chamar isso dados em nossos plugins ou arquivos de temas facilmente usando a função get_option.
digamos, por exemplo, meu código de categoria é 25, então meu código será semelhante
<?php $cat_data = get_option('category_25'); ?>
Como afirmei no começo, preciso exibir uma imagem diferente para cada categoria. Nesse caso, adicionei essas poucas linhas de código à category.php do meu tema logo após o código que exibe o título da categoria:
<?php
//first get the current category ID
$cat_id = get_query_var('cat');
//then i get the data from the database
$cat_data = get_option("category_$cat_id");
//and then i just display my category image if it exists
if (isset($cat_data['img'])){
echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}
Agradável e fácil, e estamos todos prontos. O resultado deve ser semelhante a este: