Cum să adaugi coloane personalizate în ecranul de administrare pentru Custom Post Type

10 mar. 2011, 03:24:09
Vizualizări: 24.4K
Voturi: 4

Am o altă întrebare poate naivă, dar nu reușesc să înțeleg un lucru :)

Am găsit acest articol foarte bun despre crearea tipurilor de postări personalizate:

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

Nu sunt sigur cum funcționează Pasul 4.

Acest tip scrie:

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" => "Titlu Portfolio",
    "description" => "Descriere",
    "year" => "Anul Finalizării",
    "skills" => "Abilități",
  );

  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;
  }
}

Am două tipuri diferite de postări ('books' și 'movies').

Și nu reușesc să înțeleg cum să conectez acest cod cu cel corect!

Sunt sigur că îmi scapă ceva (cel mai probabil în cod), dar nu l-am văzut incluzând "portfolio_edit_columns" nicăieri în cod.

Am găsit asta în WP Codex: http://codex.wordpress.org/Plugin_API/Action_Reference/manage_posts_custom_column și se pare că

manage_edit-${post_type}_columns

face magia, dar am încercat atât manage_edit-books_columns cât și manage_edit-movies_columns și nimic! :)

Deci cum se creează două layouturi separate de coloane pentru tipuri diferite de postări?

0
Toate răspunsurile la întrebare 3
3

Codul de la ThinkVitamin este corect. Cred că problema vine din altă parte din codul tău.

De fapt, hook-ul manage_edit-${post_type}_columns primește un argument $columns care este un array cu toate coloanele înregistrate. Pentru a adăuga o nouă coloană, trebuie doar să adaugi un nou element în acest array, astfel:

add_filter('manage_edit-film_columns', 'my_columns');
function my_columns($columns) {
    $columns['views'] = 'Vizualizări';
    return $columns;
}
10 mar. 2011 04:39:10
Comentarii

Știu cum să adaug coloane, dar nu știu cum să afișez unele pentru tipul personalizat de postări "filme" și altele pentru tipul personalizat de postări "cărți". Aceasta este întrebarea mea.

Wordpressor Wordpressor
10 mar. 2011 13:49:28

Ah, am văzut că ai spus "Am încercat atât manage_edit-books_columns cât și manage_edit-movies_columns și nimic" și am crezut că ai probleme cu adăugarea coloanelor. Oricum, linkul pe care l-am oferit conține un bun exemplu cu explicații despre cum să afișezi conținut în coloane, ar trebui să-l citești.

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

Tot nu înțeleg. Folosesc două filtre separate, dar nu ajută deloc.

Wordpressor Wordpressor
11 mar. 2011 21:53:25
0

Este chiar mai ușor decât crezi.

În WordPress ai aceste două funcții:

manage_posts_columns (observă partea cu "posts")

și

manage_posts_custom_column (din nou "posts")

Ai același lucru și pentru pagini: "manage_page_posts_columns" și "manage_page_posts_custom_column" (observă partea cu "page_posts")

Așadar, dacă ai nevoie să adaugi aceste coloane pentru un anumit tip de postare, trebuie doar să faci așa. Să zicem că tipul tău de postare personalizat se numește "film", atunci:

manage_movie_posts_columns()
manage_movie_posts_custom_column()

Observă partea cu "movie_posts" - de aceea vezi expresii precum "manage_{tip_personalizat}_posts_columns" în documentația Codex.

Pentru un tip personalizat "cărți":

manage_books_posts_columns()
manage_books_posts_custom_column()

Și tot așa... ai înțeles?

30 oct. 2012 14:13:55
0

Uită-te cum este argumentul $arg pentru rescrierea tipului tău de postare personalizată.

Pentru a vedea mai clar datele de ieșire, poți face ceva de genul:

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

pe obiectul tipului de postare când îl interoghezi.

10 mar. 2011 04:05:05