Aggiungere la colonna 'ordine menu' alla schermata di amministrazione dei custom post type

29 feb 2012, 22:06:34
Visualizzazioni: 75.3K
Voti: 39

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?

0
Tutte le risposte alla domanda 4
3
53

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

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

ptriek ptriek
29 mag 2013 10:24:00

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

Howdy_McGee Howdy_McGee
4 set 2013 00:13:33

Ho aggiornato il codice per conformarmi a WP 3.1+ come riportato da @codex.

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

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

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

s_ha_dum s_ha_dum
24 nov 2012 01:26:16

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.

TechRemarker TechRemarker
20 set 2019 19:01:49

@cchiera: Devi seguire la risposta accettata per visualizzare la colonna. Semplicemente aggiungere 'page-attributes' non sembra funzionare.

lepe lepe
11 gen 2020 09:38:07
0

@anu mi ha indicato la direzione giusta, tuttavia quello non è un codice moderno

Soluzione moderna && funzionante su WordPress 5.4

  1. aggiungi il supporto
  2. registra la colonna
  3. mostra il valore della colonna
  4. 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

27 apr 2020 12:03:36
2
-3

Devi registrare il tuo CPT con:

'hierachical' => true
29 feb 2012 22:22:26
Commenti

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

anu anu
29 feb 2012 22:24:36

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

ungestaltbar ungestaltbar
29 feb 2012 22:45:12