La question est "Comment puis-je ajouter un ou plusieurs champs à l'écran d'édition de catégories, de balises et de taxonomie personnalisée dans l'administrateur WordPress?} _ " Cette question était posée sur le liste des hackers 1er août 2010 et j'ai proposé une solution plus tard dans la journée. Le le demandeur d'origine a de nouveau abordé la question aujourd'hui (21 août), ce qui m'a rappelé la solution. Puisqu'il pourrait s'agir d'un besoin commun, j'ai décidé de poster la solution, y compris le code, pour que d'autres la trouvent ultérieurement.
J'ai ajouté le nouveau champ 'image' (fichier de type d'entrée) à la catégorie à l'aide de ces derniers
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
}
Vous êtes libre d'utiliser n'importe quelle taxonomie, remplacez simplement category
par votre nom de taxonomie
De plus, si vous souhaitez ajouter ce champ dans le formulaire de taxonomie personnalisée, vous devez simplement remplacer la catégorie par le nom de taxonomie personnalisé dans la fonction add_action
.
Exemple:
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');
Pour ceux qui cherchent à accrocher dans le champ de formulaire de balise, le crochet est légèrement différent.
add_tag_form_fields
au lieu de tag_add_form_fields comme on peut s'y attendre
J'ai ajouté les éléments add image et Remove image extra dans la taxonomie personnalisée, dont le nom est assurance.
/**
* 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();
}
Remarque: Si vous souhaitez ajouter ce champ à une taxonomie différente, par exemple pour un type de publication personnalisé, vous devez remplacer la référence à la catégorie par une référence à votre propre liste de taxonomie. Par exemple, si vous ajoutez une taxonomie de genre créée, vous lierez cette fonction via
add_action( 'taxonomy_add_form_fields', array ( $this, 'add_category_image' ), 10, 2 ).
Mon nom de taxonomie slug est une assurance.
add_action ('insurance_add_form_fields', tableau ($ this, 'add_category_image'), 10, 2);
Utilisez ce code dans votre fichier functions.php
.
Je sais que cela a été demandé il y a quelque temps, mais WordPress a un peu changé depuis. J'ai donc décidé de développer un petit script qui simplifie le processus d'ajout de champs personnalisés aux taxonomies et vous permet éventuellement d'ajouter des colonnes à la table de termes pour chaque champ. Le script s'appelle amarkal-taxonomy et fait partie du cadre Amarkal WordPress.
À l'aide de amarkal-taxonomy
, l'ajout d'un champ personnalisé simplifie les tâches suivantes:
// 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 );
J'utilise le Catégorie Meta PLugin . Fonctionne sur toutes les taxonomies, balises et catégories personnalisées
Vous devez ajouter votre code dans le fichier functions.php de votre thème - également si vous souhaitez ajouter ce champ dans le formulaire de taxonomie personnalisée, il vous suffit de remplacer la catégorie par le nom de la taxonomie personnalisée dans la fonction add_action. Exemple: add_action ('category_edit_form_fields', 'category_edit_form_fields'); sera add_action ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');