Modificare l'ordine delle colonne personalizzate nei pannelli di modifica

3 feb 2011, 12:29:55
Visualizzazioni: 30.8K
Voti: 30

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

0
Tutte le risposte alla domanda 4
3
42

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;
}
3 feb 2011 13:04:02
Commenti

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

Bainternet Bainternet
3 feb 2011 13:47:29

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.

MikeSchinkel MikeSchinkel
3 feb 2011 13:59:21

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.

Geert Geert
3 nov 2012 21:47:34
1
10

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

3 ott 2013 12:37:05
Commenti

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.

Adam Lavery Adam Lavery
30 lug 2020 14:16:26
1

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.

22 ott 2016 03:18:54
Commenti

Questa dovrebbe essere la risposta corretta.

xudre xudre
28 feb 2018 01:45:30
0

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

3 feb 2011 13:02:23