Ajouter un champ personnalisé à la catégorie

21

J'aimerais ajouter des champs personnalisés à une certaine catégorie. Une catégorie ne contient que les champs suivants:

Nom:

Limace:

Parent:

Description:

Étant donné que j'ai un site de séries télévisées, je souhaite ajouter d'autres champs. Je souhaite obtenir quelque chose comme cela lorsque je crée une nouvelle catégorie (Catégorie = Série)

Nom:

Artiste:

Année:

Type:

Genre:

Résumé:

Limace:

Parent:

Description:

Et ainsi de suite ...

Toute aide s'il vous plaît? Merci d'avance.

    
posée Earlee 07.02.2011 - 13:27
la source

4 réponses

24

J'ai posté un article à ce sujet il y a une semaine enlace

.

espérons que cela vous aidera.

Ohad.

Voici les détails du message:

La première chose à faire est d’ajouter les champs supplémentaires au formulaire de modification de catégorie à l’aide du hook edit_category_form_fields. Nous utilisons une fonction simple qui permet d’imprimer 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 se trouvent dans un tableau Cat_meta [clé], car nous ne créons ainsi que les lignes du tableau d'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 que l'utilisateur a soumis le formulaire de modification de catégorie. Pour ce faire, utilisez "edited_category" avec une fonction qui parcourt chacun des champs soumis et les insère dans la base de données à l'aide de la fonction update_option, comme ceci:

<?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 );
    }
}

A 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 'ID_catégorie', ID étant l'identifiant de la catégorie spécifique que nous venons d'éditer, ce qui signifie que nous pouvez appeler facilement ces données dans nos plugins ou fichiers de thème en utilisant la fonction get_option.

disons par exemple mon identifiant de catégorie est 25 alors mon code va ressembler à

<?php $cat_data = get_option('category_25'); ?>

Comme je l'ai indiqué au début, je dois afficher une image différente pour chaque catégorie. Dans ce cas, j'ai ajouté ces quelques lignes de code au fichier 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>';
}

Nice et facile et nous avons tous terminé. Le résultat devrait ressembler à ceci:

    
réponse donnée Bainternet 07.02.2011 - 15:16
la source
15

À partir de Wordpress 4.4, le add_term_meta () , le update_term_meta () et les get_term_meta () ont été ajoutés . Cela signifie que le code fourni par MxmastaMills peut être mis à jour pour utiliser une approche beaucoup moins astucieuse.

Voici ma mise à jour. Il n'y a qu'un seul champ car je voulais ajouter un titre personnalisé, mais cela fonctionnera de la même manière pour tous les champs que vous souhaitez ajouter.

function addTitleFieldToCat(){
    $cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
    ?> 
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
        <td>
        <input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
            <span class="description"><?php _e('Title for the Category '); ?></span>
        </td>
    </tr>
    <?php

}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');

function saveCategoryFields() {
    if ( isset( $_POST['cat_title'] ) ) {
        update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
    }
}
add_action ( 'edited_category', 'saveCategoryFields');
    
réponse donnée Luke Simmons 29.06.2016 - 22:17
la source
2

Ce code fonctionne:

add_action ( 'edit_category_form_fields', function( $tag ){
    $cat_title = get_term_meta( $tag->term_id, '_pagetitle', true ); ?>
    <tr class='form-field'>
        <th scope='row'><label for='cat_page_title'><?php _e('Category Page Title'); ?></label></th>
        <td>
            <input type='text' name='cat_title' id='cat_title' value='<?php echo $cat_title ?>'>
            <p class='description'><?php _e('Title for the Category '); ?></p>
        </td>
    </tr> <?php
});
add_action ( 'edited_category', function() {
    if ( isset( $_POST['cat_title'] ) )
        update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
});
    
réponse donnée Mario62RUS 14.01.2018 - 16:01
la source
1

Paul Ménard a donné un exemple de la création et de l’utilisation de méta de termes dans son blog ...
Méta personnalisé pour les nouvelles taxonomies dans WordPress 3.0 .

Il n'y a aucun exemple de création de la table de base de données ou de vérification de $_POST vars sont définis, vous devrez donc faire ces petites choses vous-même, mais cela ressemble à une base de code décent à construire sur ... :)

    
réponse donnée t31os 07.02.2011 - 13:51
la source

Lire d'autres questions sur les étiquettes