web-dev-qa-db-fra.com

Ajouter un champ personnalisé à la catégorie

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

Prénom:

Limace:

Parent:

La description:

Depuis que 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 (Category = Series)

Prénom:

Artiste:

Année:

Type:

Genre:

Résumé:

Limace:

Parent:

La description:

Etc...

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

21
user2996

J'ai posté un article sur la question il y a une semaine http://fr.bainternet.info/2011/wordpress-category-extra-fields

j'espère que cela t'aides.

Ohad.


Voici les détails du post:

La première chose à faire est d’ajouter les champs supplémentaires au formulaire de modification de catégorie à l’aide du crochet 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 donc que ligne par ligne dans la table 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 que l'utilisateur a soumis le formulaire de modification de catégorie. Pour ce faire, utilisez "editedcategory" avec une fonction qui parcourt chacun des champs soumis et les insérez dans la base de données à l'aide de 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 );
    }
}

Dans le 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'identifiant de la catégorie spécifique que nous venons de modifier, ce qui signifie que nous pouvons l'appeler. les données dans nos plugins ou fichiers de thème facilement 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 and easy et nous avons tous terminé. Le résultat devrait ressembler à ceci:

 enter image description here 

24
Bainternet

Depuis Wordpress 4.4, les fonctions add_term_meta () , les 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 astucieuse.

Voici ma mise à jour de celui-ci. 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');
15
Luke Simmons

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'] );
});
2
Mario62RUS

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ée 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 variables sont définies, vous devrez donc faire ces petites choses vous-même, mais cela ressemble à une base de code décente à construire au-dessus de ... :)

1
t31os