J'ai publié un How To à ce sujet il y a une semaine http://en.bainternet.info/2011/wordpress-category-extra-fields
J'espère que cela t'aides.
Ohad.
Voici les détails de l'article:
La première chose que nous devons faire est d'ajouter les champs supplémentaires au formulaire d'édition de catégorie en utilisant le hook edit_category_form_fields et nous utilisons une fonction simple qui imprimera les champs supplémentaires.
<?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
}
Comme vous pouvez le voir, j'ai ajouté 4 nouveaux champs et tous sont dans un tableau Cat_meta [clé] parce que de cette façon, nous créons uniquement sur la ligne dans le tableau des options pour enregistrer tous les champs supplémentaires de la catégorie au lieu d'une ligne pour chaque champ.
Ensuite, nous devons enregistrer les champs supplémentaires dans la base de données une fois qu'un utilisateur soumet le formulaire de modification de catégorie et nous le faisons en utilisant "modified_category" avec une fonction qui parcourra chacun des champs soumis et les insérera dans la base de données en utilisant la fonction update_option , comme ça:
<?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 );
}
}
À partir du code ci-dessus, vous pouvez voir que tous les champs supplémentaires que nous avons ajoutés sont stockés dans la table d'options de la base de données avec le nom 'category_ID', où ID est l'id de la catégorie spécifique que nous venons de modifier et cela signifie que nous pouvons l'appeler les données dans nos plugins ou fichiers de thème facilement en utilisant la fonction get_option.
dire, par exemple, mon identifiant de catégorie est 25 alors mon code ressemblera
<?php $cat_data = get_option('category_25'); ?>
Comme je l'ai dit au début, je dois afficher une image différente pour chaque catégorie, donc dans ce cas, j'ai ajouté ces quelques lignes de code au category.php de mon thème juste après le code qui affiche le titre de la catégorie:
<?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>';
}
Agréable et facile et nous avons tous terminé. Le résultat devrait ressembler à ceci: