Adăugarea de câmpuri în ecranul de editare pentru Categorii, Etichete și Taxonomii Personalizate în WordPress Admin

22 aug. 2010, 07:46:18
Vizualizări: 43K
Voturi: 37

Întrebarea este "Cum pot adăuga unul sau mai multe câmpuri în ecranul de editare pentru Categorii, Etichete și Taxonomii Personalizate în Panoul de Administrare WordPress?" Această întrebare a fost postată pe lista wp-hackers pe 1 august 2010 și am oferit o soluție în aceeași zi. Autorul întrebării inițiale a redeschis discuția astăzi (21 august), ceea ce mi-a reamintit de soluție. Având în vedere că ar putea fi o necesitate comună, am decis să public soluția, inclusiv codul, aici pentru ca și alții să o poată găsi în viitor.

8
Comentarii

Salut Mike, cred că ar fi mai bine dacă ai posta codul în caseta de răspuns. Astfel, avem o copie de rezervă aici, în caz că github nu funcționează.

ariefbayu ariefbayu
22 aug. 2010 11:13:08

@silent: Hei, lucrez la asta. :) Sunt pe la jumătate, dar m-am împotmolit și trebuie să dorm. Iată cum va arăta (cam) când voi termina: http://wordpress.stackexchange.com/questions/578/#582

MikeSchinkel MikeSchinkel
22 aug. 2010 11:28:31

Mai sunt dezvoltări la acest subiect? Sunt chiar interesat... :D

John P Bloch John P Bloch
28 sept. 2010 00:19:19

Salut @John P Bloch: Clienții mei m-au ținut ocupat și pur și simplu nu am avut timp. Sper că în curând...

MikeSchinkel MikeSchinkel
28 sept. 2010 10:14:04

@John P Bloch Am încercat de fapt și funcționează excelent, aveam nevoie să 'grupez' anumite categorii fără o categorie părinte.

Amit Amit
29 sept. 2010 00:21:57

@Mike: Putem să dăm o oarecare forță acestui subiect? Nu înțeleg întrebarea în întregime, așa că probabil poți da un exemplu?

hakre hakre
25 dec. 2010 15:23:45

@hakre - Și ție sărbători fericite! ;) (E foarte ușor pentru mine să pierd din vedere lucrurile pe care voiam să le fac aici pe WA pentru că sistemul lor nu oferă o modalitate ușoară de a le urmări. Aș face acum dar trebuie să particip la o cină de Crăciun, așa că va trebui să fie mai târziu.)

MikeSchinkel MikeSchinkel
25 dec. 2010 22:32:20
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare 7
2
25

Am adăugat un nou câmp 'picture' (tip input file) la categoria cu ajutorul următoarelor:

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

Puteți folosi orice taxonomie, doar înlocuiți category cu numele taxonomiei dumneavoastră

19 ian. 2011 13:26:53
Comentarii

acest lucru este excelent, dar poți explica te rog (sau eventual oferi un exemplu) cum s-ar putea integra corect această personalizare dacă vrei să o adaugi la o taxonomie personalizată - de exemplu "persoane"

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

Actualizare - Deși am copiat exact codul tău de mai sus pentru a testa acest lucru, fișierul nu pare să fie salvat sau cel puțin nu apare. Poți explica unde se salvează fișierul, poate că permisiunile acelui folder trebuie editate (sau chiar mai bine, ai putea descrie cum s-ar putea modifica locația folderului unde se salvează?). Când selectez un fișier și apoi încerc să salvez un termen, se salvează totul exceptând fișierul și astfel nu-mi arată imaginea încărcată.

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

De asemenea, dacă doriți să adăugați acel câmp în formularul de taxonomie personalizată, trebuie doar să înlocuiți categoria cu numele taxonomiei personalizate în funcția add_action.

Exemplu:

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 oct. 2011 04:53:39
0

Am adăugat câmpurile suplimentare "Adaugă imagine" și "Șterge imagine" în taxonomia personalizată numită "insurance".

/**
 * Clasa pluginului
 **/
if ( ! class_exists( 'CT_TAX_META' ) ) {

class CT_TAX_META {

  public function __construct() {
    //
  }

 /*
  * Inițializarea clasei și începerea apelurilor de hooks și filtre
  * @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();
}

 /*
  * Adăugarea unui câmp de formular în pagina de categorie nouă
  * @since 1.0.0
 */
 public function add_category_image ( $taxonomy ) { ?>
   <div class="form-field term-group">
     <label for="category-image-id"><?php _e('Imagine', '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( 'Adaugă Imagine', '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( 'Șterge Imagine', 'hero-theme' ); ?>" />
    </p>
   </div>
 <?php
 }

 /*
  * Salvarea câmpului de formular
  * @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 );
   }
 }

 /*
  * Editarea câmpului de formular
  * @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( 'Imagine', '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( 'Adaugă Imagine', '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( 'Șterge Imagine', 'hero-theme' ); ?>" />
       </p>
     </td>
   </tr>
 <?php
 }

/*
 * Actualizarea valorii câmpului de formular
 * @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', '' );
   }
 }

/*
 * Adăugarea scriptului
 * @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;" />');
     });
     // Mulțumiri: 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!=""){
           // Curăță imaginea thumbnail
           $('#category-image-wrapper').html('');
         }
       }
     });
   });
 </script>
 <?php }

  }

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

}

Notă: Dacă doriți să adăugați acest câmp într-o altă taxonomie, de exemplu pentru un tip de postare personalizat, va trebui să înlocuiți referința la "category" cu referința la slug-ul taxonomiei dumneavoastră. De exemplu, dacă ați creat o taxonomie "gen", ați conecta această funcție prin:

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

Slug-ul taxonomiei mele este "insurance".

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

Folosiți acest cod în fișierul functions.php.

14 mar. 2018 14:33:13
0

Pentru cei care doresc să se conecteze la câmpul de formular pentru etichete, hook-ul este ușor diferit.

add_tag_form_fields

în loc de tag_add_form_fields cum ați putea aștepta

28 sept. 2013 01:03:17
0

Înțeleg că această întrebare a fost adresată acum ceva timp, dar WordPress s-a schimbat de atunci, așa că am decis să dezvolt un mic script care simplifică procesul de adăugare a câmpurilor personalizate la taxonomii și, opțional, vă permite să adăugați coloane în tabelul de termeni pentru fiecare câmp. Scriptul se numește amarkal-taxonomy și face parte din cadrul WordPress Amarkal.

Folosind amarkal-taxonomy, adăugarea unui câmp personalizat se simplifică astfel:

// Adaugă un câmp text la formularele 'add' și 'edit' ale taxonomiei 'category':
amarkal_taxonomy_add_field('category', 'cat_icon', array(
    'type'        => 'text',
    'label'       => 'Pictogramă',
    'description' => 'Pictograma categoriei',
    'table'       => array(
        'show'      => true,  // Adaugă o coloană în tabelul de termeni
        'sortable'  => true   // Face coloana sortabilă
    )
));

// Apoi puteți prelua datele folosind:
$icon = get_term_meta( $term_id, 'cat_icon', true );
22 mar. 2017 17:41:31
0

Trebuie să adăugați codul în fișierul functions.php al temei - de asemenea, dacă doriți să adăugați acel câmp în formularul taxonomiei personalizate, trebuie doar să înlocuiți "category" cu numele taxonomiei personalizate în funcția add_action. Exemplu: add_action('category_edit_form_fields','category_edit_form_fields'); va deveni add_action('custom_taxonomy_name_form_fields','function_name_to_hook_on');

4 mar. 2011 08:02:55
0

Folosesc Plugin-ul Category Meta. Funcționează cu toate taxonomiile personalizate, etichetele și categoriile

5 feb. 2012 16:25:27