Thay đổi thứ tự các cột tùy chỉnh cho bảng chỉnh sửa


27

Khi bạn đăng ký một cột tùy chỉnh như vậy:

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

theo mặc định, nó xuất hiện như là cái cuối cùng bên phải. Làm thế nào tôi có thể thay đổi thứ tự? Nếu tôi muốn hiển thị cột trên là cột đầu tiên hoặc cột thứ hai thì sao?

Cảm ơn bạn trước

Câu trả lời:


36

Về cơ bản, bạn đang hỏi một câu hỏi PHP, nhưng tôi sẽ trả lời nó vì nó nằm trong bối cảnh của WordPress. Bạn cần xây dựng lại mảng cột, chèn cột của bạn trước cột bạn muốn bên trái :

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

vâng tôi đoán đó sẽ là cách dễ dàng hơn :) nhưng tôi đã có ý tưởng ngay trong câu trả lời của mình. suy nghĩ tốt.
Bai Internet

בנ - Tôi gần như đã hoàn thành việc viết câu trả lời của mình khi bạn trả lời của bạn, vì vậy câu trả lời của chúng tôi "được gửi qua thư" , có thể nói như vậy. Dù sao, tôi phải mất một thời gian để tìm ra điều đó; nó chắc chắn đã không xảy ra với tôi lần đầu tiên tôi cần nó.
MikeSchinkel

Một điều cần chú ý: điều gì xảy ra nếu một plugin khác xóa cột tác giả? Cột hình thu nhỏ của riêng bạn cũng sẽ biến mất. Bạn có thể làm một isset($new['thumbnail'])kiểm tra trước khi trở về $new. Nếu nó không được đặt, ví dụ, chỉ cần thêm nó vào cuối.
Geert

5

Nếu bạn có các plugin như WPML tự động thêm các cột, thậm chí vào các loại bài đăng tùy chỉnh, bạn có thể có mã phức tạp trong tiêu đề bảng của mình.

Bạn không muốn sao chép mã vào định nghĩa cột của bạn. Tại sao bất cứ ai, cho vấn đề đó.

Chúng tôi chỉ muốn mở rộng các cột mặc định đã được cung cấp, được định dạng độc đáo và có thể sắp xếp.

Trên thực tế, đây chỉ là bảy dòng mã và nó giữ nguyên tất cả các cột khác.

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

hi vọng điêu nay co ich..


3

cách duy nhất tôi biết là tạo ra các cột của riêng bạn

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

và sau đó kết xuất các cột được thêm vào như bạn thường làm

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

Hi vọng điêu nay co ich


2

Đây là sự kết hợp của một vài câu trả lời SO, hy vọng nó sẽ giúp được ai đó!

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

Tôi thấy rằng array_splice()sẽ không giữ các khóa tùy chỉnh như chúng ta cần. array_insert()làm.


1
Đây phải là câu trả lời đúng.
xudre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.