Inicio / Creando plugins para WordPress / ¿Como crear un Custom Post Type Portable?
27 marzo,2017
0
marzo 27, 2017| Escrito por | | en Creando plugins para WordPress, Tutoriales Wordpress

¿Como crear un Custom Post Type Portable?

¿Como crear un Custom Post Type Portable?
1 5

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.

Crear Custom Post Type Portable

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://www.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.

Crear custom post type
Imagen de un sencillo plugin.

Generando nuestro Custom Post Type.

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.

Crear custom post type

 
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.

Conclución – Crear un Custom Post Type Portable

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.

Falta algo?

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:

Post Type Switcher

Crear custom post type-Mover contenido
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.

Deja un comentario

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