Как добавить пользовательские колонки на страницу администрирования произвольного типа записей
У меня есть еще один глупый вопрос, но я не могу разобраться с одной вещью :)
Я нашел эту очень хорошую статью о создании произвольных типов записей:
http://thinkvitamin.com/code/create-your-first-wordpress-custom-post-type/
Я не уверен, как работает Шаг 4.
Этот парень пишет:
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" => "Название портфолио",
"description" => "Описание",
"year" => "Год завершения",
"skills" => "Навыки",
);
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;
}
}
У меня есть два разных типа записей ('books' и 'movies').
И я не могу понять, как связать этот код с правильным типом записи!
Я уверен, что упускаю что-то (скорее всего в коде), но я не видел, чтобы он где-либо включал "portfolio_edit_columns" в код.
Я нашел это в WP Codex: http://codex.wordpress.org/Plugin_API/Action_Reference/manage_posts_custom_column и похоже, что
manage_edit-${post_type}_columns
делает магию, но я пробовал и manage_edit-books_columns, и manage_edit-movies_columns, и ничего не работает! :)
Так как создать два разных макета колонок для разных типов записей?

Код от ThinkVitamin верный. Полагаю, проблема кроется в другом месте вашего кода.
На самом деле, хук manage_edit-${post_type}_columns
принимает аргумент $columns
, который является массивом всех зарегистрированных колонок. Чтобы добавить новую колонку, просто добавьте новый элемент в этот массив, вот так:
add_filter('manage_edit-film_columns', 'my_columns');
function my_columns($columns) {
$columns['views'] = 'Просмотры';
return $columns;
}

Я знаю, как добавлять столбцы, но я не знаю, как отображать некоторые из них для пользовательского типа записей "фильмы", а другие — для типа "книги". Именно об этом и идет вопрос.

О, я увидел, что вы сказали: "Я пробовал и manage_edit-books_columns, и manage_edit-movies_columns, и ничего не вышло", и подумал, что у вас проблема с добавлением столбцов. В любом случае, по ссылке, которую я предоставил, есть хороший пример с объяснением, как отображать содержимое в столбцах — вам стоит его прочитать.

Это даже проще, чем вы думаете.
У вас есть эти две функции в WordPress:
manage_posts_columns (обратите внимание на часть "posts")
и
manage_posts_custom_column (снова "posts")
У вас есть то же самое для страниц: "manage_page_posts_columns" и "manage_page_posts_custom_column" (обратите внимание на часть "page_posts")
Итак, если вам нужно добавить эти колонки для произвольного типа записи, вам нужно сделать следующее. Допустим, ваш тип записи называется "movie", тогда:
manage_movie_posts_columns()
manage_movie_posts_custom_column()
Обратите внимание на часть "movie_posts", поэтому вы видите что-то вроде "manage_{custom_type}_posts_columns" на страницах Codex.
Для типа "books":
manage_books_posts_columns()
manage_books_posts_custom_column()
И так далее... понятно?
