Los Custom Post Type o entradas personalizadas de WordPress

Los Custom Post Type son básicamente entradas personalizadas en WordPress, y ésta es una funcionalidad muy útil para personalizar al máximo nuestra página web. Por defecto, WordPress no permite hacer este tipo de entradas personalizadas, lo que nos obliga a utilizar plugins o tocar el código para crearlas y mostrarlas.

Aunque existen plugins que nos pueden resolver el problema, siempre está bien saber lo que hacen, por si en algún momento tenemos que tocar el código. Así que vamos a ver cómo crear de forma manual los Custom Post Type para WordPress, un paso avanzado en la personalización de nuestra página web creada con el popular gestor de contenidos, tal y como adelantamos en el artículo sobre las páginas estáticas.  Aun así, en este artículo también facilitamos  un listado con plugins de WordPress que nos permitirán personalizar las entradas sin meternos en programación.

Si queremos crear a mano una entrada personalizada tendremos que irnos al archivo functions.php de nuestro theme de WordPress. Ahí donde tendremos que añadir el siguiente código. A modo de ejemplo, vamos a realizar un ejemplo de entrada propia llamada Libros:

// 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 ); 
}

Este código no es demasiado complicado y tan solo necesitaremos cambiar los textos para que aparezca de la manera que a nosotros nos interesa.

Con esto, ya tendremos  una entrada personalizada creada y ya presente en nuestro escritorio.

Clasificaciones

Si nos fijamos en la entrada veremos que no tenemos taxonomía para libros. Es decir, no tenemos ningún tipo de clasificación: ni géneros ni autores.

Para crear las taxonomías, necesitaremos 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' ),
));
}

En este código, 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.

Plugins para Custom Post Type

A continuación, os dejamos una selección de plugins que crean estos tipos de entradas personalizadas.

  • Custom Post Type UI. Muy intuitivo y de sencillo manejo.
  • Types. Además de crear entradas personalizadas, nos permite crear taxonomías y campos individualizados.
  • Pods. Un plugin muy completo que, además de realizar todo lo anteriormente citado en los otros plugins, cuenta con plantillas y otras opciones.

Si estás empezando en WordPress, te recomendamos consultar Primeros Pasos con WordPress y Plugins recomendados. Si tienes conocimientos de programación, te puede resultar útil la sección Saca partido a WordPress.

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir

Deja un comentario

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