Come aggiungere colonne personalizzate alla schermata di amministrazione dei Custom Post Type

10 mar 2011, 03:24:09
Visualizzazioni: 24.4K
Voti: 4

Ho un'altra domanda banale, ma c'è una cosa che non riesco a capire :)

Ho trovato questo ottimo articolo sulla creazione di custom post type:

http://thinkvitamin.com/code/create-your-first-wordpress-custom-post-type/

Non sono sicuro di come funzioni il Passo 4.

Questo tizio scrive:

add_action("manage_posts_custom_column",  "portfolio_custom_columns");
add_filter("manage_edit-portfolio_columns", "portfolio_edit_columns");

function portfolio_edit_columns($columns){
  $columns = array(
    "cb" => "<input type=\"checkbox\" />",
    "title" => "Titolo Portfolio",
    "description" => "Descrizione", 
    "year" => "Anno Completamento",
    "skills" => "Competenze",
  );

  return $columns;
}
function portfolio_custom_columns($column){
  global $post;

  switch ($column) {
    case "description":
      the_excerpt();
      break;
    case "year":
      $custom = get_post_custom();
      echo $custom["year_completed"][0];
      break;
    case "skills":
      echo get_the_term_list($post->ID, 'Skills', '', ', ','');
      break;
  }
}

Ho due diversi tipi di post ('books' e 'movies').

E non riesco a capire come collegare questo codice con quello giusto!

Sono sicuro che mi sfugge qualcosa (probabilmente nel codice), ma non ho visto dove includesse "portfolio_edit_columns" da nessuna parte nel codice.

Ho trovato questo nel Codex WP: http://codex.wordpress.org/Plugin_API/Action_Reference/manage_posts_custom_column e sembra che

manage_edit-${post_type}_columns

faccia la magia, ma ho provato sia manage_edit-books_columns che manage_edit-movies_columns e niente! :)

Quindi come si creano due layout di colonne separati per diversi tipi di post?

0
Tutte le risposte alla domanda 3
3

Il codice di ThinkVitamin è corretto. Penso che il problema provenga da un'altra parte del tuo codice.

In realtà, l'hook manage_edit-${post_type}_columns accetta un argomento $columns che è un array di tutte le colonne registrate. Per aggiungere una nuova colonna, basta aggiungere un nuovo elemento a questo array, in questo modo:

add_filter('manage_edit-film_columns', 'my_columns');
function my_columns($columns) {
    $columns['views'] = 'Visualizzazioni';
    return $columns;
}
10 mar 2011 04:39:10
Commenti

So come aggiungere colonne, ma non so come visualizzarne alcune per il tipo di post personalizzato "film" e altre per il tipo di post personalizzato "libri". Ed è proprio questo il punto della domanda.

Wordpressor Wordpressor
10 mar 2011 13:49:28

Oh, ho visto che hai detto "Ho provato sia manage_edit-books_columns che manage_edit-movies_columns e niente" e ho pensato che avessi problemi con l'aggiunta di colonne. Comunque, il link che ho fornito contiene un buon esempio con spiegazione su come mostrare il contenuto nelle colonne, dovresti leggerlo.

Anh Tran Anh Tran
10 mar 2011 15:53:27

Ancora non capisco. Sto usando due filtri separati ma non serve a nulla.

Wordpressor Wordpressor
11 mar 2011 21:53:25
0

È ancora più semplice di quanto tu creda.

Hai queste due funzioni in WordPress:

manage_posts_columns (nota la parte "posts")

e

manage_posts_custom_column (di nuovo "posts")

Hai la stessa cosa per le pagine, "manage_page_posts_columns" e "manage_page_posts_custom_column" (nota la parte "page_posts")

Quindi, se hai bisogno di aggiungere quelle colonne per un tipo di post personalizzato, devi fare così. Diciamo che il tuo tipo di post personalizzato si chiama "movie", allora:

manage_movie_posts_columns()
manage_movie_posts_custom_column()

Nota la parte "movie_posts", ecco perché vedi qualcosa come "manage_{custom_type}_posts_columns" nelle pagine del codex.

Per un tipo personalizzato "books":

manage_books_posts_columns()
manage_books_posts_custom_column()

E così via... hai capito?

30 ott 2012 14:13:55
0

Dai un'occhiata a come viene riscritto l'argomento $arg per il tuo tipo di post personalizzato.

Per ottenere una visualizzazione migliore dei dati in output, puoi fare qualcosa come:

echo '<pre>';
print_r($custom_post_type_obj);
echo '</pre>';

sull'oggetto del post type quando lo interroghi.

10 mar 2011 04:05:05