> Manuales > Curso gratuito de iniciación Wordpress

En el siguiente artículo vamos a ver cómo crear de forma manual los custom post type de Wordpress.

Antes de comenzar se que todos estaréis pensando para crearlos a mano si existen ya plugin que lo hacen y nos resuelven el problema. Bien esa es una solución y al final del artículo os pasare algunos plugins que hacen lo mismo que vamos a explicar aquí, pero en mi humilde opinión hay que saber lo que hace un plugin por si en algun momento deja de funcionar y nos vemos obligados a tocar el código. Además siempre es bueno saber hacer este tipo de cosas si quieres ser un buen experto de wordpress.

¿Qué son los Custom Post Type?

Los Custom Post Type no son otra cosa que entradas personalizadas en Wordpress, es decir, igual que tenemos entradas y páginas, podemos crearnos una entrada propia por ejemplo llamada Libros, para mostrar libros, de la misma forma que mostramos paginas y entradas de blog.

El problema es que por defecto wordpress no permite hacer este tipo de entradas personalizas. Nos obliga a utilizar plugins o tocar el código para poderlas crear y mostrar.

Para crear a mano una entrada personalizada lo primero que tenemos que hacer es irnos al archivo functions.php de nuestro theme de wordpress. Es ahí donde tendremos que agregar el código necesario para nuestro fín.

Una vez dentro de functions.php tendremos que añadir el siguiente código:

// La función no será utilizada antes del 'init'.
add_action( 'init', 'my_custom_init' );


function my_custom_init() {
        $labels = array(
        'name' => _x( 'Libros', 'post type general name' ),
        'singular_name' => _x( 'Libro', 'post type singular name' ),
        'add_new' => _x( 'Añadir nuevo', 'book' ),
        'add_new_item' => __( 'Añadir nuevo Libro' ),
        'edit_item' => __( 'Editar Libro' ),
        'new_item' => __( 'Nuevo Libro' ),
        'view_item' => __( 'Ver Libro' ),
        'search_items' => __( 'Buscar Libros' ),
        'not_found' =>  __( 'No se han encontrado Libros' ),
        'not_found_in_trash' => __( 'No se han encontrado Libros en la papelera' ),
        'parent_item_colon' => ''
    );
 
    // Creamos un array para $args
    $args = array( 'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
    );
 
    register_post_type( 'libro', $args ); 
}

Como podéis comprobar el código no es muy complicado y tan solo necesitamos cambiar los textos para que aparezca tal como queremos en el escritorio.

Bien con esto tenemos una entrada personalizada creada y que aparece en nuestro escritorio, pero si nos fijamos no tenemos taxonomía para libros, es decir, no tenemos ni categorías (que podría ser géneros en este ejemplo), ni autores. Bien pues vamos a ver como creamos las taxonomías.

Para ello es necesario el siguiente código:

// Lo enganchamos en la acción init y llamamos a la función create_book_taxonomies() cuando arranque
add_action( 'init', 'create_book_taxonomies', 0 );
 
// Creamos dos taxonomías, género y autor para el custom post type "libro"
function create_book_taxonomies() {
        // Añadimos nueva taxonomía y la hacemos jerárquica (como las categorías por defecto)
        $labels = array(
        'name' => _x( 'Géneros', 'taxonomy general name' ),
        'singular_name' => _x( 'Género', 'taxonomy singular name' ),
        'search_items' =>  __( 'Buscar por Género' ),
        'all_items' => __( 'Todos los Géneros' ),
        'parent_item' => __( 'Género padre' ),
        'parent_item_colon' => __( 'Género padre:' ),
        'edit_item' => __( 'Editar Género' ),
        'update_item' => __( 'Actualizar Género' ),
        'add_new_item' => __( 'Añadir nuevo Género' ),
        'new_item_name' => __( 'Nombre del nuevo Género' ),
);
register_taxonomy( 'genero', array( 'libro' ), array(
        'hierarchical' => true,
        'labels' => $labels, /* Aquí es donde se utiliza la variable $labels que hemos creado arriba*/
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'genero' ),
));
// Añado otra taxonomía, esta vez no es jerárquica, como las etiquetas.
$labels = array(
        'name' => _x( 'Escritores', 'taxonomy general name' ),
        'singular_name' => _x( 'Escritor', 'taxonomy singular name' ),
        'search_items' =>  __( 'Buscar Escritores' ),
        'popular_items' => __( 'Escritores populares' ),
        'all_items' => __( 'Todos los escritores' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Editar Escritor' ),
        'update_item' => __( 'Actualizar Escritor' ),
        'add_new_item' => __( 'Añadir nuevo Escritor' ),
        'new_item_name' => __( 'Nombre del nuevo Escritor' ),
        'separate_items_with_commas' => __( 'Separar Escritores por comas' ),
        'add_or_remove_items' => __( 'Añadir o eliminar Escritores' ),
        'choose_from_most_used' => __( 'Escoger entre los Escritores más utilizados' )
);
 
register_taxonomy( 'escritor', 'libro', array(
        'hierarchical' => false,
        'labels' => $labels, 
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'escritor' ),
));
}

Como veis es muy parecida a la anterior pero en esta hacemos referencia a la entrada personalizada a la que queremos añadir las taxonomías, recordando que se debe añadir al archivo functions.php de nuestro theme.

Con esto ya tenemos creado nuestro Custom Post Type manualmente. Pero todavia nos quedaría un paso más, que es el de añadir campos personalizados a nuestro nuevo tipo de entrada. Esto lo explicaremos en otro artículo ya que es bastante amplio y no quiero agobiaros con tanto código.

Plugins para creación de Custom Post Type

Tal como os prometí al inicio del artículo os dejo unos plugins que te crean estos tipos de entradas personalizadas.

Sara Alvarez

Equipo DesarrolloWeb.com

Manual