Aggiungere la colonna 'ordine menu' alla schermata di amministrazione dei custom post type
Voglio utilizzare l'attributo menu order
per controllare l'ordinamento di un custom post type che verrà utilizzato per uno scopo specifico.
È abbastanza semplice aggiungere questo al CPT tramite supports => array('page-attributes')
ma come posso esporre il valore dell'ordine menu nella schermata di elenco amministrativo per questo CPT?

OK - alla fine si è rivelato abbastanza semplice - avevo avuto una sorta di blocco mentale - menu_order
è una variabile nell'oggetto $post
(grazie a @brady per avermelo ricordato).
Il post di @scribu sulla creazione di valori di colonna ordinabili fornisce il resto.
Quindi, assumendo che il custom post type si chiami header_text
, queste sono le funzioni e gli hook necessari:
Aggiungi una nuova colonna per l'ordinamento
/**
* aggiunge una colonna per l'ordinamento nella schermata di amministrazione per i testi di intestazione
*/
function add_new_header_text_column($header_text_columns) {
$header_text_columns['menu_order'] = "Ordine";
return $header_text_columns;
}
add_action('manage_header_text_posts_columns', 'add_new_header_text_column');
Visualizza i valori nella colonna
/**
* mostra i valori personalizzati nella colonna di ordinamento
*/
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');
Imposta la colonna come ordinabile
/**
* rende la colonna ordinabile
*/
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');

In WP 3.1, manage_edit-${post_type}columns è stato sostituito da manage${post_type}_posts_columns: codex

Non c'è davvero modo di impostare questo ordinamento come predefinito? Come per le Pagine?

È passato troppo tempo, ma giusto per la cronaca, puoi mostrare l'opzione 'ordine menu' nell'amministrazione, semplicemente includendo 'page-attributes' nell'array dell'opzione 'supports'. Per esempio:
register_post_type( 'columna',
array(
'labels' => array(
'name' => __( 'Columnas' ), // Nome plurale del post type
'singular_name' => __( 'Columna' ), // Nome singolare del post type
),
'supports' => array( 'title', 'thumbnail', 'excerpt', 'page-attributes' ), // Abilita titolo, thumbnail, excerpt e attributi pagina (incluso ordine menu)
'public' => true, // Rendi il post type pubblico
'has_archive' => false, // Disabilita archivio
'menu_position'=>5 // Posizione nel menu di amministrazione
)
);

La persona che pubblica la domanda è già a conoscenza di 'page-attributes'. Non deve mostrare il valore dell'ordine della pagina nel modo richiesto.

Ho page-attributes nei supporti per il custom post type, che aggiunge effettivamente menu order alla sidebar quando si modifica uno di questi custom post type, ma quando visualizzo l'elenco di tutti gli elementi nel custom post type nella wp admin non mostra la colonna menu order. È necessario qualcos'altro per farla apparire? Nelle opzioni schermo per le colonne ho solo data come opzione ed è selezionata.

@anu mi ha indicato la direzione giusta, tuttavia quello non è un codice moderno
Soluzione moderna && funzionante su WordPress 5.4
- aggiungi il supporto
- registra la colonna
- mostra il valore della colonna
- rendi la colonna registrata ordinabile / specifica secondo cosa dovrebbe ordinare
...
$MY_POST_TYPE = "flowers"; // solo per esempio
// il supporto base (menu_order è incluso negli page-attributes)
add_post_type_support($MY_POST_TYPE, 'page-attributes');
// aggiungi una colonna all'amministrazione del post type
// fondamentalmente registra la colonna e imposta il titolo
add_filter('manage_' . $MY_POST_TYPE . '_posts_columns', function ($columns) {
$columns['menu_order'] = "Ordine"; //chiave colonna => titolo
return $columns;
});
// mostra il valore della colonna
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); // priorità, numero di argomenti - OBBLIGATORIO QUI!
// rendila ordinabile
$menu_order_sortable_on_screen = 'edit-' . $MY_POST_TYPE; // nome dello schermo della pagina LISTA dei post
add_filter('manage_' . $menu_order_sortable_on_screen . '_sortable_columns', function ($columns){
// chiave colonna => Variabile di Query
// menu_order è in Query di default quindi possiamo semplicemente impostarlo
$columns['menu_order'] = 'menu_order';
return $columns;
});
Se sei interessato a come rendere ordinabile una colonna che non si basa su una variabile di Query di base, puoi sperimentare con il filtro request
come descritto nella documentazione qui: https://make.wordpress.org/docs/plugin-developer-handbook/10-plugin-components/custom-list-table-columns/#sortable-columns

Non ti permette semplicemente di specificare un genitore per l'elemento nella schermata di modifica - L'ho provato e non fa alcuna differenza nella schermata di elenco

scusa, non avevo capito che volevi aggiungere colonne personalizzate alla lista... forse questo può darti un punto di partenza: http://shibashake.com/wordpress-theme/add-custom-post-type-columns
