WordPress Yöneticisinde Kategori, Etiket ve Özel Taksonomi Düzenleme Ekranına Alan Ekleme?


33

Sorusu "olduğunu nasıl? WordPress Admin'deki Kategori, Etiketi ve Özel Taksonomi Düzenleme Ekrana bir veya daha fazla alan eklerim Bu soru oldu" listesi wp-hacker üzerine sorulan 1 Ağustos 2010 ve ben bir çözüm sundu o gün sonrası. Orijinal asker yine konuyu ele çözümün hatırlattı bugün (21 Ağustos). Ortak bir ihtiyaç olabileceğinden, gelecekte başkalarının bulabilmesi için buraya kod içeren çözümü göndermeye karar verdim.


Merhaba mike, kodu cevap kutusuna koyarsan daha iyi olacağını düşünüyorum. Böylelikle, düşme ihtimaline karşı burada desteğimiz var.
ariefbayu

@silent: Hey, üzerinde çalışıyorum. :) Yarıya kadar bitirdim ama duvara çarptım ve uyumam gerekiyor. İşte İşim bitince gibi (bir şey) bakarız ne: wordpress.stackexchange.com/questions/578/#582
MikeSchinkel

Bu konuda başka gelişme var mı? Aslına bakarsan ...: D
John P Bloch

Hey @John P Bloch : Müşterilerim beni mahvetti ve zaman bulamadı. Umarım yakında ...
MikeSchinkel

@John P Bloch Gerçekten denedim ve çok iyi çalışıyor, bazı kategorileri bir üst kategori olmadan 'gruplamak' zorundaydım.
Amit

Yanıtlar:


23

Bunlar yardımıyla kategoriye yeni alan 'resim' (giriş tipi dosyası) ekledim

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 
    }

Herhangi bir taksonomiyi kullanmakta özgürsünüz, sadece categorytaksonomi isminizi değiştirin


Bu mükemmel ancak lütfen bunu özel bir taksonomiye eklemek isterseniz, bu özelleştirmeyi nasıl doğru bir şekilde entegre edeceğinizi açıklayabilir misiniz (veya muhtemelen bir örnek verebilir misiniz?) - örneğin "insanlar"
NetConstructor.com

2
Güncelleme - Bunu test etmek için yukarıdaki kodun tamamını kopyaladığım halde, dosya kaydedilmemiş gibi görünüyor veya en azından görünmüyor. Dosyayı nereye kaydettiğini, belki de bu klasörün izinlerinin düzenlenmesi gerektiğini açıklayabilir misiniz (veya daha da iyisi, birinin kaydedildiği klasörün konumunu nasıl değiştireceğiniz hakkında bir açıklama yapabilir misiniz?). Bir dosyayı seçtiğimde ve sonra bir terim kaydetmeye çalıştığımda, dosya hariç her şeyi kaydetmeye çalışıyor ve böylece bana yüklenen resmi göstermiyor.
NetConstructor.com

9

Ayrıca, bu alanı özel taksonomi formuna eklemek istiyorsanız, add_actionişlevdeki özel taksonomi adını yalnızca kategoriyle değiştirirsiniz .

Örnek:

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

Etiket formu alanına asmak isteyenler için, kanca biraz farklıdır.

add_tag_form_fields

beklediğiniz gibi tag_add_form_fields yerine


1

Bunu bir süre önce sorduğumun farkındayım, ancak WordPress biraz zamandan beri değişti, bu yüzden taksonomilere özel alanlar ekleme işlemini basitleştiren ve isteğe bağlı olarak her alan için terimler tablosuna sütun eklemenizi sağlayan küçük bir komut dosyası geliştirmeye karar verdim. Komut amarkal taksonomisi olarak adlandırılır ve Amarkal WordPress çerçevesinin bir parçasıdır .

Kullanımı amarkal-taxonomyiçin özel bir alan kolaylık imkanına ekleyerek:

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

Eklenen resim eklendi ve ekstra sigortalı olan özel taksonomiye sunulan resimden kaldırdım.

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

}

Not: Bu alanı farklı bir taksonomiye eklemek isterseniz, örneğin özel bir gönderi türü için, kategorideki referansı kendi taksonomik satış fişinize referansla değiştirmeniz gerekir. Örneğin, eğer bir tür taksonomisi yarattıysanız, bu işlevi

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

Taksonomik sümüklü böcek ismim sigortadır.

add_action ('insurance_add_form_fields', dizi ($ $, 'add_category_image'), 10, 2);

functions.phpDosyanızda bu kodu kullanın .


0

Kodunuzu kendi temalarinize eklemeniz gerekir. Php - bu alanı özel taksonomi formuna eklemek isterseniz, kategoriyi add_action fonksiyonunda özel taksonomi adıyla değiştirmelisiniz. Örnek: add_action ('category_edit_form_fields', 'category_edit_form_fields'); add_action ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on') olacak;


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.