martes, 9 de febrero de 2016

CUSTOM POST TYPES Y TAXONOMÍAS EN WORDPRESS, LA FORMA CORRECTA

A veces, una instalación de WordPress por defecto se puede quedar pequeña para según qué proyecto, por lo que necesitamos vitaminarlo para conseguir llevar a cabo los requisitos del mismo.
Aunque bien es cierto que jugando con las plantillas y categorías podríamos conseguir efectos similares, no es lo óptimo de cara a una buena arquitectura de la información. Cuanto más organicemos nuestro contenido más fácil será saber qué es cada cosa y cómo funciona el sitio web.

¿Qué son los custom post types?

Los Custom Post Types son tipos de entrada personalizados que puedes agregar a tu WordPress. Por ejemplo, WordPress por defecto trae como tipo de entrada:
  • Entradas
  • Páginas
  • Adjuntos
  • Revisión
  • Menú de navegación


Como ejemplo, en uno de los proyectos personales en el que estoy trabajando actualmente (aunque ya lo había hecho en otras ocasiones), he creado un custom post type para mostrar fichas de productos, dejando el blog intacto para poder informar al visitante sobre las novedades del mercado de dichos productos.
Hay miles de tutoriales sobre Custom Post Types y un hermoso Codex que tiene toda la información al respecto, pero no es fácil si no sabes cómo encararlo. Yo voy a tratar de enseñarte la que, para mí, es la forma correcta de hacerlo.

Usando Etiquetas (Labels) para los tipos de entrada

custom post type sin etiquetas
Utilizar etiquetas para los custom post types y las taxonomías es muy importante por el simple hecho de que ayuda a diferenciar los custom post types de otras herramientas que trae WordPress por defecto. Cuando añades una nueva entrada, página, categoría o etiqueta, en la parte superior de la página dice algo como “Añadir nuevo _Algo_”, dependiendo de qué estés añadiendo.
Si no utilizas etiquetas para cambiar esta parte y saber qué estas editando, automáticamente pondrá por defecto “Entrada” para los tipos de entrada y “Categoría” o “Etiqueta” para las taxonomías ya sean jerárquicas o no, respectivamente (como se ve en la imagen superior).

Configurando las etiquetas para mostrar el Custom Post Type

Ya te he mencionado que en el Codex hay información más que suficiente para hacer todo esto, pero aquí va un ejemplo rápido con su explicación, todo este código irá en el functions.php de nuestro tema:
// La función no será utilizada antes del 'init'.
add_action( 'init', 'my_custom_init' );
/* Here's how to create your customized labels */
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 ); /* Registramos y a funcionar */
}
Evidentemente, es posible que aquí haya mucho más código que en otros tutoriales de Custom Post Types, pero así es como puedes hacer tus custom post types mucho más “custom”, aunque ya sean personalizados después de todo. Además, sólo te lleva un par de segundos hacer esto.
ejemplo custom post type con etiquetas
Espero que hayas captado la idea hasta ahora. Simplemente mira en la imagen lo bonito que queda ahora en la imagen de la derecha; para tí, para tus clientes u otros usuarios del sitio web que vayan a ver la personalización que has hecho. Cualquiera que colabore en tu web podrá manejarla de una forma muy sencilla. Mola, ¿verdad?

Algunas funciones para controlar los Custom Post Types

Lo siguiente es un listado de las funciones que nos facilita WordPress con las que podremos controlar nuestros Custom Post Types:
  • post_type_exists() – Revisa si existe un custom post type.
  • is_post_type_hierarchical( $post_type ) – Cuándo el tipo de post es jerárquico. Si retorna falso es que no lo es.
  • get_post_type( $post ) – Recupera el tipo de entrada del artículo en cuestión o un post específico.
  • get_post_type_object( $post_type ) –
    Recupera un objeto del tipo de entrada por nombre.
  • get_post_types( $post ) – Obtiene una lista de todos los tipos de entrada.
  • register_post_type() – Registra un nuevo tipo de entrada. No utilizar antes del init.
  • get_post_type_capabilities() – Crea un objeto con todos los permisos de los tipos de entrada personalizados.
Hay muchas más que podéis consultar en el Codex.

Otros añadidos que debes conocer para los Custom Post Types

Obviamente no iba a dejar esto así, a medio empezar. Si te fijas en la última imagen, la de las etiquetas del custom post type personalizadas, no tiene categorías ni etiquetas… Un gran fallo para según qué tipo de producto o contenido vayamos a tratar.
También está documentado en el codex, pero vamos a aplicarlo al ejemplo anterior:
// 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, /* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */
 'show_ui' => true,
 'query_var' => true,
 'rewrite' => array( 'slug' => 'genero' ),
));
Con esto ya tenemos la primera taxonomía, a continuación vamos con la segunda:
// 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, /* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */
 'show_ui' => true,
 'query_var' => true,
 'rewrite' => array( 'slug' => 'escritor' ),
));
} // Fin de la función create_book_taxonomies().
Deberías notar cómo es bastante similar crear las etiquetas para el custom post type y para las taxonomías. ¡Realmente el proceso es idéntico!
ejemplo custom post type taxonomia con etiquetas
Ahora se ve algo como en la imagen de la izquierda; mucho mejor, ¿verdad? Ya tenemos nuestro custom custom post type listo para ser utilizado. En este caso he puesto el ejemplo de libros porque es el que utilizan en el códex (para quien busca pistas: no, no estoy montando un proyecto de libros :-D).

Algunas funciones útiles para administrar las taxonomías

Al igual que con los custom post types, existen funciones que nos permiten manejar nuestras taxonomías (sean personalizadas o no):
  • get_taxonomies() – Obtienes una lista de las taxonomías registradas.
  • get_object_taxonomies($object_type) – Retorna todas las taxonomías que pertenecen al $object_type especificado.
  • get_taxonomy() – Recupera la taxonomia especificada.
  • taxonomy_exists() – Comprueba que la taxonomía existe. Falso si no existe.
  • is_taxonomy_hierarchical() – Nos dice si una taxonomía es jerárquica. Falso en caso negativo.
  • register_taxonomy – Crea o modifica un objeto de taxonomía. No usar antes del init.
No voy a enumerar todas, podéis verlas en el Codex, concretamente aquí.
Ahora no creo que tengas excusa para exprimir aún más tu instalación de WordPress y empezar a utilizarlocomo un Framework de desarrollo.
Puedes contarme qué piensas, si te ha resultado útil y en qué utilizas tú los Custom Post Types o las dudas que tengas en los comentarios.
No olvides compartirlo si te ha gustado y darle difusión, eso me animará a seguir escribiendo y creando tutoriales como este.

fuente: http://dariobf.com/custom-post-types-wordpress/

No hay comentarios.:

Publicar un comentario