MikeSchinkel
  • 0
Гуру

Добавление полей на экран редактирования категории, тега и пользовательской таксономии в панели администратора WordPress?

  • 0

Вопрос: « Как мне добавить одно или несколько полей на экран редактирования категории, тега и пользовательской таксономии в панели администратора WordPress? » Этот вопрос был задан в списке wp-hackers 1 августа 2010 года, и позже в тот же день я предложил решение. Первоначальный спрашивающий снова обсудил проблему сегодня (21 августа), что напомнило мне о решении. Поскольку это может быть общей потребностью, я решил опубликовать решение, включая код, здесь, чтобы другие могли найти его в будущем.

Share
  1. Привет, Майк, я думаю, было бы лучше, если бы ты разместил код в поле для ответов. Таким образом, у нас есть резервная копия на случай, если гитхаб не работает.

    • 0
  2. Я добавил новое поле «изображение» (файл типа ввода) в категорию с помощью этих

    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 ее на название вашей таксономии.

    • 0
  3. Кроме того, если вы хотите добавить это поле в форму пользовательской таксономии, вы просто замените категорию именем пользовательской таксономии в 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');
    
    • 0
  4. Для тех, кто хочет зацепиться за поле формы тега, зацепка немного отличается.

    add_tag_form_fields
    

    вместо tag_add_form_fields, как и следовало ожидать

    • 0
  5. Я добавил добавленное изображение и удалил дополнительное изображение в пользовательскую таксономию, имя которой — страхование.

    /**
     * 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 ).
    

    Мое название таксономии — страхование.

    add_action(‘insurance_add_form_fields’, массив ($this, ‘add_category_image’), 10, 2);

    Используйте этот код в своем functions.php файле.

    • 0
  6. Я понимаю, что это было задано некоторое время назад, но WordPress немного изменился с тех пор, поэтому я решил разработать небольшой скрипт, который упрощает процесс добавления настраиваемых полей в таксономии и, при желании, позволяет добавлять столбцы в таблицу терминов для каждого поля. Скрипт называется amarkal-taxonomy и является частью фреймворка 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 );
    
    • 0
  7. Вам нужно добавить свой код в файл functions.php вашей темы — также, если вы хотите добавить это поле в пользовательскую форму таксономии, вы просто замените категорию на имя пользовательской таксономии в функции add_action. Пример: add_action(‘category_edit_form_fields’,’category_edit_form_fields’); будет add_action(‘custom_taxonomy_name_form_fields’,’function_name_to_hook_on’);

    • 0
  8. Я использую мета-плагин категорий. Работает со всеми пользовательскими таксономиями, тегами и категориями

    • 0

Оставить ответ

You must login to add an answer.