Menambahkan Bidang ke Layar Edit Kategori, Tag dan Taksonomi Ubahsuaian di Admin WordPress?

33

Pertanyaannya adalah " Bagaimana cara menambahkan satu atau beberapa bidang ke Kategori, Tag dan Layar Edit Taksonomi Kustom di Admin WordPress? " Pertanyaan ini ditanyakan pada daftar wp-hacker pada 1 Agustus 2010 dan saya menawarkan solusi di kemudian hari. The Penanya asli membahas masalah lagi hari ini (Agustus 21) yang mengingatkan saya dari solusi. Karena itu bisa menjadi kebutuhan umum saya memutuskan untuk mengirim solusi termasuk kode di sini untuk orang lain untuk menemukan di masa depan.

MikeSchinkel
sumber
Halo, saya pikir akan lebih baik jika Anda memposting kode di kotak jawaban. Dengan begitu, kita punya cadangan di sini, kalau-kalau github down.
ariefbayu
@silent: Hei, saya sedang mengerjakannya. :) Saya sudah setengah jalan, tapi saya sudah menabrak dinding dan perlu tidur. Inilah yang akan terlihat (seperti) ketika saya selesai: wordpress.stackexchange.com/questions/578/#582
MikeSchinkel
Adakah perkembangan lagi untuk yang ini? Saya sebenarnya agak tertarik ...: D
John P Bloch
Hey @John P Bloch : Klien saya telah menjebak saya dan tidak punya waktu. Semoga segera ...
MikeSchinkel
@ John P Bloch Saya benar-benar mencobanya dan berfungsi dengan baik, saya perlu 'mengelompokkan' kategori tertentu tanpa kategori induk.
Amit

Jawaban:

23

Saya menambahkan 'gambar' bidang baru (file jenis input) ke kategori dengan bantuan ini

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 
    }

Anda bebas menggunakan taksonomi apa pun, cukup ganti categorydengan nama taksonomi Anda

tpoxa
sumber
ini luar biasa tetapi dapatkah Anda menjelaskan (atau memberikan contoh mungkin) bagaimana seseorang akan mengintegrasikan kustomisasi ini dengan benar jika Anda ingin menambahkan ini ke taksonomi khusus - misalnya "orang"
NetConstructor.com
2
Perbarui - Meskipun saya telah menyalin kode persis Anda di atas untuk menguji ini, tampaknya file tersebut tidak disimpan atau setidaknya tidak muncul. Bisakah Anda menjelaskan di mana penyimpanan file itu, mungkin izin folder itu perlu diedit (atau bahkan lebih baik, dapatkah Anda menjelaskan bagaimana orang akan memodifikasi lokasi folder tempat penyimpanannya?). Ketika saya memilih file dan kemudian mencoba untuk menyimpan istilah itu menyimpan segalanya kecuali file dan dengan demikian tidak menunjukkan gambar yang diunggah.
NetConstructor.com
9

Selain itu, jika Anda ingin menambahkan bidang itu ke formulir taksonomi khusus, Anda cukup mengganti kategori dengan nama taksonomi kustom dalam add_actionfungsi.

Contoh:

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');
Ted
sumber
2

Bagi mereka yang ingin mengaitkan ke bidang bentuk tag, kailnya sedikit berbeda.

add_tag_form_fields

alih-alih tag_add_form_fields seperti yang Anda harapkan

Dean_Wilson
sumber
1

Saya menyadari ini ditanya beberapa waktu yang lalu, tetapi WordPress telah sedikit berubah sejak itu jadi saya memutuskan untuk mengembangkan skrip kecil yang menyederhanakan proses menambahkan bidang khusus ke taksonomi, dan secara opsional memungkinkan Anda menambahkan kolom ke tabel syarat untuk setiap bidang. Skripnya disebut amarkal-taxonomy , dan merupakan bagian dari kerangka WordPress Amarkal .

Menggunakan amarkal-taxonomy, menambahkan bidang khusus menyederhanakan ke:

// 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 );
Yoav Kadosh
sumber
1

Saya telah menambahkan gambar tambah dan Hapus gambar tambahan yang dimasukkan ke dalam taksonomi khusus yang namanya asuransi.

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

}

Catatan: Jika Anda ingin menambahkan bidang ini ke taksonomi yang berbeda, misalnya untuk jenis pos kustom, Anda harus mengganti referensi ke kategori dengan referensi ke siput taksonomi Anda sendiri. Misalnya, jika Anda menambahkan taksonomi genre buatan Anda akan menghubungkan fungsi ini melalui

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

Nama siput taksonomi saya adalah asuransi.

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

Gunakan kode ini di functions.phpfile Anda .

Vivekpathak
sumber
0

Anda perlu menambahkan kode Anda ke file functions.php tema - juga jika Anda ingin menambahkan bidang itu ke formulir taksonomi khusus, Anda cukup mengganti kategori dengan nama taksonomi khusus di fungsi add_action. Contoh: add_action ('category_edit_form_fields', 'category_edit_form_fields'); akan menjadi add_action ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');


sumber