web-dev-qa-db-fra.com

Ajouter des champs de taxonomie personnalisés lors de la création d'une nouvelle taxonomie

Edit: Note importante pour WordPress v4.4 et ultérieur

Cette question utilisait une excellente solution de contournement pour le manque de méta terme réel dans les anciennes versions de WordPress, mais depuis la sortie de WordPress v4.4, la méta terme réel a été introduite , et c'est définitivement la voie à suivre maintenant.

Voici un article qui ressemble à un bon point de départ pour la méta de terme dans WordPress 4.4+

Je laisse cette question en suspens car elle pourrait toujours être utile pour les utilisateurs de code plus ancien, mais je voulais ajouter la note ci-dessus afin que les développeurs qui commencent une nouvelle implémentation du terme méta soient sur la bonne voie.

Fin de montage


J'ai pu exploiter this super tutoriel de @Bainternet afin d'ajouter des champs personnalisés pour les taxonomies. J'ai modifié le balisage et ajouté un rappel distinct pour ajouter des champs à la page d'administration "Ajouter une catégorie". Mon code est à la fin de cette question.

J'ai cependant eu un gotcha; l'entrée du champ personnalisé apparaît sur la page Ajouter une nouvelle catégorie, mais le champ n'est pas enregistré.

J'ai remarqué que la page d'ajout d'une nouvelle taxonomie utilise ajax, ce qui pourrait en partie faire partie du problème. J'ai essayé de désactiver JS et je suis toujours confronté au même problème. J'ai creusé autour du noyau à la recherche d'un crochet, mais je n'en ai pas trouvé. Il existe différents tutoriels sur le net, mais ils semblent tous s'appuyer sur l'écran d'édition de la taxonomie pour répondre à leurs demandes.

Des idées sur la façon de faire fonctionner cela?

/**
 * Add extra fields to custom taxonomy edit and add form callback functions
 */
// Edit taxonomy page
function extra_edit_tax_fields($tag) {
    // Check for existing taxonomy meta for term ID.
    $t_id = $tag->term_id;
    $term_meta = get_option( "taxonomy_$t_id" ); ?>
    <tr class="form-field">
    <th scope="row" valign="top"><label for="cat_Image_url"><?php _e( 'Category Navigation Image URL' ); ?></label></th>
        <td>
            <input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta['img'] ) ? esc_attr( $term_meta['img'] ) : ''; ?>">
            <p class="description"><?php _e( 'Enter the full URL to the navigation image used for this category.' ); ?></p>
        </td>
    </tr>
<?php
}
add_action( 'category_edit_form_fields', 'extra_edit_tax_fields', 10, 2 );

// Add taxonomy page
function extra_add_tax_fields( $tag ) {
    // Check for existing taxonomy meta for term ID.
    $t_id = $tag->term_id;
    $term_meta = get_option( "taxonomy_$t_id" ); ?>
    <div class="form-field">
        <label for="cat_Image_url"><?php _e( 'Category Navigation Image URL' ); ?></label>
        <input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta['img'] ) ? esc_attr( $term_meta['img'] ) : ''; ?>">
        <p class="description"><?php _e( 'Enter the full URL to the navigation image used for this category.' ); ?></p>
    </div>
<?php
}
add_action( 'category_add_form_fields', 'extra_add_tax_fields', 10, 2 );

// Save extra taxonomy fields callback function.
function save_extra_taxonomy_fields( $term_id ) {
    if ( isset( $_POST['term_meta'] ) ) {
        $t_id = $term_id;
        $term_meta = get_option( "taxonomy_$t_id" );
        $cat_keys = array_keys( $_POST['term_meta'] );
        foreach ( $cat_keys as $key ) {
            if ( isset ( $_POST['term_meta'][$key] ) ) {
                $term_meta[$key] = $_POST['term_meta'][$key];
            }
        }
        // Save the option array.
        update_option( "taxonomy_$t_id", $term_meta );
    }
}   
add_action( 'edited_category', 'save_extra_taxonomy_fields', 10, 2 );   
//add_action( '...Can't find hook to enable saving custom fields when adding a new term
6
Dave Romsey

Résolu!

add_action( 'create_category', 'save_extra_taxonomy_fields', 10, 2 );   

Accessoires du plugin Catégorie Meta . J'ai téléchargé divers plugins de méta de catégorie à partir du référentiel WP. Celui-ci a la possibilité d'ajouter les métadonnées sur l'écran Ajouter un nouveau. J'ai fouillé dans le code et trouvé le crochet insaisissable create_ {term}.

6
Dave Romsey

Je pense que le tutoriel que vous avez mentionné était excellent et que je me suis basé sur ce code. Il stocke les métas de la taxonomie menu_category dans les formulaires d’ajout et de modification de cette taxonomie et les affiche dans le formulaire de modification. L'entrée de la table d'options serait taxomomy_24_metas pour le terme id 24.

add_action('menu_category_edit_form_fields','menu_category_edit_form_fields');
add_action('menu_category_add_form_fields','menu_category_edit_form_fields');
add_action('edited_menu_category', 'menu_category_save_form_fields', 10, 2);
add_action('created_menu_category', 'menu_category_save_form_fields', 10, 2);

function menu_category_save_form_fields($term_id) {
    $meta_name = 'order';
    if ( isset( $_POST[$meta_name] ) ) {
        $meta_value = $_POST[$meta_name];
        // This is an associative array with keys and values:
        // $term_metas = Array($meta_name => $meta_value, ...)
        $term_metas = get_option("taxonomy_{$term_id}_metas");
        if (!is_array($term_metas)) {
            $term_metas = Array();
        }
        // Save the meta value
        $term_metas[$meta_name] = $meta_value;
        update_option( "taxonomy_{$term_id}_metas", $term_metas );
    }
}

function menu_category_edit_form_fields ($term_obj) {
    // Read in the order from the options db
    $term_id = $term_obj->term_id;
    $term_metas = get_option("taxonomy_{$term_id}_metas");
    if ( isset($term_metas['order']) ) {
        $order = $term_metas['order'];
    } else {
        $order = '0';
    }
?>
    <tr class="form-field">
            <th valign="top" scope="row">
                <label for="order"><?php _e('Category Order', ''); ?></label>
            </th>
            <td>
                <input type="text" id="order" name="order" value="<?php echo $order; ?>"/>
            </td>
        </tr>
<?php 
}
4
Aram Kocharyan

Vous pouvez ajouter un champ personnalisé à l'écran Ajouter une nouvelle page par le biais des points suivants:

  1. {taxonomy_name} _ add_form_fields
  2. {taxonomy_name} _ edit_form_fields
  3. édité _ {taxonomy_name}
  4. créer _ {nom taxonomie}

Vous pouvez voir plus ici

 enter image description here 

2
shishir mishra
add_filter('created_term', 'update_{custom_taxonomy}_fields'); // you can name your callback function  as you like
function update_{custom_taxonomy}_fields($term_id) {
    if($_POST['taxonomy'] == '{custom_taxonomy}'): // a simple check to see if is you tax
        //do your update (I prefer in options table, but you can do it in any way you`d like)
    endif;
}

si vous voulez un hook plus général, vous pouvez utiliser le "created_term" (au moins à partir de 3.4)

1
xlad

Vous pouvez aller pour taxonomy manager plugin. Vous pouvez ajouter une nouvelle taxonomie et ajouter des champs personnalisés à la taxonomie choisie (par exemple, un champ d'image).

0
Dipesh KC