web-dev-qa-db-fra.com

Modifier l'ordre des colonnes personnalisées pour les panneaux de modification

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 changer la commande? Et si je veux afficher la colonne ci-dessus en tant que première ou seconde?

Merci d'avance

26
Mirko

Vous posez fondamentalement une question PHP, mais je vais y répondre parce que cela relève de WordPress. Vous devez reconstruire le tableau de colonnes en insérant votre colonne avant la colonne dont vous voulez qu'elle soit laissée de :

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;
}
35
MikeSchinkel

Si vous avez des plugins comme WPML qui ajoutent automatiquement des colonnes, même à des types d'article personnalisés, il se peut que du code compliqué apparaisse dans l'en-tête de votre tableau.

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

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

En fait, il ne s'agit que de sept lignes de code, toutes les autres colonnes étant conservées.

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

5
user2390733

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 restituer ces colonnes 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

3
Bainternet

Ceci est une combinaison de quelques SO réponses, j'espère que cela aidera 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() ne conservera pas les clés personnalisées comme nous en avons besoin. array_insert() fait.

1
DigitalDesignDj