Ajouter un champ personnalisé à la catégorie

22

Je voudrais ajouter des champs personnalisés à une certaine catégorie. Une catégorie n'a que les champs suivants:

Prénom:

Limace:

Parent:

La description:

Puisque j'ai un site de séries télévisées, je veux ajouter quelques champs supplémentaires, je veux quelque chose comme ça, quand je crée une nouvelle catégorie (Catégorie = Série)

Prénom:

Artiste:

An:

Type:

Genre:

Sommaire:

Limace:

Parent:

La description:

Etc...

Avez-vous besoin d'aide? Merci d'avance.

Earlee
la source
Voici une feuille de triche que j'utilise pour ce faire. Il a les crochets et filtres d'action pertinents dans une courte liste. charlestonsw.com/…
Lance Cleveland

Réponses:

24

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:

entrez la description de l'image ici

Bainternet
la source
4
Veuillez publier le contenu principal de votre blog dans cette réponse. La pourriture de liens peut se produire, même sur votre propre blog.
Django Reinhardt
1
Cela a été répondu à 2011 copain :)
Bainternet
1
Votre point étant?
Django Reinhardt
4
Si vous pensez que cette réponse n'a aucune valeur, elle devrait être supprimée ... Cependant, cette question a plus de 16 000 vues. Je pense que la question reste utile pour les gens, malgré son âge, et cette réponse serait améliorée en incluant les détails du lien en question.
Django Reinhardt
4
... alors que vous étiez occupés à en débattre (il y a un an), il m'a fallu moins de 5 minutes pour tout mettre dans la réponse. C'est facile ...
MxmastaMills
19

Depuis Wordpress 4.4, les fonctions add_term_meta () , update_term_meta () et get_term_meta () ont été ajoutées. Cela signifie que le code fourni par MxmastaMills peut être mis à jour pour utiliser une approche beaucoup moins hacky.

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');
Luke Simmons
la source
2
Peu de choses à noter: dans le edited_categorycrochet, tag_IDsera dans le $_POSTtableau, pas dans le $_GET. Ajoutera également add_term_metaune nouvelle entrée au lieu de remplacer une ancienne possible. Utilisez update_term_metaplutôt.
Martin Dimitrov
@MartinDimitrov Pourriez-vous corriger la réponse de luke-simmons en cliquant sur le bouton modifier? De cette façon, tout le monde peut utiliser le meilleur code disponible, même ceux qui ne codent pas très bien (concepteur ici!). Merci!
Hugo
1
Il ne sauvegarde pas les données sous la forme
Dev
@Dev enregistre les données, il ne les affiche tout simplement pas sauf si vous changez $ _POST en $ _GET en deuxième ligne.
banesto
3

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'] );
});
Mario62RUS
la source
C'est moins maladroit que l'autre et je viens de le vérifier avec WordPress 5.2.2
nico gawenda
1

Paul Menard a fourni un exemple de la façon de créer et d'utiliser le terme méta dans son blog ...
Méta personnalisé pour les nouvelles taxonomies dans WordPress 3.0 .

Il n'y a pas d'exemple de création de la table DB ou de vérification des $_POSTvariables, donc vous devrez faire ces petites choses vous-même, mais cela ressemble à une base de code décente à construire au-dessus de ... :)

t31os
la source