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.
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?
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
.
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;
}