Adăugarea de câmpuri în ecranul de editare pentru Categorii, Etichete și Taxonomii Personalizate în WordPress Admin
Întrebarea este "Cum pot adăuga unul sau mai multe câmpuri în ecranul de editare pentru Categorii, Etichete și Taxonomii Personalizate în Panoul de Administrare WordPress?" Această întrebare a fost postată pe lista wp-hackers pe 1 august 2010 și am oferit o soluție în aceeași zi. Autorul întrebării inițiale a redeschis discuția astăzi (21 august), ceea ce mi-a reamintit de soluție. Având în vedere că ar putea fi o necesitate comună, am decis să public soluția, inclusiv codul, aici pentru ca și alții să o poată găsi în viitor.

Am adăugat un nou câmp 'picture' (tip input file) la categoria cu ajutorul următoarelor:
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('Imaginea categoriei', ''); ?></label>
</th>
<td>
<input type="file" id="catpic" name="catpic"/>
</td>
</tr>
<?php
}
Puteți folosi orice taxonomie, doar înlocuiți category
cu numele taxonomiei dumneavoastră

acest lucru este excelent, dar poți explica te rog (sau eventual oferi un exemplu) cum s-ar putea integra corect această personalizare dacă vrei să o adaugi la o taxonomie personalizată - de exemplu "persoane"

Actualizare - Deși am copiat exact codul tău de mai sus pentru a testa acest lucru, fișierul nu pare să fie salvat sau cel puțin nu apare. Poți explica unde se salvează fișierul, poate că permisiunile acelui folder trebuie editate (sau chiar mai bine, ai putea descrie cum s-ar putea modifica locația folderului unde se salvează?). Când selectez un fișier și apoi încerc să salvez un termen, se salvează totul exceptând fișierul și astfel nu-mi arată imaginea încărcată.

De asemenea, dacă doriți să adăugați acel câmp în formularul de taxonomie personalizată, trebuie doar să înlocuiți categoria cu numele taxonomiei personalizate în funcția add_action
.
Exemplu:
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');

Am adăugat câmpurile suplimentare "Adaugă imagine" și "Șterge imagine" în taxonomia personalizată numită "insurance".
/**
* Clasa pluginului
**/
if ( ! class_exists( 'CT_TAX_META' ) ) {
class CT_TAX_META {
public function __construct() {
//
}
/*
* Inițializarea clasei și începerea apelurilor de hooks și filtre
* @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();
}
/*
* Adăugarea unui câmp de formular în pagina de categorie nouă
* @since 1.0.0
*/
public function add_category_image ( $taxonomy ) { ?>
<div class="form-field term-group">
<label for="category-image-id"><?php _e('Imagine', '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( 'Adaugă Imagine', '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( 'Șterge Imagine', 'hero-theme' ); ?>" />
</p>
</div>
<?php
}
/*
* Salvarea câmpului de formular
* @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 );
}
}
/*
* Editarea câmpului de formular
* @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( 'Imagine', '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( 'Adaugă Imagine', '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( 'Șterge Imagine', 'hero-theme' ); ?>" />
</p>
</td>
</tr>
<?php
}
/*
* Actualizarea valorii câmpului de formular
* @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', '' );
}
}
/*
* Adăugarea scriptului
* @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;" />');
});
// Mulțumiri: 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!=""){
// Curăță imaginea thumbnail
$('#category-image-wrapper').html('');
}
}
});
});
</script>
<?php }
}
$CT_TAX_META = new CT_TAX_META();
$CT_TAX_META -> init();
}
Notă: Dacă doriți să adăugați acest câmp într-o altă taxonomie, de exemplu pentru un tip de postare personalizat, va trebui să înlocuiți referința la "category" cu referința la slug-ul taxonomiei dumneavoastră. De exemplu, dacă ați creat o taxonomie "gen", ați conecta această funcție prin:
add_action( 'taxonomy_add_form_fields', array ( $this, 'add_category_image' ), 10, 2 ).
Slug-ul taxonomiei mele este "insurance".
add_action( 'insurance_add_form_fields', array ( $this, 'add_category_image' ), 10, 2 );
Folosiți acest cod în fișierul functions.php
.

Înțeleg că această întrebare a fost adresată acum ceva timp, dar WordPress s-a schimbat de atunci, așa că am decis să dezvolt un mic script care simplifică procesul de adăugare a câmpurilor personalizate la taxonomii și, opțional, vă permite să adăugați coloane în tabelul de termeni pentru fiecare câmp. Scriptul se numește amarkal-taxonomy și face parte din cadrul WordPress Amarkal.
Folosind amarkal-taxonomy
, adăugarea unui câmp personalizat se simplifică astfel:
// Adaugă un câmp text la formularele 'add' și 'edit' ale taxonomiei 'category':
amarkal_taxonomy_add_field('category', 'cat_icon', array(
'type' => 'text',
'label' => 'Pictogramă',
'description' => 'Pictograma categoriei',
'table' => array(
'show' => true, // Adaugă o coloană în tabelul de termeni
'sortable' => true // Face coloana sortabilă
)
));
// Apoi puteți prelua datele folosind:
$icon = get_term_meta( $term_id, 'cat_icon', true );

Trebuie să adăugați codul în fișierul functions.php al temei - de asemenea, dacă doriți să adăugați acel câmp în formularul taxonomiei personalizate, trebuie doar să înlocuiți "category" cu numele taxonomiei personalizate în funcția add_action.
Exemplu:
add_action('category_edit_form_fields','category_edit_form_fields');
va deveni
add_action('custom_taxonomy_name_form_fields','function_name_to_hook_on');

Folosesc Plugin-ul Category Meta. Funcționează cu toate taxonomiile personalizate, etichetele și categoriile
