Ajout de champs à l'écran d'édition de catégories, de balises et de taxinomanies personnalisées dans l'administrateur WordPress?

32

La question est " Comment puis-je ajouter un ou plusieurs champs à l'écran de modification de catégories, de balises et de taxonomie personnalisée dans l'administrateur WordPress? " Cette question était interrogé sur la liste wp-hackers le 1er août 2010 et J'ai proposé une solution plus tard dans la journée. Le demandeur d'origine a de nouveau abordé la question aujourd'hui (le 21 août), ce qui m'a rappelé la solution. Comme il pourrait s’agir d’un besoin commun, j’ai décidé de publier la solution, y compris le code, pour que les autres le trouvent plus tard.

    
posée MikeSchinkel 22.08.2010 - 06:46

7 réponses

21

J'ai ajouté un nouveau champ 'image' (fichier de type d'entrée) à la catégorie à l'aide de ces

add_action('category_edit_form_fields','category_edit_form_fields');
add_action('category_edit_form', 'category_edit_form');
add_action('category_add_form_fields','category_edit_form_fields');
add_action('category_add_form','category_edit_form');


function category_edit_form() {
?>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery('#edittag').attr( "enctype", "multipart/form-data" ).attr( "encoding", "multipart/form-data" );
        });
</script>
<?php 
}

function category_edit_form_fields () {
?>
    <tr class="form-field">
            <th valign="top" scope="row">
                <label for="catpic"><?php _e('Picture of the category', ''); ?></label>
            </th>
            <td>
                <input type="file" id="catpic" name="catpic"/>
            </td>
        </tr>
        <?php 
    }

Vous êtes libre d'utiliser n'importe quelle taxonomie, il vous suffit de remplacer category par votre nom de taxonomie

    
réponse donnée tpoxa 19.01.2011 - 12:26
7

De même, si vous souhaitez ajouter ce champ dans le formulaire de taxonomie personnalisée, il vous suffit de remplacer la catégorie par le nom de taxonomie personnalisé dans la fonction add_action .

Exemple:

add_action('{custom_taxonomy}_edit_form_fields','category_edit_form_fields');
add_action('{custom_taxonomy}_edit_form', 'category_edit_form');
add_action('{custom_taxonomy}_add_form_fields','category_edit_form_fields');
add_action('{custom_taxonomy}_add_form','category_edit_form');
    
réponse donnée Ted 26.10.2011 - 03:53
2

Pour ceux qui cherchent à s’accrocher au champ de formulaire de balise, l’accroché est légèrement différent.

add_tag_form_fields

au lieu de tag_add_form_fields comme on peut s'y attendre

    
réponse donnée Dean_Wilson 28.09.2013 - 00:03
1

Je sais que cela a été posé il y a quelque temps, mais WordPress a un peu changé depuis. J'ai donc décidé de développer un petit script qui simplifie le processus d'ajout de champs personnalisés aux taxonomies, et vous permet éventuellement d'ajouter des colonnes au tableau des termes pour chaque élément. champ. Le script s'appelle amarkal-taxonomy et fait partie de la Amarkal , cadre WordPress.

À l'aide de amarkal-taxonomy , l'ajout d'un champ personnalisé se simplifie comme suit:

// Add a text field to the 'category' taxonomy 'add' & 'edit' forms:
amarkal_taxonomy_add_field('category', 'cat_icon', array(
    'type'        => 'text',
    'label'       => 'Icon',
    'description' => 'The category\'s icon',
    'table'       => array(
        'show'      => true,  // Add a column to the terms table
        'sortable'  => true   // Make that column sortable
    )
));

// Then you can retrieve the data using:
$icon = get_term_meta( $term_id, 'cat_icon', true );
    
réponse donnée Yoav Kadosh 22.03.2017 - 16:41
1

J'ai ajouté les options add image et Remove image extra dans la taxonomie personnalisée, dont le nom est assurance.

/**
 * Plugin class
 **/
if ( ! class_exists( 'CT_TAX_META' ) ) {

class CT_TAX_META {

  public function __construct() {
    //
  }

 /*
  * Initialize the class and start calling our hooks and filters
  * @since 1.0.0
 */
 public function init() {
   add_action( 'insurance_add_form_fields', array ( $this, 'add_category_image' ), 10, 2 );
   add_action( 'created_insurance', array ( $this, 'save_category_image' ), 10, 2 );
   add_action( 'insurance_edit_form_fields', array ( $this, 'update_category_image' ), 10, 2 );
   add_action( 'edited_insurance', array ( $this, 'updated_category_image' ), 10, 2 );
   add_action( 'admin_enqueue_scripts', array( $this, 'load_media' ) );
   add_action( 'admin_footer', array ( $this, 'add_script' ) );
 }

public function load_media() {
 wp_enqueue_media();
}

 /*
  * Add a form field in the new category page
  * @since 1.0.0
 */
 public function add_category_image ( $taxonomy ) { ?>
   <div class="form-field term-group">
     <label for="category-image-id"><?php _e('Image', 'hero-theme'); ?></label>
     <input type="hidden" id="category-image-id" name="category-image-id" class="custom_media_url" value="">
     <div id="category-image-wrapper"></div>
     <p>
       <input type="button" class="button button-secondary ct_tax_media_button" id="ct_tax_media_button" name="ct_tax_media_button" value="<?php _e( 'Add Image', 'hero-theme' ); ?>" />
       <input type="button" class="button button-secondary ct_tax_media_remove" id="ct_tax_media_remove" name="ct_tax_media_remove" value="<?php _e( 'Remove Image', 'hero-theme' ); ?>" />
    </p>
   </div>
 <?php
 }

 /*
  * Save the form field
  * @since 1.0.0
 */
 public function save_category_image ( $term_id, $tt_id ) {
   if( isset( $_POST['category-image-id'] ) && '' !== $_POST['category-image-id'] ){
     $image = $_POST['category-image-id'];
     add_term_meta( $term_id, 'category-image-id', $image, true );
   }
 }

 /*
  * Edit the form field
  * @since 1.0.0
 */
 public function update_category_image ( $term, $taxonomy ) { ?>
   <tr class="form-field term-group-wrap">
     <th scope="row">
       <label for="category-image-id"><?php _e( 'Image', 'hero-theme' ); ?></label>
     </th>
     <td>
       <?php $image_id = get_term_meta ( $term -> term_id, 'category-image-id', true ); ?>
       <input type="hidden" id="category-image-id" name="category-image-id" value="<?php echo $image_id; ?>">
       <div id="category-image-wrapper">
         <?php if ( $image_id ) { ?>
           <?php echo wp_get_attachment_image ( $image_id, 'thumbnail' ); ?>
         <?php } ?>
       </div>
       <p>
         <input type="button" class="button button-secondary ct_tax_media_button" id="ct_tax_media_button" name="ct_tax_media_button" value="<?php _e( 'Add Image', 'hero-theme' ); ?>" />
         <input type="button" class="button button-secondary ct_tax_media_remove" id="ct_tax_media_remove" name="ct_tax_media_remove" value="<?php _e( 'Remove Image', 'hero-theme' ); ?>" />
       </p>
     </td>
   </tr>
 <?php
 }

/*
 * Update the form field value
 * @since 1.0.0
 */
 public function updated_category_image ( $term_id, $tt_id ) {
   if( isset( $_POST['category-image-id'] ) && '' !== $_POST['category-image-id'] ){
     $image = $_POST['category-image-id'];
     update_term_meta ( $term_id, 'category-image-id', $image );
   } else {
     update_term_meta ( $term_id, 'category-image-id', '' );
   }
 }

/*
 * Add script
 * @since 1.0.0
 */
 public function add_script() { ?>
   <script>
     jQuery(document).ready( function($) {
       function ct_media_upload(button_class) {
         var _custom_media = true,
         _orig_send_attachment = wp.media.editor.send.attachment;
         $('body').on('click', button_class, function(e) {
           var button_id = '#'+$(this).attr('id');
           var send_attachment_bkp = wp.media.editor.send.attachment;
           var button = $(button_id);
           _custom_media = true;
           wp.media.editor.send.attachment = function(props, attachment){
             if ( _custom_media ) {
               $('#category-image-id').val(attachment.id);
               $('#category-image-wrapper').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;float:none;" />');
               $('#category-image-wrapper .custom_media_image').attr('src',attachment.url).css('display','block');
             } else {
               return _orig_send_attachment.apply( button_id, [props, attachment] );
             }
            }
         wp.media.editor.open(button);
         return false;
       });
     }
     ct_media_upload('.ct_tax_media_button.button'); 
     $('body').on('click','.ct_tax_media_remove',function(){
       $('#category-image-id').val('');
       $('#category-image-wrapper').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;float:none;" />');
     });
     // Thanks: http://stackoverflow.com/questions/15281995/wordpress-create-category-ajax-response
     $(document).ajaxComplete(function(event, xhr, settings) {
       var queryStringArr = settings.data.split('&');
       if( $.inArray('action=add-tag', queryStringArr) !== -1 ){
         var xml = xhr.responseXML;
         $response = $(xml).find('term_id').text();
         if($response!=""){
           // Clear the thumb image
           $('#category-image-wrapper').html('');
         }
       }
     });
   });
 </script>
 <?php }

  }

$CT_TAX_META = new CT_TAX_META();
$CT_TAX_META -> init();

}

Remarque: Si vous souhaitez ajouter ce champ à une taxonomie différente, par exemple pour un type de publication personnalisé, vous devez remplacer la référence à la catégorie par une référence à votre propre liste de taxonomie. Par exemple, si vous ajoutez une taxonomie de genre créée, vous lierez cette fonction via

add_action( 'taxonomy_add_form_fields', array ( $this, 'add_category_image' ), 10, 2 ).

Le nom de mon slogan de taxonomie est une assurance.

add_action ('insurance_add_form_fields', tableau ($ this, 'add_category_image'), 10, 2);

Utilisez ce code dans votre fichier functions.php .

    
réponse donnée Vivekpathak 14.03.2018 - 13:33
0

Vous devez ajouter votre code dans le fichier themes.php de votre thème - également si vous souhaitez ajouter ce champ dans le formulaire de taxonomie personnalisée, il vous suffit de remplacer la catégorie par le nom de taxonomie personnalisé dans la fonction add_action. Exemple : add_action ('category_edit_form_fields', 'category_edit_form_fields'); sera add_action ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');

    
réponse donnée user3693 04.03.2011 - 07:02
0

J'utilise le catégorie méta-plugin . Fonctionne sur toutes les taxonomies personnalisées, tags & catégories

    
réponse donnée Blackbird 05.02.2012 - 15:25

Lire d'autres questions sur les étiquettes