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
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:
Como lo mostramos desde WordPress
<?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; ?>
Recibirás cada semana todas nuestras actualizaciones
Puedes estar tranquilo que nunca te enviaremos SPAM
SOBRE EL AUTOR
Andres Vega
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.