Creando un post type personalizado con WordPress

- julio 17, 2017

WordPress puede contener y mostrar contenidos de diferentes tipos. Un solo artículo de tal contenido se llama generalmente un post, aunque el post es también un tipo específico del post type. Internamente, todos los tipos de post se almacenan en el mismo lugar, en la tabla de la base de datos wp_posts, pero se diferencian por una columna llamada post_type.

Cuando instalamos por primera vez nuestro WordPress por defecto viene cargado con los siguientes post type por defecto

– Post (Post Type: ‘post’)
– Page (Post Type: ‘page’)
– Attachment (Post Type: ‘attachment’)
– Revision (Post Type: ‘revision’)
– Navigation Menu (Post Type: ‘nav_menu_item’)
– Custom CSS (Post Type: ‘custom_css’)
– Changesets (Post Type: ‘customize_changeset’)

Los cuales como ya es conocido por muchos permiten la interacción entre diferentes como los artículos, páginas, menus, etc.

Pero existen ocasiones en las cuales necesitamos crear nuestro post type personalizado que nos permita gestionar por ejemplo (productos, inmuebles, libros) o cualquier otro y no podemos hacerlo desde las entradas o páginas ya que seria bastante engorroso su administración, para realizarlo debemos de utilizar la función que ya trae por defecto WordPress register_post_type() esta función permite definir un nuevo tipo de publicación (post type) por sus etiquetas, características soportadas, disponibilidad y otras especificaciones.

La manera básica para definir un post type es la siguiente:

function codex_custom_init() {
    $args = array(
      'public' => true,
      'label'  => 'Books'
    );
    register_post_type( 'book', $args );
}
add_action( 'init', 'codex_custom_init' );

De esta forma ya podemos darle uso a nuestro post type desde el administrador de WordPress y solo fue necesario agregar dos parámetros (public, label) que controla que el tipo sea visible para los autores y el nombre del post type que se mostrara desde el administrador respectivamente y luego registramos nuestro post type con el nombre de (book) por lo general usarlo en letras minúsculas para evitar confusiones.

El resultado del post type

post type book

El anterior es la manera más básica de construir un post type para WordPress pero seguramente necesitamos personalizarlos con mas características y capacidades que nos permiten los posts personalizados como cambiarle el icono de admin, darle soporte para thumbnail, comentarios, formatos y demás.

Por esta razón vamos a crear uno un poco mas elaborado como el siguiente:

// Creamos la función para el post type book
function custom_post_example() {

// Registramos la función 'book' según el codex de WP
register_post_type( 'book',
// (http://codex.wordpress.org/Function_Reference/register_post_type)

  // Agregamos todas funciones adicionales para el post type book
  array( 'labels' => array(
    'name' => __( 'Books', 'andres-dev' ), /* El título del grupo */
    'singular_name' => __( 'Book', 'andres-dev' ), /* El título en singular */
    'all_items' => __( 'Todos los books', 'andres-dev' ), /* Todos los items del menú */
    'add_new' => __( 'Agregar nuevo', 'andres-dev' ), /* Agregar uno nuevo */
    'add_new_item' => __( 'Agregar nuevo book', 'andres-dev' ), /* Agregar nuevo con título */
    'edit' => __( 'Editar', 'andres-dev' ), /* Editar */
    'edit_item' => __( 'Editar book', 'andres-dev' ), /* Editar item */
    'new_item' => __( 'Nuevo book', 'andres-dev' ), /* Nuevo titulo en visualización */
    'view_item' => __( 'Ver book', 'andres-dev' ), /* Ver item */
    'search_items' => __( 'Buscar book', 'andres-dev' ), /* Buscar item */
    'not_found' => __( 'No se encontraron resultados', 'andres-dev' ), /* Se muestra si aún no hay entradas */
    'not_found_in_trash' => __( 'No se encontró nada en la Papelera', 'andres-dev' ), /* Se muestra si no hay nada en la papelera */
    ), /* end of arrays */
    'description' => __( 'Esto es un ejemplo de post type para books', 'andres-dev' ), /* Custom Type Description */
    'public' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'show_ui' => true,
    'query_var' => true,
    'menu_position' => 8, /* Este es el orden en que aparecerán en el menu de admin */
    'menu_icon' => 'dashicons-book', /* El icono para el menu de admin */
    // Lo podemos agregar por medio de url o desde https://developer.wordpress.org/resource/dashicons
    'rewrite' => array( 'slug' => 'book', 'with_front' => false ), /* Se especifica el slug de la url, por lo general es el mismo post type 'book' */
    'has_archive' => 'book', /* Puede cambiar el nombre del slug */
    'capability_type' => 'post',
    'hierarchical' => false,
    /* Habilitamos ciertos parámetros para el editor de cada book */
    'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'sticky')

    ) /* Fin de las opciones */
  ); /* Fin del registro post type */

}

// Agregando la función al init de WordPress
add_action( 'init', 'custom_post_example');

Luego de haber creado un post type para “book” un poco mas estructurado podremos observar algo muy similar a lo siguiente:

Post type personalizado con WP

Como lo mostramos desde WordPress

Existen varias maneras de poder mostrar la información de nuestro post type (book) y una de ellas es creando un loop personalizado como el siguiente que lo podríamos colocar en páginas como index.php, page.php, single.php.

 

<?php

   global $wp_query;

   $wp_query = new WP_Query( array(
     'post_type' => 'book', 
     'posts_per_page' => 5,
     'post_status' => 'publish'
   ));
?>
              

<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

    <?php the_title( ); ?>
                
    <?php the_content( ); ?>

<?php endwhile; ?>
Y en el cual mostraremos únicamente el titulo y el contenido de nuestros books.

 

En un siguiente artículo les explicare como crear categorías y tags personalizadas para los post type donde podrán organizar mucho mejor cada una de las plantillas single-book.php y archive-book.php y utilizar WordPress de forma mas profesional.

 

Comparte si te ha gustado este artículo.

Tags , , ,

Recibirás cada semana todas nuestras actualizaciones
Puedes estar tranquilo que nunca te enviaremos SPAM
SOBRE EL AUTOR

Freelancer del mundo web y WordPressero ya hace más de 9 años creando desarrollos custom para clientes, bloguero de profesión para ayudar a nuestra comunidad, runner en la ciudad que me encuentre. Me interesé por la tecnología desde que mi papá trajo a casa la primera computadora que fue como abrirme la puerta a un mundo nuevo que todavía sigue en desarrollo. Soy de Colombia pero ahora vivo en Montreal comiendo Poutine y disfrutando de sus temperaturas bajo cero.

¿Tienes un proyecto en mente? Hagámoslo real

CONTACTAR