web-dev-qa-db-fra.com

Positionnement du texte de la colonne d'administration

J'ai ajouté un champ personnalisé à mon type de message personnalisé et je l'ai renvoyé dans l'écran de présentation de l'administrateur. Cependant, le texte semble ne pas être aligné sur l'en-tête de colonne et je ne comprends pas pourquoi.

 enter image description here 

Voici mon code pour les colonnes:

public function __construct() {
    add_filter( 'manage_'.$this->attributes['slug'].'_posts_columns', [$this,'customAdminColumns'] );
    add_action( 'manage_'.$this->attributes['slug'].'_posts_custom_column' , [$this,'customAdminColumnData'], 10, 2 );
}

public function customAdminColumns($columns){
    $insert=array(
        'file_type' =>  'File Type'
    );

    array_splice($columns,3,0,$insert);

    return $columns;
}

public function customAdminColumnData($column,$post_id){
    switch($column){
        case 'file_type':
            $media_id=  get_post_meta($post_id,'downloads_file',true);

            echo get_post_mime_type($media_id);

            break;
    }
}

Je suis à peu près sûr d'avoir oublié quelque chose mais je ne peux pas penser à quoi.

Quelqu'un peut-il fournir des indications à ce sujet?

2
Burgi

Le problème

Si vous inspectez la colonne (c'est-à-dire la colonne "Type de fichier"), vous verrez quelque chose comme ce balisage/HTML:

<th scope="col" id="0" class="manage-column column-0 num">File Type</th>

et ceci pour un élément td dans cette colonne:

<td class="0 column-0" data-colname="File Type">text/csv</td>

Ainsi, le problème, comme vous pouvez le constater dans les attributs id et class, est la colonneclé, qui vaut zéro (0) alors qu'elle aurait dû être file_type comme vous pouvez le voir ci-dessous:

<th scope="col" id="file_type" class="manage-column column-file_type">File Type</th>

<td class="file_type column-file_type" data-colname="File Type">text/csv</td>

Et c’est parce que, dans votre fonction customAdminColumns(), vous avez utilisé array_splice() qui, si vous lisez son doc , vous verrez le texte suivant:

Notez que les clés du tableau de remplacement ne sont pas conservées.

En vous référant à votre code:

$insert=array(
    'file_type' =>  'File Type'
);

array_splice($columns,3,0,$insert);

La clé file_type dans $insert (le tableau de remplacement) ne sera pas conservée et PHP la changera en une clé numérique basée sur son propre calcul/PHP.

Donc, dans mon cas , la clé a été remplacée par 0.

La solution

Option 1: Parcourez le tableau $columns et insérez l'élément file_type à la position souhaitée.

public function customAdminColumns($columns){
    $columns2 = [];
    $i = 0;
    foreach ( $columns as $key => $label ) {
        if ( 3 === $i ) {
            $columns2['file_type'] = 'File Type';
        }
        $columns2[ $key ] = $label;
        $i++;
    }
    $columns = $columns2;
    unset( $columns2 );

    return $columns;
}

Option 2: Utilisez array_slice() - découpez le tableau $columns jusqu'à l'index/la position de votre choix, ajoutez l'élément file_type au tableau découpé en tranches, puis ajoutez les éléments restants de $columns.

public function customAdminColumns($columns){
    $columns2 = array_slice( $columns, 0, 3 );
    $columns2['file_type'] = 'File Type';
    $columns = $columns2 + array_slice( $columns, 3 );
    unset( $columns2 );

    return $columns;
}
1
Sally CJ