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

ОК - в итоге всё оказалось довольно просто - у меня был какой-то ментальный блок - 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');

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

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

Прошло уже много времени, но для справки: вы можете отобразить опцию 'Порядок меню' в админке, просто добавив '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
)
);

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

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

@anu указал мне верное направление, однако это не современный код
Современное решение, работающее на WordPress 5.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

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

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