Cambia l'ordine delle colonne personalizzate per i pannelli di modifica


27

Quando registri una colonna personalizzata in questo modo:

//Register thumbnail column for au-gallery type
add_filter('manage_edit-au-gallery_columns', 'thumbnail_column');
function thumbnail_column($columns) {
$columns['thumbnail'] = 'Thumbnail';
return $columns;
}

per impostazione predefinita appare come l'ultimo a destra. Come posso cambiare l'ordine? Cosa succede se desidero mostrare la colonna sopra come la prima o la seconda?

Grazie in anticipo

Risposte:


36

In pratica stai ponendo una domanda PHP, ma risponderò perché è nel contesto di WordPress. Devi ricostruire la matrice di colonne, inserendo la colonna prima della colonna di cui vuoi che rimanga :

add_filter('manage_posts_columns', 'thumbnail_column');
function thumbnail_column($columns) {
  $new = array();
  foreach($columns as $key => $title) {
    if ($key=='author') // Put the Thumbnail column before the Author column
      $new['thumbnail'] = 'Thumbnail';
    $new[$key] = $title;
  }
  return $new;
}

sì, immagino che sarebbe un modo più semplice :) ma ho avuto l'idea giusta nella mia risposta. bel pensiero.
Bainternet,

בניית אתרים - Avevo quasi finito di scrivere la mia risposta quando hai risposto alla tua, quindi le nostre risposte "incrociate nella posta" , per così dire. Comunque, mi ci è voluto un po 'per capirlo; certamente non mi è venuto in mente la prima volta che ne avevo bisogno.
MikeSchinkel,

Una cosa a cui fare attenzione: cosa succede se un altro plugin rimuove la colonna dell'autore? Anche la colonna delle miniature scompare. Potresti fare un isset($new['thumbnail'])controllo prima di tornare $new. Se non è impostato, basta aggiungerlo alla fine, ad esempio.
Geert,

5

Se hai plugin come WPML che aggiungono automaticamente colonne, anche a tipi di post personalizzati, potresti avere un codice complicato nell'intestazione della tabella.

Non vuoi copiare il codice nella definizione della tua colonna. Perché qualcuno, del resto.

Vogliamo solo estendere le colonne predefinite già fornite, ben formattate e ordinabili.

In realtà, si tratta solo di sette righe di codice e mantiene intatte tutte le altre colonne.

# hook into manage_edit-<mycustomposttype>_columns
add_filter( 'manage_edit-mycustomposttype_columns', 'mycustomposttype_columns_definition' ) ;

# column definition. $columns is the original array from the admin interface for this posttype.
function mycustomposttype_columns_definition( $columns ) {

  # add your column key to the existing columns.
  $columns['mycolumn'] = __( 'Something different' ); 

  # now define a new order. you need to look up the column 
  # names in the HTML of the admin interface HTML of the table header. 
  #   "cb" is the "select all" checkbox.
  #   "title" is the title column.
  #   "date" is the date column.
  #   "icl_translations" comes from a plugin (in this case, WPML).
  # change the order of the names to change the order of the columns.
  $customOrder = array('cb', 'title', 'icl_translations', 'mycolumn', 'date');

  # return a new column array to wordpress.
  # order is the exactly like you set in $customOrder.
  foreach ($customOrder as $colname)
    $new[$colname] = $columns[$colname];    
  return $new;
}

spero che sia di aiuto..


3

l'unico modo in cui so come creare il tuo array di colonne

// Add to admin_init function
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('Gallery Name', 'column name');
                // your new column somewhere good in the middle
        $new_columns['thumbnail'] = __('Thumbnail');

        $new_columns['categories'] = __('Categories');
        $new_columns['tags'] = __('Tags');
        $new_columns['date'] = _x('Date', 'column name');

        return $new_columns;
    }

e quindi rendere queste colonne aggiuntive aggiunte come faresti normalmente

// Add to admin_init function
    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 );
                // image from gallery
                $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 __('None');}
            break;
        default:
            break;
        } // end switch
}

Spero che sia di aiuto


2

Questa è una combinazione di alcune risposte SO, si spera che aiuti 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' => 'Featured Image'
    ] );
});

Ho scoperto che array_splice()non manterrà le chiavi personalizzate come ne abbiamo bisogno. array_insert()lo fa.


1
Questa dovrebbe essere la risposta giusta.
xudre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.