web-dev-qa-db-ja.com

管理列テキストの配置

カスタム投稿タイプにカスタムフィールドを追加し、管理概要画面に出力するようにしました。しかし、テキストが列見出しと揃っていないように見えます。その理由はわかりません。

enter image description here 

これが私のコラムに対するコードです。

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

見落としてきたことはかなり確実ですが、私は何を考えることができません。

誰かがこれについて何か手引きを提供できますか?

2
Burgi

問題

列(つまり「ファイルの種類」列)を調べると、このマークアップ/ 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;
}
1
Sally CJ