Modificare l'ordine delle colonne personalizzate nei pannelli di modifica
Quando registri una colonna personalizzata in questo modo:
//Registra colonna miniatura per il tipo au-gallery
add_filter('manage_edit-au-gallery_columns', 'thumbnail_column');
function thumbnail_column($columns) {
$columns['thumbnail'] = 'Miniatura';
return $columns;
}
per impostazione predefinita appare come ultima colonna a destra. Come posso modificarne l'ordine? Come faccio se voglio mostrare la colonna sopra come prima o seconda?
Grazie in anticipo

Stai fondamentalmente ponendo una domanda su PHP, ma risponderò perché è nel contesto di WordPress. Devi ricostruire l'array delle colonne, inserendo la tua colonna prima di quella alla quale vuoi che sia a sinistra:
add_filter('manage_posts_columns', 'thumbnail_column');
function thumbnail_column($columns) {
$new = array();
foreach($columns as $key => $title) {
if ($key=='author') // Inserisce la colonna Thumbnail prima della colonna Autore
$new['thumbnail'] = 'Thumbnail';
$new[$key] = $title;
}
return $new;
}

sì, immagino che sarebbe un modo più semplice :) ma l'idea nella mia risposta era corretta. bel pensiero.

Sviluppo siti web - Stavo quasi finendo di scrivere la mia risposta quando hai risposto tu, quindi le nostre risposte si sono "incrociate nella posta", per così dire. Comunque, mi ci è voluto un po' per capirlo; di certo non mi era venuto in mente la prima volta che ne ho avuto bisogno.

Una cosa a cui prestare attenzione: cosa succede se un altro plugin rimuove la colonna dell'autore? Anche la tua colonna per le miniature scomparirebbe. Potresti fare un controllo isset($new['thumbnail'])
prima di restituire $new
. Se non è impostata, puoi semplicemente aggiungerla alla fine, ad esempio.

Se hai plugin come WPML che aggiungono automaticamente colonne, anche ai post type personalizzati, potresti avere codice complicato nell'intestazione della tua tabella.
Non vuoi copiare il codice nella definizione della tua colonna. E perché mai qualcuno dovrebbe farlo, dopotutto.
Vogliamo semplicemente estendere le colonne predefinite già fornite, ben formattate e ordinabili.
In effetti, sono solo sette righe di codice, e mantiene intatte tutte le altre colonne.
# agganciarsi a manage_edit-<mycustomposttype>_columns
add_filter( 'manage_edit-mycustomposttype_columns', 'mycustomposttype_columns_definition' ) ;
# definizione colonne. $columns è l'array originale dall'interfaccia di admin per questo posttype.
function mycustomposttype_columns_definition( $columns ) {
# aggiungi la tua chiave di colonna alle colonne esistenti.
$columns['mycolumn'] = __( 'Qualcosa di diverso' );
# ora definisci un nuovo ordine. devi cercare i nomi delle colonne
# nell'HTML dell'interfaccia di admin dell'intestazione della tabella.
# "cb" è la checkbox "seleziona tutto".
# "title" è la colonna del titolo.
# "date" è la colonna della data.
# "icl_translations" proviene da un plugin (in questo caso, WPML).
# cambia l'ordine dei nomi per cambiare l'ordine delle colonne.
$customOrder = array('cb', 'title', 'icl_translations', 'mycolumn', 'date');
# restituisci un nuovo array di colonne a wordpress.
# l'ordine è esattamente come impostato in $customOrder.
foreach ($customOrder as $colname)
$new[$colname] = $columns[$colname];
return $new;
}
spero che questo aiuti..

Questa è una risposta migliore quando si aggiungono colonne personalizzate alle tabelle standard dell'amministrazione. La risposta accettata funziona solo per riordinare le colonne personalizzate stesse ($columns contiene solo colonne personalizzate). Questa risposta permette di inserire colonne personalizzate tra le colonne standard.

Questa è una combinazione di alcune risposte da Stack Overflow, spero possa aiutare qualcuno!
function array_insert( $array, $index, $insert ) {
return array_slice( $array, 0, $index, true ) + $insert +
array_slice( $array, $index, count( $array ) - $index, true);
}
add_filter( 'manage_resource_posts_columns' , function ( $columns ) {
return array_insert( $columns, 2, [
'image' => 'Immagine in evidenza'
] );
});
Ho scoperto che array_splice()
non mantiene le chiavi personalizzate come invece ci serve. array_insert()
lo fa.

l'unico modo che conosco è creare il proprio array di colonne
// Aggiungi alla funzione admin_init
add_filter('manage_edit-au-gallery_columns', 'add_my_gallery_columns');
function add_my_gallery_columns($gallery_columns) {
$new_columns['cb'] = '<input type="checkbox" />';
$new_columns['id'] = __('ID');
$new_columns['title'] = _x('Nome Galleria', 'nome colonna');
// tua nuova colonna inserita in una posizione adatta
$new_columns['thumbnail'] = __('Anteprima');
$new_columns['categories'] = __('Categorie');
$new_columns['tags'] = __('Tag');
$new_columns['date'] = _x('Data', 'nome colonna');
return $new_columns;
}
e poi renderizzare queste colonne aggiuntive come faresti normalmente
// Aggiungi alla funzione admin_init
add_action('manage_au-gallery_posts_custom_column', 'manage_gallery_columns', 10, 2);
function manage_gallery_columns($column_name, $id) {
global $wpdb;
switch ($column_name) {
case 'id':
echo $id;
break;
case 'Thumbnail':
$thumbnail_id = get_post_meta( $id, '_thumbnail_id', true );
// immagine dalla galleria
$attachments = get_children( array('post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image') );
if ($thumbnail_id)
$thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );
elseif ($attachments) {
foreach ( $attachments as $attachment_id => $attachment ) {
$thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true );
}
}
if ( isset($thumb) && $thumb ) {echo $thumb; } else {echo __('Nessuna');}
break;
default:
break;
} // fine switch
}
Spero sia utile
