Изменение порядка пользовательских колонок для панелей редактирования

3 февр. 2011 г., 12:29:55
Просмотры: 30.8K
Голосов: 30

Когда вы регистрируете пользовательскую колонку таким образом:

//Регистрация колонки миниатюры для типа au-gallery
add_filter('manage_edit-au-gallery_columns', 'thumbnail_column');
function thumbnail_column($columns) {
$columns['thumbnail'] = 'Миниатюра';
return $columns;
}

по умолчанию она появляется последней справа. Как можно изменить порядок? Что если я хочу показать вышеуказанную колонку первой или второй?

Заранее спасибо

0
Все ответы на вопрос 4
3
42

Вы задаёте вопрос по PHP, но я отвечу, поскольку это в контексте WordPress. Вам нужно перестроить массив колонок, вставив свою колонку перед той, слева от которой она должна находиться:

add_filter('manage_posts_columns', 'thumbnail_column');
function thumbnail_column($columns) {
  $new = array();
  foreach($columns as $key => $title) {
    if ($key=='author') // Помещаем колонку "Миниатюра" перед колонкой "Автор"
      $new['thumbnail'] = 'Миниатюра';
    $new[$key] = $title;
  }
  return $new;
}
3 февр. 2011 г. 13:04:02
Комментарии

да, наверное, это был бы более простой способ :) но в моем ответе я правильно уловил суть. хорошая мысль.

Bainternet Bainternet
3 февр. 2011 г. 13:47:29

בניית אתרים - я почти закончил писать свой ответ, когда вы ответили, так что наши ответы "разминулись в почте", так сказать. В любом случае, мне потребовалось время, чтобы разобраться в этом; это точно не пришло мне в голову, когда я впервые столкнулся с такой необходимостью.

MikeSchinkel MikeSchinkel
3 февр. 2011 г. 13:59:21

Один момент, на который стоит обратить внимание: что произойдет, если другой плагин удалит колонку автора? Ваша колонка с миниатюрами тоже исчезнет. Вы можете добавить проверку isset($new['thumbnail']) перед возвратом $new. Если она не установлена, просто добавьте ее в конец, например.

Geert Geert
3 нояб. 2012 г. 21:47:34
1
10

Если у вас есть плагины, такие как WPML, которые автоматически добавляют колонки, даже для пользовательских типов записей, у вас может быть сложный код в заголовке таблицы.

Вам не нужно копировать этот код в определение вашей колонки. Кому вообще это может понадобиться.

Мы просто хотим расширить уже предоставленные, красиво оформленные и сортируемые колонки по умолчанию.

Фактически, это всего семь строк кода, и он сохраняет все остальные колонки нетронутыми.

# хуки в manage_edit-<mycustomposttype>_columns
add_filter( 'manage_edit-mycustomposttype_columns', 'mycustomposttype_columns_definition' ) ;

# определение колонок. $columns - это исходный массив из административного интерфейса для этого типа записи.
function mycustomposttype_columns_definition( $columns ) {

  # добавьте ключ вашей колонки к существующим колонкам.
  $columns['mycolumn'] = __( 'Что-то другое' ); 

  # теперь определите новый порядок. вам нужно посмотреть названия колонок 
  # в HTML административного интерфейса в заголовке таблицы. 
  #   "cb" - это чекбокс "выбрать все".
  #   "title" - это колонка с заголовком.
  #   "date" - это колонка с датой.
  #   "icl_translations" добавлено плагином (в данном случае, WPML).
  # измените порядок названий, чтобы изменить порядок колонок.
  $customOrder = array('cb', 'title', 'icl_translations', 'mycolumn', 'date');

  # верните новый массив колонок WordPress.
  # порядок будет именно таким, как вы установили в $customOrder.
  foreach ($customOrder as $colname)
    $new[$colname] = $columns[$colname];    
  return $new;
}

надеюсь, это поможет..

3 окт. 2013 г. 12:37:05
Комментарии

Это более правильное решение при добавлении пользовательских колонок в стандартные таблицы админки. Принятый ответ работает только для переупорядочивания самих пользовательских колонок ($columns содержит только пользовательские колонки). Данное решение позволяет вставлять пользовательские колонки между стандартными колонками.

Adam Lavery Adam Lavery
30 июл. 2020 г. 14:16:26
1

Это комбинация нескольких ответов с Stack Overflow, надеюсь, кому-то поможет!

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' => 'Изображение записи'
    ] );
});

Я обнаружил, что array_splice() не сохраняет пользовательские ключи, как нам нужно. array_insert() делает это.

22 окт. 2016 г. 03:18:54
Комментарии

Это должен быть правильный ответ.

xudre xudre
28 февр. 2018 г. 01:45:30
0

единственный известный мне способ — создать собственный массив колонок

// Добавить в функцию admin_init
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('Название галереи', 'column name');
                // ваша новая колонка где-то в удобном месте по середине
        $new_columns['thumbnail'] = __('Миниатюра');

        $new_columns['categories'] = __('Категории');
        $new_columns['tags'] = __('Метки');
        $new_columns['date'] = _x('Дата', 'column name');

        return $new_columns;
    }

а затем отображать эти дополнительные колонки, как обычно

// Добавить в функцию admin_init
    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 );
                // изображение из галереи
                $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 __('Нет');}
            break;
        default:
            break;
        } // конец switch
}

Надеюсь, это поможет

3 февр. 2011 г. 13:02:23