Seleccionar página

Los custom post types en WordPress se utilizan frecuentemente para agrupar contenidos específicos y sacarle mas partido utilizando funcionalidad avanzada.

Por ejemplo, la semana pasada hablaba del plugin para gestionar descargas de ficheros.

En el panel de gestión podemos ver que el apartado para gestionar las descargas es muy similar al de entradas o páginas.

Custom Post Type Sample

Esto es porque está utilizando esta técnica, para gestionar las descargas de ficheros reutilizando la funcionalidad de posts y pages pero en un apartado diferente.

Tipos de posts por defecto en WordPress

En la documentación del Codex, encontraremos varios tipos de posts por defecto, pero yo me voy a centrar en dos.

Posts

  • Es lo que utilizamos normalmente para crear las entradas del Blog.
  • Están ordenadas en orden cronológico inverso.
  • No jerárquicos. No tiene relación padre hijo.
  • Pero si que se puede organizar según el Autor, Fecha de Publicación e incluso categorías y etiquetas.
  • Todos los post tienen al menos una categoría y tener o no una etiqueta.

Pages

  • Son como posts pero viven fuera del orden cronológico de las entradas.
  • Pueden utilizar diferentes plantillas (templates) para mostrar el contenido.
  • Se pueden ordenar jerárquicamente, siendo páginas padres de otras páginas.
  • Pero no le solemos asignar categorías o etiquetas.
  • El ejemplo típico es la página de “Contacto”, “Acerca de”.
  • Se puede construir una página con WordPress que sólo tenga páginas.

¿Qué son los Custom Post Types?

  • Pueden funcionar como posts o como páginas
  • Los podemos organizar por categorías, etiquetas o taxonomías personalizadas.
  • Tienen una página indice aparte y pueden tener una plantilla personalizada para la página índice.
  • Pueden tener todas, ninguna o cualquier combinación de la funcionalidad por defecto para los posts.
  • Podemos recuperar estas entradas desde cualquier lugar utilizando un loop personalizado.

Para mi es como una caja de contenido independiente dentro de nuestra web, para la que podemos personalizar hasta el infinito utilizando funcionalidad de Posts y Pages.

¿Cómo se implementa un custom post type?

Lo mas normal es utilizar un plugin para configurar nuestro tipo de entrada personalizado.

De esta forma será compatible con cualquier theme, y lo puedes activar y desactivar independientemente del resto de funcionalidad.

Ejemplo Plugin Custom Post

Esta es la función que utilizaremos para dar de alta nuestro custom post type:

<?php register_post_type( $post_type, $args ); ?>

Este es un ejemplo de custom post type desarrollado a partir del ejemplo que puedes encontrar en el Codex – Register Post Type.

<?php
/**
* Plugin Name: Lux Courses
* Plugin URI: https://luxdesignworks.com
* Description: Custom post type to store and handle Lux courses.
* Version: 1.0.0
* Author: Jesus Garcia-Parrado Alameda
* Author URI: https://luxdesignworks.com
* License: GPL3 +
*/

/* Copyright 2016 Jesus Garcia-Parrado Alameda

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/

function lux_course_init() {
$labels = array(
'name' => _x( 'Courses', 'post type general name', 'your-plugin-textdomain' ),
'singular_name' => _x( 'Course', 'post type singular name', 'your-plugin-textdomain' ),
'menu_name' => _x( 'Courses', 'admin menu', 'your-plugin-textdomain' ),
'name_admin_bar' => _x( 'Course', 'add new on admin bar', 'your-plugin-textdomain' ),
'add_new' => _x( 'Add New', 'course', 'your-plugin-textdomain' ),
'add_new_item' => __( 'Add New Course', 'your-plugin-textdomain' ),
'new_item' => __( 'New Course', 'your-plugin-textdomain' ),
'edit_item' => __( 'Edit Course', 'your-plugin-textdomain' ),
'view_item' => __( 'View Course', 'your-plugin-textdomain' ),
'all_items' => __( 'All Courses', 'your-plugin-textdomain' ),
'search_items' => __( 'Search Courses', 'your-plugin-textdomain' ),
'parent_item_colon' => __( 'Parent Courses:', 'your-plugin-textdomain' ),
'not_found' => __( 'No courses found.', 'your-plugin-textdomain' ),
'not_found_in_trash' => __( 'No courses found in Trash.', 'your-plugin-textdomain' )
);

$args = array(
'labels' => $labels,
'description' => __( 'Description.', 'your-plugin-textdomain' ),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_icon' => 'dashicons-welcome-learn-more',
'query_var' => true,
'rewrite' => array( 'slug' => 'course' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
'taxonomies' => array('category','post_tag')
);

register_post_type( 'course', $args );
}
add_action( 'init', 'lux_course_init' );

// Flush rewrite rules to add "course" as a permalink slug
function lux_rewrite_flush() {
lux_course_init();
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'lux_rewrite_flush' );
 

Si lo prefieres lo puedes descargar de este enlace comprimido en un fichero .zip:

[Descarga no encontrada]

Ponemos el fichero en la carpeta correspondiente:

Lux Courses Custom Post Type File

Luego vamos al apartado de plugins en panel de control y activamos el plugin Lux Courses:

Lux Courses Custom Post Type Plugin

Al momento veremos aparecer el apartado para la gestión de nuestras entradas personalizadas.

Lux Courses Custom Post Type

Entonces podemos crear un nuevo curso:

Lux Courses New Course

Y el curso recién creado se mostrará en el apartado correspondiente del panel de control:

Lux Courses New Course Dashboard

Tendremos disponible el índice de cursos:

Lux Courses Index

Y si hacemos click en cualquier entrada, veremos el contenido:

Lux Course Single Page

Ya lo tenemos funcionando, así de sencillo.

Ejemplos prácticos

Para ver la técnica en acción.

Afectiva

En afectiva querían que sus cursos tubiesen un espacio propio separado de las páginas y entradas del blog y ordenado por fecha de comienzo de curso:

Afectiva Custom Post Type Curso Archive

Agepem

Mientras que lo importante para Agepem era poder navegar por los diferentes informes que ofrecen a sus pontenciales clientes:

Agepem Custom Post Type Navigation

Lux

Yo mismo he utilizado esta técnica para mi portfolio.

Lux Design Works

Plugins Relacionados

Por último, estos son algunos plugins que pueden ser útiles trabajando con esta técnica.

Advanced Custom Fields

El nombre lo dice todo, nos permite seguir personalizando las entradas.

Advanced Custom Fields

Post Type Switcher

Puede ocurrir que quieras convertir alguno de tus Posts actuales en un Custom Post Type, y con este plugin lo puedes hacer sin problemas.

Post Type Switcher

Post Types Order

También puede que necesites ordenar tus custom post types siguiendo un orden determinado, con este plugin lo podrás hacer tranquilamente.

Post Types Order

Conceptos Relacionados

Igual que para los Posts, tambien podemos tener Taxonomías personalizadas, y de esta manera poder ofrecer estructuras de clasificación del contenido mas avanzadas.

Los lectores se puede beneficiar de acceder al mismo contenido filtrando por conceptos diferentes, o encontrar contenido relacionado interesante.

Para los dos casos, podemos desarrollar plantillas personalizadas mediante un Tema hijo, para hacer nuestro contenido aun mas atractivo a los visitantes.

Conclusiones

Conocer este tipo de técnicas es interesante de cara a plantear soluciones y alternativas.

Para determinadas soluciones puede ser necesario combinar varias técnicas, hay que tener la mente abierta.

En definitiva, perder el miedo al framework de WordPress tiene sus ventajas.

 

¡Hasta Pronto!

 

Lux Your business &

Love Your Website!