カスタム投稿タイプにカスタムフィールドを追加し、管理概要画面に出力するようにしました。しかし、テキストが列見出しと揃っていないように見えます。その理由はわかりません。
これが私のコラムに対するコードです。
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;
}
}
見落としてきたことはかなり確実ですが、私は何を考えることができません。
誰かがこれについて何か手引きを提供できますか?
列(つまり「ファイルの種類」列)を調べると、このマークアップ/ HTMLのようなものが表示されます。
<th scope="col" id="0" class="manage-column column-0 num">File Type</th>
これは、その列のtd
要素に適用されます。
<td class="0 column-0" data-colname="File Type">text/csv</td>
id
属性とclass
属性に見られるように、問題は列のkeyです。これは、以下のように0
でなければならない場合はゼロ(file_type
)です。
<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>
そしてそれは、あなたのcustomAdminColumns()
関数で、あなたがarray_splice()
を使ったのであれば、あなたがその doc を読むと、あなたは次の文章を見るでしょう:
置換配列のキーは保存されないことに注意してください。
コードを参照してください。
$insert=array(
'file_type' => 'File Type'
);
array_splice($columns,3,0,$insert);
file_type
(置換配列)の$insert
キーは保持されず、PHPはそれ自身の/ PHP自身の計算に基づいてそれを数字キーに変更します。
だから 私の場合 では、キーは0
に変更されました。
オプション1: $columns
配列をループ処理して、file_type
項目を優先位置に挿入します。
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;
}
オプション2: array_slice()
を使用 - 希望するインデックス/位置まで$columns
配列をスライスし、スライスされた配列にfile_type
項目を追加してから、残りの項目を追加します。 $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;
}