Добавление столбца 'порядок меню' на экран администрирования произвольного типа записей

29 февр. 2012 г., 22:06:34
Просмотры: 75.3K
Голосов: 39

Я хочу использовать атрибут menu order для управления порядком отображения записей в произвольном типе записей, который будет использоваться для определенной цели.

Достаточно легко добавить это к произвольному типу записей через supports => array('page-attributes'), но как мне отобразить значение порядка меню на экране списка в административной панели для этого произвольного типа записей?

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

ОК - в итоге всё оказалось довольно просто - у меня был какой-то ментальный блок - menu_order это переменная в объекте $post (спасибо @brady за напоминание).

Пост @scribu о создании сортируемых значений колонок даёт остальную информацию.

Итак, предполагая, что пользовательский тип записи называется header_text, вот необходимые функции и хуки:

Добавляем новую колонку для порядка

/**
* добавляем колонку порядка на экран списка в админке для header text
*/
function add_new_header_text_column($header_text_columns) {
  $header_text_columns['menu_order'] = "Порядок";
  return $header_text_columns;
}
add_action('manage_header_text_posts_columns', 'add_new_header_text_column');

Отображаем значения колонки

/**
* показываем значения пользовательской колонки порядка
*/
function show_order_column($name){
  global $post;

  switch ($name) {
    case 'menu_order':
      $order = $post->menu_order;
      echo $order;
      break;
   default:
      break;
   }
}
add_action('manage_header_text_posts_custom_column','show_order_column');

Делаем колонку сортируемой

/**
* делаем колонку сортируемой
*/
function order_column_register_sortable($columns){
  $columns['menu_order'] = 'menu_order';
  return $columns;
}
add_filter('manage_edit-header_text_sortable_columns','order_column_register_sortable');
1 мар. 2012 г. 21:24:55
Комментарии

В WP 3.1 хук manage_edit-${post_type}columns был заменён на manage${post_type}_posts_columns: кодекс

ptriek ptriek
29 мая 2013 г. 10:24:00

Неужели действительно нет способа сделать это порядком по умолчанию? Как у страниц?

Howdy_McGee Howdy_McGee
4 сент. 2013 г. 00:13:33

Я обновил код для соответствия WP 3.1+, как указано в @codex.

lepe lepe
11 янв. 2020 г. 09:40:16
3
16

Прошло уже много времени, но для справки: вы можете отобразить опцию 'Порядок меню' в админке, просто добавив 'page-attributes' в массив опций 'supports'. Например:

    register_post_type( 'columna',
    array(
        'labels' => array(
            'name' => __( 'Колонки' ),
            'singular_name' => __( 'Колонка' ),
        ),
        'supports' => array( 'title', 'thumbnail', 'excerpt', 'page-attributes' ),
        'public' => true,
        'has_archive' => false,
        'menu_position'=>5
    )
);
24 нояб. 2012 г. 00:25:40
Комментарии

Человек, задающий вопрос, уже знает о 'page-attributes'. Это не должно отображать значение порядка страниц нужным образом.

s_ha_dum s_ha_dum
24 нояб. 2012 г. 01:26:16

У меня есть 'page-attributes' в supports для пользовательского типа записи, что добавляет порядок меню в боковую панель при редактировании одной из таких записей, но при просмотре списка всех элементов пользовательского типа записи в админке WordPress не отображается столбец порядка меню. Требуется ли что-то ещё, чтобы он отображался? В настройках экрана для столбцов единственный доступный вариант — дата, и он отмечен.

TechRemarker TechRemarker
20 сент. 2019 г. 19:01:49

@cchiera: Вы должны следовать принятому ответу, чтобы отобразить столбец. Просто добавление 'page-attributes', похоже, не работает.

lepe lepe
11 янв. 2020 г. 09:38:07
0

@anu указал мне верное направление, однако это не современный код

Современное решение, работающее на WordPress 5.4

  1. Добавить поддержку
  2. Зарегистрировать колонку
  3. Отображать значение колонки
  4. Сделать зарегистрированную колонку сортируемой / указать по чему сортировать

...

$MY_POST_TYPE = "flowers"; // пример для демонстрации

// базовая поддержка (menu_order включен в page-attributes)
add_post_type_support($MY_POST_TYPE, 'page-attributes');

// добавляем колонку в админку типа записи
// регистрирует колонку и устанавливает её заголовок
add_filter('manage_' . $MY_POST_TYPE . '_posts_columns', function ($columns) {
  $columns['menu_order'] = "Порядок"; // ключ колонки => заголовок
  return $columns;
});

// отображаем значение колонки
add_action( 'manage_' . $MY_POST_TYPE . '_posts_custom_column', function ($column_name, $post_id){
  if ($column_name == 'menu_order') {
     echo get_post($post_id)->menu_order;
  }
}, 10, 2); // приоритет, количество аргументов - ОБЯЗАТЕЛЬНО УКАЗЫВАТЬ!

// делаем колонку сортируемой
$menu_order_sortable_on_screen = 'edit-' . $MY_POST_TYPE; // название экрана страницы списка записей
add_filter('manage_' . $menu_order_sortable_on_screen . '_sortable_columns', function ($columns){
  // ключ колонки => Переменная запроса
  // menu_order уже есть в запросе по умолчанию, поэтому просто указываем его
  $columns['menu_order'] = 'menu_order';
  return $columns;
});

Если вам интересно, как сделать сортируемую колонку, не основанную на стандартной переменной запроса, нужно работать с фильтром request, как описано в документации: https://make.wordpress.org/docs/plugin-developer-handbook/10-plugin-components/custom-list-table-columns/#sortable-columns

27 апр. 2020 г. 12:03:36
2
-3

Вам необходимо зарегистрировать ваш тип записи (CPT) с параметром:

'hierachical' => true
29 февр. 2012 г. 22:22:26
Комментарии

Разве это просто позволяет указать родителя для элемента в экране редактирования - я пробовал, и это не влияет на экран списка

anu anu
29 февр. 2012 г. 22:24:36

Извините, не понял, что вы хотите добавить пользовательские колонки в список... возможно, это даст вам отправную точку: http://shibashake.com/wordpress-theme/add-custom-post-type-columns

ungestaltbar ungestaltbar
29 февр. 2012 г. 22:45:12