Hinzufügen von Feldern zum Bearbeitungsbildschirm für Kategorien, Tags und benutzerdefinierte Taxonomien in WordPress Admin?


33

Die Frage lautet : „ Wie kann ich ein oder mehrere Felder zu der Kategorie, Tag und kundenspezifische Taxonomie Bearbeitungsbildschirm in der Wordpress - Admin? “ Diese Frage wurde auf die wp-Hacker Liste gefragt 1. August 2010 und ich bot eine Lösung später an diesem Tag. Der ursprüngliche Fragesteller hat das Problem heute (21. August) erneut besprochen, was mich an die Lösung erinnerte. Da es ein allgemeiner Bedarf sein könnte, habe ich beschlossen, die Lösung einschließlich Code hier oben zu veröffentlichen, damit andere sie in Zukunft finden können.


Hallo mike, ich denke es wäre besser wenn du den code im antwortfeld posten würdest. Auf diese Weise haben wir hier ein Backup für den Fall, dass Github ausfällt.
Ariefbayu

@silent: Hey, ich arbeite daran. :) Ich bin auf halbem Weg fertig, aber ich bin gegen eine Wand gestoßen und muss schlafen. So sieht es aus, wenn ich fertig bin: wordpress.stackexchange.com/questions/578/#582
MikeSchinkel

Gibt es noch weitere Entwicklungen zu diesem Thema? Eigentlich bin ich irgendwie interessiert ...: D
John P Bloch

Hey @John P Bloch : Meine Kunden haben mich festgehalten und hatten einfach keine Zeit. Hoffentlich bald ...
MikeSchinkel

@John P Bloch Ich habe es tatsächlich ausprobiert und es funktioniert hervorragend. Ich musste bestimmte Kategorien ohne übergeordnete Kategorie gruppieren.
Amit

Antworten:


23

Mit Hilfe dieser habe ich der Kategorie das neue Feld 'Bild' (Eingabetypdatei) hinzugefügt

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 
    }

Es steht Ihnen frei, eine Taxonomie zu verwenden. Ersetzen categorySie sie einfach durch Ihren Taxonomienamen


Dies ist ausgezeichnet, aber können Sie bitte erklären (oder möglicherweise ein Beispiel angeben), wie diese Anpassung korrekt integriert werden kann, wenn Sie dies zu einer benutzerdefinierten Taxonomie hinzufügen möchten - zum Beispiel "people"
NetConstructor.com,

2
Update - Obwohl ich Ihren genauen Code oben kopiert habe, um dies zu testen, scheint die Datei nicht gespeichert zu sein oder wird zumindest nicht angezeigt. Könnten Sie erläutern, wo die Datei gespeichert wird, möglicherweise müssen die Berechtigungen dieses Ordners bearbeitet werden (oder, noch besser, beschreiben Sie möglicherweise, wie der Speicherort des Ordners geändert werden soll, in dem die Datei gespeichert wird?). Wenn ich eine Datei auswähle und dann versuche, einen Begriff zu speichern, wird alles außer der Datei gespeichert und daher das hochgeladene Bild nicht angezeigt.
NetConstructor.com

9

Wenn Sie dieses Feld zum benutzerdefinierten Taxonomieformular hinzufügen möchten, ersetzen Sie einfach die Kategorie durch den benutzerdefinierten Taxonomienamen in der add_actionFunktion.

Beispiel:

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

Für diejenigen, die in das Tag-Formularfeld einbinden möchten, ist der Haken etwas anders.

add_tag_form_fields

statt wie erwartet tag_add_form_fields


1

Mir ist klar, dass dies vor einiger Zeit gefragt wurde, aber WordPress hat sich seitdem ein wenig geändert. Deshalb habe ich beschlossen, ein kleines Skript zu entwickeln, das das Hinzufügen von benutzerdefinierten Feldern zu Taxonomien vereinfacht und optional das Hinzufügen von Spalten zur Begriffstabelle für jedes Feld ermöglicht. Das Skript heißt amarkal-taxonomy und ist Teil des Amarkal WordPress-Frameworks.

Das amarkal-taxonomyHinzufügen eines benutzerdefinierten Felds vereinfacht Folgendes:

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

Ich habe das Bild hinzugefügt und das Bild extra entfernt, das in der benutzerdefinierten Taxonomie abgelegt wurde, deren Name Versicherung ist.

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

}

Hinweis: Wenn Sie dieses Feld einer anderen Taxonomie hinzufügen möchten, z. B. für einen benutzerdefinierten Beitragstyp, müssen Sie den Verweis auf Kategorie durch einen Verweis auf Ihren eigenen Taxonomie-Slug ersetzen. Wenn Sie beispielsweise eine erstellte Genre-Taxonomie hinzufügen, wird diese Funktion über verknüpft

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

Mein Taxonomie-Slug-Name ist Versicherung.

add_action ('insurance_add_form_fields', array ($ this, 'add_category_image'), 10, 2);

Verwenden Sie diesen Code in Ihrer functions.phpDatei.


0

Sie müssen Ihren Code zu Ihrer Datei themes functions.php hinzufügen - auch wenn Sie dieses Feld zum benutzerdefinierten Taxonomieformular hinzufügen möchten, ersetzen Sie einfach die Kategorie durch den benutzerdefinierten Taxonomienamen in der Funktion add_action. Beispiel: add_action ('category_edit_form_fields', 'category_edit_form_fields'); wird add_action sein ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.