Ho pubblicato un How To a questo proposito una settimana fa http://en.bainternet.info/2011/wordpress-category-extra-fields
spero che sia di aiuto.
Ohad.
Ecco i dettagli del post:
La prima cosa che dobbiamo fare è aggiungere i campi extra al modulo di modifica della categoria usando il gancio edit_category_form_fields e usiamo una semplice funzione che stamperà i campi extra.
<?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
}
Come puoi vedere, ho aggiunto 4 nuovi campi e tutti sono in un array Cat_meta [chiave] perché in questo modo creiamo solo una riga nella tabella delle opzioni per salvare tutti i campi extra della categoria anziché una riga per ogni campo.
Successivamente dobbiamo salvare i campi extra nel database una volta che un utente invia il modulo di modifica della categoria e lo facciamo usando "modificato_categoria" con una funzione che verrà eseguita attraverso ciascuno dei campi inviati e li inserirà nel database usando la funzione update_option , come questo:
<?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 );
}
}
Dal codice sopra puoi vedere che tutti i campi extra che abbiamo aggiunto sono memorizzati nella tabella delle opzioni del database con il nome 'ID_categoria', dove ID è l'id della categoria specifica che abbiamo appena modificato e ciò significa che possiamo chiamarlo dati nei nostri plugin o file tematici facilmente usando la funzione get_option.
ad esempio, il mio ID categoria è 25, quindi il mio codice sarà simile
<?php $cat_data = get_option('category_25'); ?>
Come ho affermato all'inizio, ho bisogno di visualizzare un'immagine diversa per ogni categoria, quindi in quel caso ho aggiunto queste poche righe di codice alla categoria.php del mio tema subito dopo il codice che mostra il titolo della 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>';
}
Bello e facile e abbiamo finito. Il risultato dovrebbe essere simile al seguente: