Aggiungere Campi alla Schermata di Modifica di Categorie, Tag e Tassonomie Personalizzate nell'Admin di WordPress

22 ago 2010, 07:46:18
Visualizzazioni: 43K
Voti: 37

La domanda è "Come posso aggiungere uno o più campi alla schermata di modifica di Categorie, Tag e Tassonomie Personalizzate nell'Admin di WordPress?" Questa domanda è stata posta sulla lista wp-hackers il 1° agosto 2010 e ho fornito una soluzione lo stesso giorno. L'autore originale ha ridiscusso la questione oggi (21 agosto) che mi ha fatto ricordare della soluzione. Dato che potrebbe essere un'esigenza comune, ho deciso di pubblicare qui la soluzione, includendo il codice, per permettere ad altri di trovarla in futuro.

8
Commenti

Ciao Mike, penso sarebbe meglio se postassi il codice nella risposta. In questo modo abbiamo un backup qui, nel caso GitHub sia down.

ariefbayu ariefbayu
22 ago 2010 11:13:08

@silent: Ehi, ci sto lavorando. :) Sono a metà, ma mi sono bloccato e ho bisogno di dormire. Ecco come sarà (più o meno) quando avrò finito: http://wordpress.stackexchange.com/questions/578/#582

MikeSchinkel MikeSchinkel
22 ago 2010 11:28:31

Ci sono novità su questo? Sono piuttosto interessato... :D

John P Bloch John P Bloch
28 set 2010 00:19:19

Ciao @John P Bloch: I miei clienti mi hanno inchiodato e non ho proprio avuto tempo. Spero presto...

MikeSchinkel MikeSchinkel
28 set 2010 10:14:04

@John P Bloch In realtà l'ho provato e funziona alla grande, avevo bisogno di "raggruppare" certe categorie senza una categoria genitore.

Amit Amit
29 set 2010 00:21:57

@Mike: Possiamo dargli un po' di slancio? Non capisco pienamente la domanda, quindi potresti magari fornire qualche esempio?

hakre hakre
25 dic 2010 15:23:45

@hakre - E anche a te buone feste! ;) (Per me è davvero facile perdere traccia delle cose che intendevo fare qui su WA perché il loro sistema non offre un modo semplice per tenerne traccia. Lo farei ora ma ho una cena di Natale a cui partecipare quindi dovrà aspettare più tardi.)

MikeSchinkel MikeSchinkel
25 dic 2010 22:32:20
Mostra i restanti 3 commenti
Tutte le risposte alla domanda 7
2
25

Ho aggiunto un nuovo campo 'picture' (tipo di input file) alla categoria con l'aiuto di questi

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('Immagine della categoria', ''); ?></label>
            </th>
            <td>
                <input type="file" id="catpic" name="catpic"/>
            </td>
        </tr>
        <?php 
    }

Puoi utilizzare qualsiasi tassonomia, basta sostituire category con il nome della tua tassonomia

19 gen 2011 13:26:53
Commenti

questo è eccellente ma potresti spiegare (o fornire un esempio se possibile) come si potrebbe integrare correttamente questa personalizzazione se si desidera aggiungerla a una tassonomia personalizzata - ad esempio "persone"

NetConstructor.com NetConstructor.com
19 gen 2011 13:48:40

Aggiornamento - Anche se ho copiato esattamente il tuo codice sopra per testare questa funzionalità, il file non sembra essere salvato o almeno non viene visualizzato. Potresti spiegare dove viene salvato il file, forse è necessario modificare i permessi di quella cartella (o ancora meglio, potresti descrivere come si potrebbe modificare la posizione della cartella dove viene salvato?). Quando seleziono un file e poi provo a salvare un termine, tutto viene salvato tranne il file e quindi non mi mostra l'immagine caricata.

NetConstructor.com NetConstructor.com
19 gen 2011 13:56:47
0
11

Inoltre, se vuoi aggiungere quel campo al form della tassonomia personalizzata, devi semplicemente sostituire "category" con il nome della tassonomia personalizzata nella funzione add_action.

Esempio:

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');
26 ott 2011 04:53:39
0

Ho aggiunto i campi extra per l'aggiunta e la rimozione di immagini nella tassonomia personalizzata chiamata "insurance".

/**
 * Classe del plugin
 **/
if ( ! class_exists( 'CT_TAX_META' ) ) {

class CT_TAX_META {

  public function __construct() {
    //
  }

 /*
  * Inizializza la classe e avvia gli hook e i filtri
  * @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();
}

 /*
  * Aggiunge un campo form nella pagina di nuova categoria
  * @since 1.0.0
 */
 public function add_category_image ( $taxonomy ) { ?>
   <div class="form-field term-group">
     <label for="category-image-id"><?php _e('Immagine', '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( 'Aggiungi immagine', '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( 'Rimuovi immagine', 'hero-theme' ); ?>" />
    </p>
   </div>
 <?php
 }

 /*
  * Salva il campo form
  * @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 );
   }
 }

 /*
  * Modifica il campo form
  * @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( 'Immagine', '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( 'Aggiungi immagine', '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( 'Rimuovi immagine', 'hero-theme' ); ?>" />
       </p>
     </td>
   </tr>
 <?php
 }

/*
 * Aggiorna il valore del campo form
 * @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', '' );
   }
 }

/*
 * Aggiunge lo 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!=""){
           // Pulisce l'anteprima dell'immagine
           $('#category-image-wrapper').html('');
         }
       }
     });
   });
 </script>
 <?php }

  }

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

}

Nota: Se desideri aggiungere questo campo a una tassonomia diversa, ad esempio per un custom post type, devi sostituire il riferimento alla categoria con il riferimento al tuo slug di tassonomia. Ad esempio, se hai creato una tassonomia "genre" dovresti agganciare questa funzione tramite

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

Il nome del mio slug di tassonomia è insurance.

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

Usa questo codice nel tuo file functions.php.

14 mar 2018 14:33:13
0

Per chi cerca di agganciarsi al campo del modulo dei tag, l'hook è leggermente diverso.

add_tag_form_fields

invece di tag_add_form_fields come ci si aspetterebbe

28 set 2013 01:03:17
0

Mi rendo conto che questa domanda sia stata posta tempo fa, ma WordPress è cambiato un po' da allora, quindi ho deciso di sviluppare un piccolo script che semplifica il processo di aggiunta di campi personalizzati alle tassonomie e, opzionalmente, consente di aggiungere colonne alla tabella dei termini per ogni campo. Lo script si chiama amarkal-taxonomy e fa parte del framework WordPress Amarkal.

Utilizzando amarkal-taxonomy, aggiungere un campo personalizzato si semplifica in:

// Aggiunge un campo di testo ai form 'aggiungi' e 'modifica' della tassonomia 'category':
amarkal_taxonomy_add_field('category', 'cat_icon', array(
    'type'        => 'text',
    'label'       => 'Icona',
    'description' => 'L\'icona della categoria',
    'table'       => array(
        'show'      => true,  // Aggiunge una colonna alla tabella dei termini
        'sortable'  => true   // Rende quella colonna ordinabile
    )
));

// Poi puoi recuperare i dati usando:
$icon = get_term_meta( $term_id, 'cat_icon', true );
22 mar 2017 17:41:31
0

Devi inserire il tuo codice nel file functions.php del tuo tema - inoltre, se vuoi aggiungere quel campo nel form della tassonomia personalizzata, devi semplicemente sostituire 'category' con il nome della tassonomia personalizzata nella funzione add_action.
Esempio:
add_action('category_edit_form_fields','category_edit_form_fields');
diventerà
add_action('custom_taxonomy_name_form_fields','function_name_to_hook_on');

4 mar 2011 08:02:55
0

Utilizzo il plugin Category Meta. Funziona con tutte le tassonomie personalizzate, tag e categorie.

5 feb 2012 16:25:27