Ubah urutan kolom khusus untuk panel edit

27

Ketika Anda mendaftarkan kolom khusus seperti itu:

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

secara default ini muncul sebagai yang terakhir di sebelah kanan. Bagaimana saya bisa mengubah pesanan? Bagaimana jika saya ingin menunjukkan kolom di atas sebagai yang pertama atau yang kedua?

Terima kasih sebelumnya

Mirko
sumber

Jawaban:

36

Anda pada dasarnya mengajukan pertanyaan PHP, tetapi saya akan menjawabnya karena itu dalam konteks WordPress. Anda perlu membangun kembali susunan kolom, menyisipkan kolom Anda sebelum kolom yang Anda inginkan :

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;
}
MikeSchinkel
sumber
ya saya rasa itu akan menjadi cara yang lebih mudah :) tetapi saya mendapat ide yang tepat dalam jawaban saya. pemikiran yang bagus.
Bainternet
בניית אתרים - Saya hampir selesai menulis jawaban saya ketika Anda menjawab jawaban Anda, jadi jawaban kami "menyeberang surat" , jadi untuk berbicara. Bagaimanapun, butuh beberapa saat untuk memikirkannya; itu tentu tidak terpikir oleh saya saat pertama kali saya membutuhkannya.
MikeSchinkel
Satu hal yang harus diperhatikan: apa yang terjadi jika plugin lain menghapus kolom penulis? Kolom thumbnail Anda sendiri akan hilang juga. Anda dapat melakukan isset($new['thumbnail'])pemeriksaan sebelum kembali $new. Jika tidak disetel, tambahkan saja di bagian akhir, misalnya.
Geert
5

Jika Anda memiliki plugin seperti WPML yang secara otomatis menambahkan kolom, bahkan untuk jenis posting khusus, Anda mungkin memiliki kode yang rumit di header tabel Anda.

Anda tidak ingin menyalin kode ke definisi kolom Anda. Mengapa ada orang, dalam hal ini.

Kami hanya ingin memperluas kolom default yang sudah disediakan, diformat dengan baik, dan diurutkan.

Sebenarnya, ini hanya tujuh baris kode, dan itu membuat semua kolom lainnya tetap utuh.

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

semoga ini membantu..

pengguna2390733
sumber
3

satu-satunya cara saya tahu bagaimana membuat array kolom Anda sendiri

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

dan kemudian membuat kolom tambahan ini seperti yang biasa Anda lakukan

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

Semoga ini membantu

Bainternet
sumber
2

Ini adalah kombinasi dari beberapa jawaban SO, semoga membantu seseorang!

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'
    ] );
});

Saya menemukan bahwa array_splice()tidak akan menyimpan kunci khusus seperti yang kita perlukan. array_insert()tidak.

DigitalDesignDj
sumber
1
Ini harus menjadi jawaban yang tepat.
xudre