Cómo agregar columnas personalizadas a la pantalla de administración de tipos de publicación personalizados

10 mar 2011, 03:24:09
Vistas: 24.4K
Votos: 4

Tengo otra pregunta tonta, pero hay algo que no logro entender :)

Encontré este muy buen artículo sobre la creación de tipos de publicación personalizados:

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

No estoy seguro de cómo funciona el Paso 4.

Este tipo escribe:

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" => "Título del Portafolio",
    "description" => "Descripción",
    "year" => "Año Completado",
    "skills" => "Habilidades",
  );

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

Tengo dos tipos de publicación diferentes ('books' y 'movies').

¡Y no logro entender cómo vincular este código con el correcto!

Estoy seguro de que me estoy perdiendo algo (probablemente en el código), pero no vi que incluyera "portfolio_edit_columns" en ninguna parte del código.

Encontré esto en el Codex de WP: http://codex.wordpress.org/Plugin_API/Action_Reference/manage_posts_custom_column y parece que

manage_edit-${post_type}_columns

hace la magia, pero he probado tanto manage_edit-books_columns como manage_edit-movies_columns ¡y nada! :)

Entonces, ¿cómo crear dos diseños de columnas separados para diferentes tipos de publicación?

0
Todas las respuestas a la pregunta 3
3

El código de ThinkVitamin es correcto. Creo que el problema viene de otra parte de tu código.

De hecho, el hook manage_edit-${post_type}_columns toma un argumento $columns que es un array de todas las columnas registradas. Para añadir una nueva columna, simplemente añade un nuevo elemento a este array, así:

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

Sé cómo añadir columnas, no sé cómo mostrar algunas de ellas para el tipo de entrada personalizado películas y otras para el tipo de entrada personalizado libros. Y eso es de lo que trata la pregunta.

Wordpressor Wordpressor
10 mar 2011 13:49:28

Oh, vi que dijiste "He probado tanto manage_edit-books_columns como manage_edit-movies_columns y nada" y pensé que tenías problemas para añadir columnas. De todos modos, el enlace que proporcioné tiene un buen ejemplo con explicación sobre cómo mostrar contenido en columnas, deberías leerlo.

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

Sigo sin entenderlo. Estoy usando dos filtros separados pero no ayuda en absoluto.

Wordpressor Wordpressor
11 mar 2011 21:53:25
0

Es incluso más fácil de lo que crees.

Tienes estas dos funciones en WordPress:

manage_posts_columns (fíjate en la parte "posts")

y

manage_posts_custom_column (de nuevo "posts")

Tienes lo mismo para páginas, "manage_page_posts_columns" y "manage_page_posts_custom_column" (observa la parte "page_posts")

Entonces, si necesitas añadir esas columnas para un tipo de post personalizado, solo necesitas hacerlo así. Digamos que el nombre de tu tipo de post personalizado es "película", entonces:

manage_movie_posts_columns()
manage_movie_posts_custom_column()

Observa la parte "movie_posts", por eso ves algo como "manage_{tipo_personalizado}_posts_columns" en las páginas del Codex.

Para un tipo personalizado "libros":

manage_books_posts_columns()
manage_books_posts_custom_column()

Y así sucesivamente... ¿lo entiendes?

30 oct 2012 14:13:55
0

Echa un vistazo a cómo está el argumento de reescritura $arg para tu tipo de publicación personalizado.

Para obtener una mejor vista de los datos de salida, simplemente haz algo como:

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

en el objeto del tipo de publicación cuando lo estés consultando.

10 mar 2011 04:05:05