¿Que es un Custom Post Type?

En WordPress un Custom Post Type es básicamente lo mismo que una entrada clásica, pero con otro nombre y destinado a un contenido en particular. Puede contener configuraciones específicas o una plantilla diferente a la habitual.

Resulta útil en cualquier tipo de desarrollo WordPress, en especial en los websites que publican diferentes tipos de contenidos.

Como añadir un Custom Post Type

Donde hacer el copy/paste: functions.php

add_action( 'init', 'productos_create' );


function productos_create() {
	$labels = array(
	'name' => __( 'Productos'), 
        'singular_name' => __( 'producto' ),
        'add_new' => _x( 'Añadir nuevo', 'producto' ),
        'add_new_item' => __( 'Añadir nuevo producto'),
        'edit_item' => __( 'Editar producto' ),
        'new_item' => __( 'Nuevo producto' ),
        'view_item' => __( 'Ver producto' ),
        'search_items' => __( 'Buscar productos' ),
        'not_found' =>  __( 'No se ha encontrado ningún producto' ),
        'not_found_in_trash' => __( 'No se han encontrado productos en la papelera' ),
        'parent_item_colon' => ''
    );
 
    $args = array(
        'label' => __('productos'),
        'labels' => $labels,
        'public' => true,
        'can_export' => true,
        'show_ui' => true,
        '_builtin' => false,
        'capability_type' => 'page',        
        'hierarchical' => false,
        'rewrite' => array( 'slug' => 'productos', 'with_front' => false ),
        'has_archive' => 'shows',
        'supports'=> array('title','editor','thumbnail','excerpt','custom-fields','revisions'),
        'show_in_nav_menus' => true,
        'taxonomies' => array( 'productos_category'),
        'menu_icon' => 'dashicons-tag',
        'map_meta_cap' => true
        );
 
    register_post_type( 'productos', $args ); 

}

Añadir categorías a un Custom Post Type

Donde hacer el copy/paste: functions.php

add_action( 'init', 'productos_category_addtax', 0 );
function productos_category_addtax(){
    $labels = array(
        'name' => _x( 'Categorías', 'taxonomy general name' ),
        'singular_name' => _x( 'Categoría', 'taxonomy singular name' ),
        'search_items' =>  __( 'Buscar Categorías' ),
        'popular_items' => __( 'Categorías Populares' ),
        'all_items' => __( 'Todas las Categorías' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Editar Categorías' ),
        'update_item' => __( 'Actualizar Categorías' ),
        'add_new_item' => __( 'Añadir Categoría' ),
        'new_item_name' => __( 'Nuevo Nombre de Categoría' ),
        'separate_items_with_commas' => __( 'Separe las categorías con comas' ),
        'add_or_remove_items' => __( 'Añadir o quitar categorías' ),
        'choose_from_most_used' => __( 'Elija de las categorías más usadas' ),
        );

    register_taxonomy('show_category','productos', array(
    	'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
        'labels' => $labels,
        'hierarchical' => true,
        'show_ui' => true,
        'query_var' => true,
        ));
}

Añadir la categoría al Permalink de un Custom Post Type

Donde hacer el copy/paste: functions.php

function show_cat_in_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'productos' ){
        $terms = wp_get_object_terms( $post->ID, 'show_category' );
        if( $terms ){
            return str_replace( '%show_category%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'show_cat_in_permalinks', 1, 2 );

En el parametro rewrite de nuestro register_post_type añadiremos el id de la categoría para que se muestre la categoria en el permalink de nuestra entrada.

'rewrite' => array( 'slug' => 'producto/%show_category%', 'with_front' => false ),

Crear página para un Custom Post Type

Clonaremos el archivo «page.php» de nuestro tema de WordPress de la siguiente forma, después actualizaremos los permalinks:

page-{post_type}.php

Crear página de entrada para un Custom Post Type

Clonaremos el archivo «single.php» de nuestro tema de WordPress de la siguiente forma, después actualizaremos los permalinks:

single-{post_type}.php

Crear página de archivo para un Custom Post Type

Clonaremos el archivo «archive.php» de nuestro tema de WordPress de la siguiente forma, después actualizaremos los permalinks:

archive-{post_type}.php

Si te ha sido de utilidad ¡deja un comentario! 🙂