Modifier l'ordre des colonnes personnalisées pour les panneaux d'édition

27

Lorsque vous enregistrez une colonne personnalisée comme ceci:

//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;
}

par défaut, il apparaît comme le dernier à droite. Comment puis-je modifier la commande? Que faire si je souhaite afficher la colonne ci-dessus en tant que première ou deuxième?

Merci d'avance

Mirko
la source

Réponses:

36

Vous posez essentiellement une question PHP, mais je vais y répondre parce que c'est dans le contexte de WordPress. Vous devez reconstruire le tableau de colonnes, en insérant votre colonne avant la colonne dont vous souhaitez qu'elle reste :

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;
}
MikeSchinkel
la source
oui je suppose que ce serait une manière plus simple :) mais j'ai eu l'idée juste dans ma réponse. belle réflexion.
Bainternet
בניית אתרים - J'avais presque fini d'écrire ma réponse quand vous avez répondu à la vôtre, donc nos réponses "croisées dans le courrier" , pour ainsi dire. Quoi qu'il en soit, il m'a fallu un certain temps pour comprendre cela; cela ne m'est certainement pas venu à l'esprit la première fois que j'en ai eu besoin.
MikeSchinkel
Une chose à surveiller: que se passe-t-il si un autre plugin supprime la colonne auteur? Votre propre colonne de vignettes disparaîtrait également. Vous pouvez faire une isset($new['thumbnail'])vérification avant de revenir $new. S'il n'est pas défini, ajoutez-le simplement à la fin, par exemple.
Geert
5

Si vous avez des plugins comme WPML qui ajoutent automatiquement des colonnes, même aux types de publication personnalisés, vous pouvez avoir du code compliqué dans votre en-tête de tableau.

Vous ne voulez pas copier le code dans votre définition de colonne. Pourquoi quelqu'un, d'ailleurs.

Nous voulons simplement étendre les colonnes par défaut déjà fournies, bien formatées et triables.

En fait, il ne s'agit que de sept lignes de code et il conserve toutes les autres colonnes intactes.

# 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;
}

J'espère que cela t'aides..

user2390733
la source
3

la seule façon dont je sais comment est de créer votre propre tableau de colonnes

// 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;
    }

puis rendre ces colonnes supplémentaires supplémentaires comme vous le feriez normalement

// 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
}

J'espère que cela t'aides

Bainternet
la source
2

Ceci est une combinaison de quelques réponses SO, j'espère que cela aide quelqu'un!

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'
    ] );
});

J'ai trouvé que array_splice()les clés personnalisées ne seront pas conservées comme nous en avons besoin. array_insert()Est-ce que.

DigitalDesignDj
la source
1
Ce devrait être la bonne réponse.
xudre