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


33

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


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

@silent: Эй, я работаю над этим. :) Я на полпути, но я врезался в стену и мне нужно спать. Вот как это будет выглядеть (что-то), когда я
закончу

Есть еще события на этот? Я на самом деле немного заинтересован ...: D
Джон П Блох

Привет, @John P Bloch : Мои клиенты сковали меня и просто не успели. Надеюсь, скоро ...
MikeSchinkel

@John P Bloch Я действительно попробовал это, и это прекрасно работает, мне нужно было «сгруппировать» определенные категории без родительской категории.
Амит

Ответы:


23

Я добавил новое поле 'picture' (тип файла ввода) в категорию с помощью этих

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-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 );

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

Мое имя таксономического слизня - страховка.

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

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


0

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.