Aggiungere Campi alla Schermata di Modifica di Categorie, Tag e Tassonomie Personalizzate nell'Admin di WordPress
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.

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

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"

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.

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');

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
.

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 );

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');

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