Aggiunta di campi alla schermata Modifica categoria, tag e tassonomia personalizzata nell'amministratore di WordPress?


33

La domanda è " Come aggiungere uno o più campi alla schermata Modifica categoria, tag e tassonomia personalizzata nell'amministratore di WordPress? " Questa domanda è stata posta nell'elenco wp-hacker il 1 ° agosto 2010 e ho offerto una soluzione più tardi quel giorno. Il richiedente originale ha discusso di nuovo il problema oggi (21 agosto), il che mi ha ricordato la soluzione. Dato che potrebbe essere un'esigenza comune, ho deciso di pubblicare la soluzione, incluso il codice, che altri potrebbero trovare in futuro.


Ciao Mike, penso che sarebbe meglio se pubblichi il codice nella casella di risposta. In questo modo, abbiamo il backup qui, nel caso in cui github non funzionasse.
ariefbayu,

@silent: Ehi, ci sto lavorando. :) Ho finito a metà, ma ho colpito un muro e ho bisogno di dormire. Ecco come apparirà (qualcosa) quando avrò finito: wordpress.stackexchange.com/questions/578/#582
MikeSchinkel,

Altri sviluppi su questo? In realtà sono un po 'interessato ...: D
John P Bloch,

Ehi @John P Bloch : I miei clienti mi hanno bloccato e non hanno avuto tempo. Speriamo presto ...
MikeSchinkel,

@John P Bloch In realtà l'ho provato e funziona benissimo, dovevo 'raggruppare' determinate categorie senza una categoria genitore.
Entro il

Risposte:


23

Ho aggiunto un nuovo campo 'immagine' (file di tipo di input) 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('Picture of the category', ''); ?></label>
            </th>
            <td>
                <input type="file" id="catpic" name="catpic"/>
            </td>
        </tr>
        <?php 
    }

Sei libero di usare qualsiasi tassonomia, basta sostituire il categorytuo nome di tassonomia


questo è eccellente, ma potresti spiegare (o eventualmente fornire un esempio) come si integrerebbe correttamente questa personalizzazione se si desidera aggiungerlo a una tassonomia personalizzata - ad esempio "persone"
NetConstructor.com

2
Aggiornamento - Anche se ho copiato il codice esatto sopra per testarlo, il file non sembra essere salvato o almeno non viene visualizzato. Potresti spiegare dove sta salvando il file, forse le autorizzazioni di quella cartella devono essere modificate (o ancora meglio, potresti forse descrivere come si potrebbe fare per modificare la posizione della cartella in cui è salvato?). Quando seleziono un file e poi provo a salvare un termine, salva tutto tranne il file e quindi non mi mostra l'immagine caricata.
NetConstructor.com il

9

Inoltre, se si desidera aggiungere quel campo nel modulo della tassonomia personalizzata, è sufficiente sostituire la categoria con il nome della tassonomia personalizzata nella add_actionfunzione.

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

2

Per coloro che desiderano agganciarsi al campo del modulo tag, il gancio è leggermente diverso.

add_tag_form_fields

invece di tag_add_form_fields come ti aspetteresti


1

Mi rendo conto che questo è stato chiesto qualche 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, facoltativamente, ti consente di aggiungere colonne alla tabella dei termini per ciascun campo. La sceneggiatura si chiama tassonomia amarkal ed è parte di framework WordPress Amarkal .

L'uso amarkal-taxonomy, l'aggiunta di un campo personalizzato semplifica a:

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

1

Ho aggiunto l'immagine aggiunta e Rimuovi immagine aggiuntiva archiviata nella tassonomia personalizzata il cui nome è assicurazione.

/**
 * 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();

}

Nota: se si desidera aggiungere questo campo a una diversa tassonomia, ad esempio per un tipo di posta personalizzato, è necessario sostituire il riferimento alla categoria con un riferimento alla propria lumaca di tassonomia. Ad esempio, se aggiungi una tassonomia di genere creata, aggancerai questa funzione tramite

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

Il mio nome di lumaca tassonomia è assicurazione.

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

Usa questo codice nel tuo functions.phpfile.


0

Devi aggiungere il tuo codice al tuo file Functions.php di temi - anche se vuoi aggiungere quel campo nel modulo di tassonomia personalizzato devi semplicemente sostituire la categoria con il nome di tassonomia personalizzato nella funzione add_action. Esempio: add_action ('category_edit_form_fields', 'category_edit_form_fields'); sarà add_action ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.