Agregar columna 'orden de menú' a la pantalla de administración de tipos de contenido personalizados
Quiero usar el atributo menu order
para controlar el orden en un tipo de contenido personalizado que se utilizará para un propósito específico.
Es bastante fácil añadir esto al CPT mediante supports => array('page-attributes')
, pero ¿cómo expongo el valor del orden del menú en la pantalla de listado de administración para este CPT?

OK - al final resultó bastante simple - como si hubiera tenido algún tipo de bloqueo mental - menu_order
es una variable en el objeto $post
(gracias a @brady por recordármelo).
El post de @scribu sobre cómo crear valores de columnas ordenables proporciona el resto.
Entonces, asumiendo que el tipo de post personalizado se llama header_text
, estas son las funciones y hooks necesarios:
Añadir una nueva columna para el orden
/**
* añadir columna de orden a la pantalla de listado admin para header text
*/
function add_new_header_text_column($header_text_columns) {
$header_text_columns['menu_order'] = "Orden";
return $header_text_columns;
}
add_action('manage_header_text_posts_columns', 'add_new_header_text_column');
Mostrar los valores de la columna
/**
* mostrar valores de la columna de orden personalizada
*/
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');
Configurar la columna para que sea ordenable
/**
* hacer que la columna sea ordenable
*/
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');

En WP 3.1, manage_edit-${post_type}columns ha sido reemplazado por manage${post_type}_posts_columns: codex

¿Realmente no hay forma de que este sea el orden predeterminado? ¿Como con las Páginas?

Ha pasado mucho tiempo, pero solo para que conste, puedes mostrar la opción de 'orden del menú' en el administrador, simplemente incluyendo 'page-attributes' en el arreglo de opciones 'supports'. Por ejemplo:
register_post_type( 'columna',
array(
'labels' => array(
'name' => __( 'Columnas' ),
'singular_name' => __( 'Columna' ),
),
'supports' => array( 'title', 'thumbnail', 'excerpt', 'page-attributes' ),
'public' => true,
'has_archive' => false,
'menu_position'=>5
)
);

La persona que publica la pregunta ya conoce 'page-attributes'. No debe mostrar el valor del orden de página de la manera necesaria.

Tengo page-attributes en los supports para el tipo de post personalizado, lo cual añade el orden del menú a la barra lateral cuando edito uno de esos tipos de post personalizados, pero al ver la lista de todos los elementos del tipo de post personalizado en el administrador de WordPress, no muestra la columna de orden del menú. ¿Hay algo más requerido para que se muestre? En las opciones de pantalla para columnas, fecha es la única opción y está marcada.

@anu me dirigió en la dirección correcta, sin embargo ese no es un código moderno
Solución moderna && funciona en WordPress 5.4
- agregar soporte
- registrar columna
- mostrar el valor de la columna
- hacer que la columna registrada sea ordenable / indicar por qué debe ordenarse
...
$MY_POST_TYPE = "flowers"; // solo para mostrar un ejemplo
// el soporte básico (menu_order está incluido en page-attributes)
add_post_type_support($MY_POST_TYPE, 'page-attributes');
// agregar una columna al administrador del tipo de publicación
// básicamente registra la columna y establece su título
add_filter('manage_' . $MY_POST_TYPE . '_posts_columns', function ($columns) {
$columns['menu_order'] = "Orden"; //clave de columna => título
return $columns;
});
// mostrar el valor de la columna
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); // prioridad, número de argumentos - ¡OBLIGATORIO AQUÍ!
// hacerla ordenable
$menu_order_sortable_on_screen = 'edit-' . $MY_POST_TYPE; // nombre de pantalla de la página LISTA de publicaciones
add_filter('manage_' . $menu_order_sortable_on_screen . '_sortable_columns', function ($columns){
// clave de columna => Variable de consulta
// menu_order está en Query por defecto así que podemos simplemente establecerlo
$columns['menu_order'] = 'menu_order';
return $columns;
});
Si estás interesado en cómo harías una columna ordenable que no se base en alguna variable básica de Query, podrías trabajar con el filtro request
como se describe en la documentación aquí: https://make.wordpress.org/docs/plugin-developer-handbook/10-plugin-components/custom-list-table-columns/#sortable-columns

¿No es eso solo para especificar un padre para el elemento en la pantalla de edición? Lo he probado y no hace diferencia en la pantalla de listado

Disculpa, no entendí que querías agregar columnas personalizadas a la lista... tal vez esto te sirva como punto de partida: http://shibashake.com/wordpress-theme/add-custom-post-type-columns
