Dodawanie pól do ekranu edycji kategorii, tagu i niestandardowej taksonomii w Administratorze WordPress?

33

Pytanie brzmi: „ Jak dodać jedno lub więcej pól do ekranu kategorii, tagu i niestandardowej taksonomii w Administratorze WordPress? ” Pytanie to zostało zadane na liście wp-hakerów 1 sierpnia 2010 r. I zaproponowałem rozwiązanie później tego samego dnia. Oryginalny Pytający omówione ponownie problem dzisiaj (21 sierpnia), który przypomniał mi rozwiązanie. Ponieważ może to być powszechna potrzeba, postanowiłem opublikować rozwiązanie zawierające kod tutaj, aby inni mogli go znaleźć w przyszłości.

MikeSchinkel
źródło
Cześć Mike, myślę, że byłoby lepiej, gdybyś opublikował kod w polu odpowiedzi. W ten sposób mamy tutaj kopię zapasową na wypadek, gdyby github został wyłączony.
ariefbayu
@silent: Hej, pracuję nad tym. :) Jestem w połowie drogi, ale uderzyłem o ścianę i muszę spać. Oto jak to będzie (coś) wyglądać, kiedy skończę: wordpress.stackexchange.com/questions/578/#582
MikeSchinkel
Jeszcze jakieś zmiany w tym? Właściwie to jestem trochę zainteresowany ...: D
John P Bloch
Hej, John P Bloch : Moi klienci przyszpilili mnie i po prostu nie mieli czasu. Mam nadzieję, że wkrótce ...
MikeSchinkel
@John P Bloch Właściwie to wypróbowałem i działa świetnie, musiałem „grupować” niektóre kategorie bez kategorii nadrzędnej.
Amit

Odpowiedzi:

23

Dodałem nowe pole „obraz” (plik typu wejściowego) do kategorii za pomocą tych

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 
    }

Możesz dowolnie korzystać z dowolnej taksonomii, wystarczy zastąpić categoryswoją nazwę taksonomii

tpoxa
źródło
jest to doskonałe, ale czy mógłbyś wyjaśnić (lub podać przykład, jak) poprawnie zintegrować to dostosowanie, jeśli chcesz dodać to do niestandardowej taksonomii - na przykład „ludzie”
NetConstructor.com
2
Aktualizacja - mimo że skopiowałem twój dokładny kod powyżej, aby to sprawdzić, plik nie wydaje się być zapisany lub przynajmniej się nie wyświetla. Czy możesz wyjaśnić, gdzie jest zapisywany plik, być może trzeba edytować uprawnienia tego folderu (a nawet lepiej, czy możesz opisać, w jaki sposób można zmodyfikować lokalizację folderu, w którym jest zapisany?). Kiedy wybieram plik, a następnie próbuję zapisać termin, zapisuję wszystko oprócz pliku i dlatego nie pokazuje mi przesłanego obrazu.
NetConstructor.com,
9

Ponadto, jeśli chcesz dodać to pole do niestandardowego formularza systematyki, wystarczy zastąpić kategorię niestandardową nazwą systematyki w add_actionfunkcji.

Przykład:

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');
Przetrząsać
źródło
2

Dla tych, którzy chcą zaczepić się w polu znacznika, zaczep jest nieco inny.

add_tag_form_fields

zamiast tag_add_form_fields, jak można się spodziewać

Dean_Wilson
źródło
1

Zdaję sobie sprawę, że o to kiedyś zapytano, ale WordPress nieco się zmienił, dlatego postanowiłem opracować mały skrypt, który upraszcza proces dodawania niestandardowych pól do systematyk i opcjonalnie pozwala dodawać kolumny do tabeli warunków dla każdego pola. Skrypt nazywa się taksonomią amarkalną i jest częścią frameworku WordPress firmy Amarkal .

Korzystanie z amarkal-taxonomydodania niestandardowego pola upraszcza:

// 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
źródło
1

Dodałem dodaj obraz i Usuń obraz dodatkowy złożony w niestandardowej taksonomii, której nazwą jest ubezpieczenie.

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

}

Uwaga: jeśli chcesz dodać to pole do innej taksonomii, np. Dla niestandardowego typu postu, musisz zastąpić odniesienie do kategorii odniesieniem do własnego ślimaka taksonomii. Na przykład, jeśli dodasz stworzoną taksonomię gatunku, możesz przechwycić tę funkcję przez

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

Moja nazwa ślimaka taksonomii to ubezpieczenie.

add Activity ('Insurance_add_form_fields', tablica ($ this, 'add_category_image'), 10, 2);

Użyj tego kodu w swoim functions.phppliku.

Vivekpathak
źródło
0

Musisz dodać swój kod do pliku motywów funkcji.php - także jeśli chcesz dodać to pole do niestandardowego formularza taksonomii, po prostu zastąp kategorię niestandardową nazwą taksonomii w funkcji add działań. Przykład: add_action ('category_edit_form_fields', 'category_edit_form_fields'); będzie dodatkowym działaniem ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');


źródło