Die Frage lautet "Wie füge ich ein oder mehrere Felder zum Bearbeitungsbildschirm für Kategorien, Tags und benutzerdefinierte Taxonomien in WordPress Admin hinzu?" Diese Frage wurde auf der Webseite gestellt. Hackerliste 1. August 2010 und Ich habe eine Lösung angeboten Später an diesem Tag. Der ursprüngliche Fragesteller hat das Thema noch einmal besprochen heute (21. August), 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.
Mit Hilfe dieser habe ich der Kategorie das neue Feld 'Bild' (Eingabetyp-Datei) 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 Sie einfach category
durch Ihren Taxonomienamen
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('{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');
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
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. Für einen benutzerdefinierten Beitragstyp müssen Sie den Verweis auf Kategorie durch einen Verweis auf Ihre eigene Taxonomie 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.php
-Datei.
Mir ist klar, dass dies vor einiger Zeit gefragt wurde, aber WordPress hat sich seitdem etwas 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.
Durch die Verwendung von amarkal-taxonomy
wird das Hinzufügen eines benutzerdefinierten Felds vereinfacht:
// 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 );
Ich benutze die Kategorie Meta PLugin . Funktioniert mit allen benutzerdefinierten Taxonomien, Tags und Kategorien
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');