Agregar columna 'orden de menú' a la pantalla de administración de tipos de contenido personalizados

29 feb 2012, 22:06:34
Vistas: 75.3K
Votos: 39

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?

0
Todas las respuestas a la pregunta 4
3
53

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');
1 mar 2012 21:24:55
Comentarios

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

ptriek ptriek
29 may 2013 10:24:00

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

Howdy_McGee Howdy_McGee
4 sept 2013 00:13:33

Actualicé el código para cumplir con WP 3.1+ como lo indicó @codex.

lepe lepe
11 ene 2020 09:40:16
3
16

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
    )
);
24 nov 2012 00:25:40
Comentarios

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

s_ha_dum s_ha_dum
24 nov 2012 01:26:16

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.

TechRemarker TechRemarker
20 sept 2019 19:01:49

@cchiera: Debes seguir la respuesta aceptada para mostrar la columna. Simplemente añadir 'page-attributes' no parece funcionar.

lepe lepe
11 ene 2020 09:38:07
0

@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

  1. agregar soporte
  2. registrar columna
  3. mostrar el valor de la columna
  4. 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

27 abr 2020 12:03:36
2
-3

Debes registrar tu CPT con:

'hierarchical' => true
29 feb 2012 22:22:26
Comentarios

¿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

anu anu
29 feb 2012 22:24:36

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

ungestaltbar ungestaltbar
29 feb 2012 22:45:12