Tipos de entradas personalizadas en WordPress

¿Qué son los tipos de entrada?

Tipos de entrada personalizadas en WordPressWordPress clasifica el contenido de tu web de varias formas y una de ellas es mediante los tipos de entrada. Por defecto hay dos tipos de entrada: páginas y entradas. Las páginas se usan para el contenido estático y las entradas para el contenido de las blogs. Normalmente con estos dos tipos se cubren las necesidades de cualquier sitio web, pero a veces necesitas crear nuevos tipos para desarrollos personalizados.

Ejemplo de uso

Por ejemplo una empresa del mundo editorial dispone de un blog sobre noticias del sector del libro. Muchas entradas de este blog son críticas de libros y tienen mucha popularidad. La empresa cree que sería interesante crear una sección especial con las críticas para este tipo de contenido.

Una solución secilla sería crear una categoría llamada “Críticas de libros” y poner un enlace de la categoría en el menú (también podemos crear una plantilla category-criticas-de-libros.php para mostrar las críticas).

Pero si creamos un tipo de entradas personalizada, podemos tener separadas las entradas de críticas de cualquier otra y además tenemos la ventaja de usar taxonomías personalizadas. Con las taxonomías podemos tener una clasificación de categorías y etiquetas propias para un tipo de entrada. Así podríamos crear categorías o etiquetas con el género, autor o año de plublicación de los libros.

Paso a paso

Los tipos de entradas las podemos crear en el fichero functions.php de la plantilla o en un plugin que creemos. Lo mejor es hacerlo en un plugin, así podemos cambiar de plantilla y actualizar nuestro WordPress sin perder los tipos de entradas personalizadas. En este ejemplo creamos un plugin llamado “My Book Reviews”, para ello creamos una carpeta nueva en nuestro directorio principal de plugins (por defecto /wp-content/plugins) con el nombre de my-book-reviews, y dentro del plugin necesitamos un fichero book_reviews.php con el siguiente contenido:

<?php
/**
 * Plugin Name: My Book Reviews
 * Plugin URI: http://url.com
 * Description: Custom Type Post for Book Reviews
 * Version: 0.1
 * Author: Pedro Pinto
 * Author URI: http://url.com
 *
 */
?>   

Nos acordamos de activarlo en el panel de plugins.

Creamos el tipo de entrada críticas de libro que las llamamos book-reviews. Añadimos el siguiente código en el fichero book_reviews.php

function create_book_reviews() {
  register_post_type( 'book-reviews',
    array(
      'labels' => array(
        'name' => __( 'Book Reviews' ),
        'singular_name' => __( 'Book Review' )
      ),
    'public' => true,
    'menu_position' => 5,
    'rewrite' => array( 'slug' => 'book-reviews' ),
    'capability_type'     => 'page',
    'has_archive' => true,
    )
  );
}

add_action( 'init', 'create_book_reviews' );    

Ya tenemos el menú “Books Review” en el panel de administración justo debajo de las Entradas. Con esto podemos manejar las críticas de libro de forma independiente a las entradas del blog.

Book Review Admin Panel

Para mostrar el listado con todas las críticas usamos la url http://myblog.com/book-reviews/ que usará el template archive.php de nuestra plantilla WordPress, si queremos un listado personalizado creamos un fichero llamado archive-book-reviews.php (en la plantilla, no en el plugin).

Para mostar cada entrada personalizada, WordPress usara el fichero single.php. Si necesitamos un template personalizada puedes crear un fichero llamada single-book-reviews.php (también en la plantilla).

Ahora en el listado de las entradas “normales” del blog no aparecen las críticas, si queremos que aparezcan debemos añadir el siguiente código en el fichero book_reviews.php

function book_reviews_home( $query ) {

  if ( is_home()  )
    $query->set( 'post_type', array( 'post', 'book-reviews' ) );

  return $query;
}
add_filter( 'pre_get_posts', 'book_reviews_home' ); 

Mejorando la administración de tipos de entrada

Si nos fijamos en la administración de las críticas de libros vemos que aparecen los iconos y mensajes de las entradas clásicas. Normalmente este tipo de desarrollos se hacen por encargo para clientes, así que debemos cuidar los detalles. Vamos a cambiar estos iconos y mensajes por unos más apropiados.

Book Review Admin Panel Custom Labels

Primero añadimos todas las etiquetas personalizadas para mostrar las páginas de administración con los títulos apropiados. Cambiamos la función create_book_reviews por esta otra:

function create_book_reviews() {
  register_post_type( 'book-reviews',
    array(
      'labels' => array(
        'name'                => __( 'Book Reviews' ),
        'singular_name'       => __( 'Book Review' ),
        'menu_name'           => __( 'Book Review Reviews' ),
        'parent_item_colon'   => __( 'Parent Book Review:' ),
        'all_items'           => __( 'All Book Review Reviews' ),
        'view_item'           => __( 'View Book Review' ),
        'add_new_item'        => __( 'Add New Book Review' ),
        'add_new'             => __( 'New Book Review' ),
        'edit_item'           => __( 'Edit Book Review' ),
        'update_item'         => __( 'Update Book Review' ),
        'search_items'        => __( 'Search books reviews' ),
        'not_found'           => __( 'No books reviews found' ),
        'not_found_in_trash'  => __( 'No books reviews found in Trash' )
      ),
    'public'          => true,
    'menu_position'   => 5,
    'rewrite'         => array( 'slug' => 'book-reviews' ),
    'capability_type' => 'page',
    'has_archive'     => true,
    'menu_icon'       => untrailingslashit( plugins_url( '/images/icon_admin_book.png', __FILE__ ) ),
    )
  );
}
add_action( 'init', 'create_book_reviews' );    

Después añadimos el texto apropiado para los mensajes de información que WordPress presenta al actualizar, borrar y modificar los tipos de entrada:

function book_reviews_updated_messages( $messages ) {
  global $post, $post_ID;

  $messages['book-reviews'] = array(
    0 => '', // Unused. Messages start at index 1.
    1 => sprintf( __( 'Book Review updated. <a href="%s">View book</a>' ), esc_url( get_permalink($post_ID) ) ),
    2 => __( 'Custom field updated.' ),
    3 => __( 'Custom field deleted.' ),
    4 => __( 'Book Review updated.' ),
    5 => isset( $_GET['revision'] ) ? sprintf( __( 'Book Review restored to revision from %s' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
    6 => sprintf( __( 'Book Review published. <a href="%s">View book</a>' ), esc_url( get_permalink( $post_ID ) ) ),
    7 => __( 'Book saved.' ),
    8 => sprintf( __( 'Book Review submitted. <a target="_blank" href="%s">Preview book</a>' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ) ),
    9 => sprintf( __( 'Book Review scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview book</a>' ),
    date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink( $post_ID ) ) ),
    10 => sprintf( __( 'Book Review draft updated. <a target="_blank" href="%s">Preview book</a>' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ) ),
  );

  return $messages;
}
add_filter( 'post_updated_messages', 'book_reviews_updated_messages' );

Por último cambiamos el icono de la chincheta por un icono de un libro añadiendo el siguiente código:

function book_reviews_add_icon() {
?>
  <style type="text/css">
    .icon32-posts-book-reviews { background: url( '<?php echo untrailingslashit( plugins_url( '/images/icon_admin_book.png', __FILE__ ) ); ?>' ) !important;
  </style>
<?php
}
add_action( 'admin_print_styles', 'book_reviews_add_icon' );

Con esto conseguimos un aspecto personalizalizado en la administración de críticas de libros.

Book Review Custom Admin Panel

En el siguiente post veremos como crear las taxonomías personalizadas.

Puedes bajar el código desde aquí

Tipo de entradas en Codex

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *