Додавання полів до екрану редагування категорії, тегів та спеціальної таксономії у адміністраторі WordPress?


33

Питання " Як додати одне або кілька полів до екрану редагування категорії, тегів та користувальницької таксономії в адміністраторі WordPress? " Це запитання було задано у списку хакерів-wp 1 серпня 2010 року, і я запропонував рішення пізніше цього дня. Оригінальний Аскер обговорювалося питання знову сьогодні (Aug 21) , який нагадав мені про рішення. Оскільки це може бути загальною потребою, я вирішив розмістити рішення, включаючи код тут, щоб інші могли знайти в майбутньому.


Привіт, Майку, я думаю, що буде краще, якщо ви опублікуєте код у полі відповідей. Таким чином, у нас є резервне копіювання, на випадок, коли Github вниз.
ariefbayu

@silent: Гей, я над цим працюю. :) Я вже на півдорозі, але я вдарився об стіну і мені потрібно спати. Ось як це буде виглядати (щось), коли я
закінчу

Ще якісь розробки на цьому? Мені насправді цікаво ...: D
Джон П Блох

Привіт @ Джон Джон П Блох : Мої клієнти мене прикували , і просто не встигли. Сподіваюсь, скоро ...
MikeSchinkel,

@John P Bloch Я насправді спробував це, і він чудово працює, мені потрібно було «згрупувати» певні категорії без батьківської категорії.
Аміт

Відповіді:


23

До категорії я додав нове поле 'малюнок' (файл типу вводу) за допомогою них

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 
    }

Ви можете використовувати будь-яку таксономію, просто замініть categoryсвоє ім'я таксономії


це чудово, але ви можете, будь ласка, пояснити (чи, можливо, навести приклад), як правильно інтегрувати це налаштування, якщо ви хочете додати це до спеціальної таксономії - наприклад, "люди"
NetConstructor.com

2
Оновлення - Хоча я скопіював ваш точний код вище, щоб перевірити це, схоже, файл не зберігається або принаймні не відображається. Чи можете ви пояснити, де зберігається файл, можливо, дозволи цієї папки потрібно відредагувати (а ще краще, чи можете ви описати, як можна було б змінити місце розташування папки, де її збережено?). Коли я вибираю файл, а потім намагаюся зберегти термін, він зберігає все, крім файлу, і, таким чином, не показує мені завантажене зображення.
NetConstructor.com

9

Крім того, якщо ви хочете додати це поле до спеціальної форми таксономії, ви просто заміните категорію назви власної таксономії у add_actionфункції.

Приклад:

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

Для тих, хто хоче зачепитись у поле форми тегів, гачок дещо відрізняється.

add_tag_form_fields

замість tag_add_form_fields, як ви очікували


1

Я усвідомлюю, що це було задано деякий час тому, але WordPress трохи змінився, тому я вирішив розробити невеликий сценарій, який спрощує процес додавання спеціальних полів до таксономій і, за бажанням, дозволяє додавати стовпці до таблиці термінів для кожного поля. Сценарій називається amarkal-таксономія і є частиною Amarkal WordPress.

Використання amarkal-taxonomy, додавання спеціального поля спрощує:

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

Я додав зображення для додавання та видалення додаткових зображень, поданих у спеціальну систематику, назва якої - страхування.

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

}

Примітка. Якщо ви хочете додати це поле до іншої систематики, наприклад, для користувацького типу публікації, вам потрібно буде замінити посилання на категорію посиланням на ваш власний таксономічний слуп. Наприклад, якщо ви додасте створену жанрову систематику, ви підключите цю функцію через

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

Моя назва таксономії слимаків - страхування.

addgery ('Insurance_add_form_fields', масив ($ this, 'add_category_image'), 10, 2);

Використовуйте цей код у своєму functions.phpфайлі.


0

Вам потрібно додати свій код до файлу теми themes.php - також якщо ви хочете додати це поле до спеціальної форми таксономії, ви просто заміните категорію на власну назву таксономії у функції додавання. Приклад: Додати запускання ('category_edit_form_fields', 'category_edit_form_fields'); буде додано запуск ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.