Todos sabemos que la llegada de los Custom Post Type marcaron un antes y un después en el mundo de WordPress, por ese motivo la mayoría de los themes premiun y muchos de los themes free los implementan. Crear custom post type es una gran caracteristica de WordPress.
Uno de los problemas con el que puedes encontrarte al trabajar con WordPress es que un cliente te pida cambiar su theme y con eso tengas que ingeniartelas para no perder la información que tiene almacenada en su Custom Post Type. Ya que con seguridad el nuevo tema seguro no tendra ese CPT que tanto necesitas.
Por eso la recomendación es crear un custom post type portable. ¿Qué es esto? Bueno, muy simple, crear un Custom Post Type dentro de un plugin, para que de esa forma, la información pueda sobrevivir a los cambios de theme. En realidad esto no es nada nuevo, ya hace muchos años que se aconseja realizar esta tarea, pero lamentablemente no todos los desarrolladores la implementan.
Para esto vamos a crear un sencillo plugin que nos permita englobar toda la funcionalidad.
Abrimos nuestro editor de código favorito y escribimos lo siguiente:
/** * @package Mi custom post type * @version 1 */ /* Plugin Name: Mi Custom Post Type Plugin URI: http://tuguiawordpress.com Description: Este es un plugin para crear un Custom Post Type portable Author: Tu Guia WordPress Version: 1 Author URI: */
Luego guardamos el archivo como mycpt.php y lo pondremos dentro de una carpeta con un nombre similar. Nombre de la carpeta: mycpt.
Ahora para seguir, vamos a suponer que estamos trabajando en modo local, recuerda que en un post anterior te conté “Como Instalar WordPress en modo local”, aunque si dispones de un wordpress on-line también puedes realizar lo que haremos ahora.
Colocaremos nuestra carpeta mycpt(con su archivo dentro) en la dirección C:\xampp\htdocs\nuestro_wordpress\wp-content\plugins\, es decir dentro de la carpeta plugins de nuestra instalacion.
Si ahora entras en la Instalación de tu WordPress y te diriges a la url http://localhost/nuestro_wordpress/wp-admin/plugins.php, ya deberías ver la información de nuestro plugin con los botones listos para activar, editar o borrar. Recuerda que no ejecutara ninguna acción ya que apenas hemos escrito su encabezado.
Antes de continuar agregaremos dos funciones a nuestro plugin, dos funciones que nos serviran par enganchar acciones en la activacion o la desactivacion de nuestro plugin.
function crear_cpt_activation() { } register_activation_hook(__FILE__, 'crear_cpt_activation'); function crear_cpt_deactivation() { } register_deactivation_hook(__FILE__, 'crear_cpt_deactivation');
Para aprender a crear plugins paraWordPress deberias leer algo sobre estas funciones aqui, en el codex de wordpress
Ahora, tratando de escribir la menor cantidad de código posible vamos a la página https://generatewp.com/ para obtener el código que generara nuestro Custom Post Type.
Naturalmente si quieres leer en detalle lo que es un CPT, puedes pasar por la documentación oficial para crear un CPT o esperar a uno de nuestros cursos donde explicaremos en detalle la creación y el uso de los Custom Post Type para WordPress.
En la página https://generatewp.com/ buscamos la sección Post Type Generator (o vamos a la url https://generatewp.com/post-type/ ).
Luego copiaremos el siguiente código:
// Register Custom Post Type function custom_post_type() { $labels = array( 'name' => _x( 'Post Types', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Post Type', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Post Types', 'text_domain' ), 'name_admin_bar' => __( 'Post Type', 'text_domain' ), 'archives' => __( 'Item Archives', 'text_domain' ), 'attributes' => __( 'Item Attributes', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'new_item' => __( 'New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'view_items' => __( 'View Items', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), 'featured_image' => __( 'Featured Image', 'text_domain' ), 'set_featured_image' => __( 'Set featured image', 'text_domain' ), 'remove_featured_image' => __( 'Remove featured image', 'text_domain' ), 'use_featured_image' => __( 'Use as featured image', 'text_domain' ), 'insert_into_item' => __( 'Insert into item', 'text_domain' ), 'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ), 'items_list' => __( 'Items list', 'text_domain' ), 'items_list_navigation' => __( 'Items list navigation', 'text_domain' ), 'filter_items_list' => __( 'Filter items list', 'text_domain' ), ); $args = array( 'label' => __( 'Post Type', 'text_domain' ), 'description' => __( 'Post Type Description', 'text_domain' ), 'labels' => $labels, 'supports' => array( ), 'taxonomies' => array( 'category', 'post_tag' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'page', ); register_post_type( 'post_type', $args ); } add_action( 'init', 'custom_post_type', 0 );
Antes de continuar, vamos a comentar o eliminar un pequeño trozo de código que no vamos a utilizar en este momento. El trozo de codigo es el siguiente:
// 'taxonomies' => array( 'category', 'post_tag' ),
Esto que comentamos o podemos eliminar, es para que podamos asignar a nuestro Custom Post Type, las categorías o tag que utilizamos en nuestro blog. Pero esta es una mala práctica, ya que no deberíamos mezclar el contenido de nuestro blog con este contenido especial que estamos creando.
Aprovechamos y realizamos un pequeña modificación al código que nos trajimos de generatewp. Esto es una personalización, ya que le estamos dando un nombre a nuestro CPT.
'name' => _x( 'Portafolio', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Portafolio', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Mi Portafolio', 'text_domain' ), 'name_admin_bar' => __( 'Portafolio', 'text_domain' ), 'archives' => __( 'Portafolio Archives', 'text_domain' ),
Lo más importante, es lo que viene ahora. El nombre de nuestro custom post type.
register_post_type( 'portafolio', $args );
Luego de guardar los cambios, ya puedes activar nuestro plugin y observar tu área de administración para verificar que cambios se han producido.
Ahora ya tienes tu seccion Portafolio, puedes entrar y cargar contenido. Por el momento no podras asignarle categorias ni etiquetas a los trabajos que cargues. Eso lo dejaremos para más adelante.
Pero aun falta un poco antes de terminar, veras que no tienes la posibilidad de agregar una imagen destacada para tu custom post type, tampoco podras editar su contenido.
Para conseguir personalizar nuestro custom post type vamos a modificar la siguiente linea de codigo
'supports' => array( 'title', 'editor', 'thumbnail' ),
Con esto le estamos diciendo a nuestro CPT que soporte imagenes destacadas y la edicion de todo el contenido incluyendo la url del post que creemos.
Por hoy ya es todo, ya conoces como crear un custom post type portable, para que ya no tengas que depender de ningun theme.En una próxima entrega veremos como mostrar el conteido de nuestro Custom Post Type.
Pero si tenias mucha informacion en el CPT de tu theme actual y quieres pasar todas esa informacion a este nuevo Custom Post Type y asi llevarla contigo, pues entonces debes usar alguno de los siguientes plugins:
Este plugin nos permite mover el contenido de un custom post type uno a uno, una opción lenta pero segura.
Hay varios plugins más que nos permiten mover el contenido de uno a otro CPT, pero los analizaremos en otra oportunidad.