Thêm trường vào màn hình chỉnh sửa danh mục, thẻ và phân loại tùy chỉnh trong quản trị viên WordPress?


33

Câu hỏi là " Làm cách nào để thêm một hoặc nhiều trường vào Màn hình chỉnh sửa danh mục, thẻ và phân loại tùy chỉnh trong quản trị viên WordPress? " Câu hỏi này đã được hỏi trên danh sách tin tặc wp ngày 1 tháng 8 năm 2010 và tôi đã đưa ra giải pháp vào cuối ngày hôm đó. Người hỏi ban đầu đã thảo luận về vấn đề này một lần nữa vào ngày hôm nay (21 tháng 8), điều đó nhắc nhở tôi về giải pháp. Vì nó có thể là một nhu cầu chung, tôi quyết định đăng giải pháp bao gồm cả mã lên đây để người khác tìm thấy trong tương lai.


Xin chào mike, tôi nghĩ sẽ tốt hơn nếu bạn đăng mã vào ô trả lời. Bằng cách đó, chúng tôi đã sao lưu ở đây, trong trường hợp github xuống.
ariefbayu

@silent: Này, tôi đang làm việc với nó. :) Tôi đã hoàn thành một nửa, nhưng tôi đã va vào tường và cần ngủ. Đây là những gì nó sẽ trông giống như một cái gì đó khi tôi hoàn thành: wordpress.stackexchange.com/questions/578/#582
MikeSchinkel

Bất kỳ phát triển hơn về điều này? Tôi thực sự quan tâm ...: D
John P Bloch

Xin chào @John P Bloch : Khách hàng của tôi đã chèn ép tôi và không có thời gian. Hy vọng sớm ...
MikeSchinkel

@ John P Bloch Tôi thực sự đã thử nó và nó hoạt động rất tốt, tôi cần phải 'nhóm' một số danh mục nhất định mà không có danh mục chính.
Amit

Câu trả lời:


23

Tôi đã thêm trường 'hình ảnh' mới (tệp loại đầu vào) vào danh mục với sự trợ giúp của những

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 
    }

Bạn có thể tự do sử dụng bất kỳ phân loại nào, chỉ cần thay thế categorycho tên phân loại của bạn


điều này thật tuyệt vời nhưng bạn có thể vui lòng giải thích (hoặc cung cấp một ví dụ có thể) về cách người ta sẽ tích hợp chính xác tùy chỉnh này nếu bạn muốn thêm tùy chọn này vào phân loại tùy chỉnh - ví dụ: "người"
NetConstructor.com

2
Cập nhật - Mặc dù tôi đã sao chép mã chính xác của bạn ở trên để kiểm tra điều này nhưng tập tin dường như không được lưu hoặc ít nhất là nó không hiển thị. Bạn có thể giải thích nơi lưu tệp của mình không, có thể phải chỉnh sửa các quyền của thư mục đó (hoặc thậm chí tốt hơn, bạn có thể mô tả cách người ta sẽ sửa đổi vị trí của thư mục được lưu không?). Khi tôi chọn một tệp và sau đó cố gắng lưu một thuật ngữ, nó sẽ lưu mọi thứ trừ tệp đó và do đó không hiển thị cho tôi hình ảnh được tải lên.
NetConstructor.com

9

Ngoài ra, nếu bạn muốn thêm trường đó vào biểu mẫu phân loại tùy chỉnh, bạn chỉ cần thay thế danh mục bằng tên phân loại tùy chỉnh trong add_actionhàm.

Thí dụ:

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

Đối với những người muốn móc vào trường mẫu thẻ, hook hơi khác một chút.

add_tag_form_fields

thay vì tag_add_form_fields như bạn mong đợi


1

Tôi nhận ra điều này đã được hỏi cách đây một thời gian, nhưng WordPress đã thay đổi một chút vì vậy tôi đã quyết định phát triển một tập lệnh nhỏ đơn giản hóa quá trình thêm các trường tùy chỉnh vào phân loại và tùy chọn cho phép bạn thêm các cột vào bảng điều khoản cho từng trường. Kịch bản này được gọi là phân loại amarkal và là một phần của Amarkal khung WordPress .

Sử dụng amarkal-taxonomy, thêm một trường tùy chỉnh đơn giản hóa để:

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

Tôi đã Thêm hình ảnh thêm và Xóa hình ảnh thêm vào phân loại tùy chỉnh tên là bảo hiể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();

}

Lưu ý: Nếu bạn muốn thêm trường này vào một phân loại khác, ví dụ: đối với loại bài đăng tùy chỉnh, bạn cần thay thế tham chiếu đến danh mục bằng tham chiếu đến sên phân loại của riêng bạn. Ví dụ: nếu bạn thêm đã tạo một phân loại thể loại, bạn sẽ nối chức năng này thông qua

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

Tên sên phân loại của tôi là bảo hiểm.

add_action ('bảo hiểm_add_form_fields', mảng ($ this, 'add_carget_image'), 10, 2);

Sử dụng mã này trong functions.phptập tin của bạn .


0

Bạn cần thêm mã vào tệp chủ đề.php của mình - đồng thời nếu bạn muốn thêm trường đó vào biểu mẫu phân loại tùy chỉnh, bạn chỉ cần thay thế danh mục bằng tên phân loại tùy chỉnh trong hàm add_action. Ví dụ: add_action ('category_edit_form_fields', 'category_edit_form_fields'); sẽ là add_action ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.