Taxonomías en WordPress

¿Qué son los taxonomías?

Taxonomías en WordPress

Las taxonomías son una forma de clasifiar contenido en WordPress. Las taxonomías se asocian con los tipos de entrada, ya sean páginas (page), entradas del blog (post) o entradas personalizadas.

WordPress ya viene con dos taxonomías que conocemos todos, las categorías y las etiquetas. En este tutorial veremos cómo crear las nuestras.

Ejemplo de uso

Para implementar la taxonomías vamos a usar el ejemplo del post anterior, tipos de entrada en wordpress. Un resumen del ejemplo sería el siguiente; una empresa del mundo editorial necesita un tipo de entrada personalizada con críticas de libros y además desea clasificarlas por genero, autor y año. En el tutorial anterior se implementó las entradas “Críticas de libros” y ahora añadiremos las taxonomías personalizadas genero, autor y año. Puedes bajar el código del tutorial anterior aquí.

Registrar las taxonomías

Para registrar las taxonomías añadimos el siguiente código en el fichero book_reviews.php:

function book_reviews_taxonomies() {

  register_taxonomy( 'book-genre',
    'book-reviews',
    array(
      'hierarchical' => false,
      'label'        => __( 'Genre' ),
      'rewrite'      => array( 'slug' => 'book-genres' )
    )
  );

  register_taxonomy( 'book-author',
    'book-reviews',
    array(
      'hierarchical' => false,
      'label'        => __( 'Author' ),
      'rewrite'      => array( 'slug' => 'book-author' )
    )
  );

  register_taxonomy( 'book-year',
    'book-reviews',
    array(
      'hierarchical' => false,
      'label'        => __( 'Year' ),
      'rewrite'      => array( 'slug' => 'book-year' )
    )
  );
}
add_action( 'init', 'book_reviews_taxonomies' );    

La función register_taxonomy tiene tres parámetros, el primero es el nombre de la taxonomía, el segundo parametro es el tipo de entrada con la que enlaza (aquí es book-reviews que se creó en el tutorial anterior). Y el tercer parámetro es un array con bastantes opciones que nos permiten cambiar el aspecto y el comportamiento de las taxonomías. Aquí sólo veremos 3, si quieres ver todas las opciones puedes visitar la página de codex.

  • hierarchical (Por defecto es false). Indica si tiene descendientes como las categorías o no tiene como las etiquetas
  • label. Nombre de la taxonomía que aparece en el menú
  • rewrite. Array con parámetros para formatear los permalinks. Utilizando el parámetro slug del código anterior nos da direcciones url como la siguientes
http://myweb.com/book-genres/novela-historica/
http://myweb.com/book-author/martin/
http://myweb.com/book-year/2008/    

Administración de las taxonomías

El menu de administración para las entradas personalizadas críticas de libros queda así:

Taxonomy Menu Panel

Y cuando creamos o modificamos una “Crítica de libro” aparecen las secciones para nuestras taxonomías, igual que si fueran tags:

Taxonomy Admin Panel

Puedes bajar el código de aquí

Comentarios

  1. Muchas gracias bro de verdad son exelentes tus tutoriales que se van complementando uno con el otro empezare ahora mismo a ponerlo en practica haber si me resulta, ya que no soy experto en programar, pero con este tuto no hay donde perderse, saludos.

  2. Muy interesante tu tutorial, ya te hice una pregunta en el post de busqueda avanzada, y cada vez que leo tus tutoriales, nuevas ideas se me vienen a la cabeza.
    Como te indiqué en el post de busqueda avanzada, tengo un formulario en el front-page, mejor dicho un formulario fuera de la administración al igual que en cyberdocentes.com, donde uno de los campos a llenar es ciudad, quisiera hacer un filtro para este campo en el buscador, pero leyendo tus tutoriales estoy en la tendencia de crear una taxonomía para ciudad.
    Sin embargo, como podría meter este campo de taxonomía en mi formulario y luego filtrar los datos.
    Muchas gracias.

  3. Que tal, ya he creado mi taxonomía para ciudades, estas se añaden como si fueran etiquetas no.
    Suponiendo que es así, en mi archivo de procesos de mi formulario de publicación yo creo el campo de texto para que el usuario ingrese las etiquetas de la siguiente manera:
    Registro del campo
    $post_tags = cyber_filter($_POST[‘post_tags’]);
    Y en el formulario algo como esto:
    <input type="text" name="post_tags" value="” />
    Le quite algunos valores para el formato y esas cosas, pero la idea general es esta, y lógicamente, la etiqueta se muestra utilizando la función de mostrar etiquetas.
    Mi pregunta creo que a estas alturas se sobreentiende, y es como le hago par crear el campo para la taxonomía “ciudad”, logicamente si se como crear el campo se como debería llamarlo en el form, y luego sería como le hago para mostrar el contenido del campo en la entrada. Para filtrarlo en formulario de busqueda voy a utilizar tus tutoriales. Nuevamente muchas gracias por la ayuda.

    1. Hola Fliberty. Estoy un poco perdido. Tienes un formulario de publicación de post fuera de la administración y necesitas añadirle la taxonomía ciudad? No necesitas logearte primero? Me puedes enlazar con ese formulario de publicación?

  4. Hola, muy buen artículo. una pregunta:
    en entradas tengo categorias ¿como puedo hacer para que aparezcan las mismas categorias en este tipo de entrada personalizado (book_reviews)?
    yo creia que como era tipo post ya me aparecerian las categorias para poder seleccionar.

    saludos.

    1. Las categorías normales que vienen por defecto en WordPress las puedes añadir a tu entrada personalizada book_reviews. Esto lo puedes hacer cuando registras book_reviews.
      Debes incluir el argumento:

      'taxonomies' => array( 'category')

      Te queda algo así:

      register_post_type( 'book', array(
      'hierarchical' => false,
      ...
      'taxonomies' => array( 'category'),
      ...

      Un saludo

  5. Hola Pedro,
    Primero de todo agradecerte la labor que realizas en el blog ^^ es difícil encontrar estas cosas tan bien explicadas.
    Estoy utilizando este recurso y no consigo que me aparezcan las taxonomies en el menú de administración de lo que sería ‘Books reviews’. He añadido algo más pero aun así dejándolo tal cual tienes el tuyo tampoco me aparecen. Debe ser algo absurdo (una coma mal, una letra…) , este es:
    function CursosPost_taxonomies() {

    register_taxonomy( 'tipo-curso',
    'CursosPost',
    array(
    'hierarchical' => false,
    'label' => __( 'Tipo' ),
    'rewrite' => array( 'slug' => 'tipo-curso' ),
    'update_count_callback' => '_update_post_term_count',

    )
    );

    register_taxonomy( 'curso-instituto',
    'CursosPost',
    array(
    'hierarchical' => false,
    'label' => __( 'Instituto' ),
    'rewrite' => array( 'slug' => 'curso-instituto' ),
    'update_count_callback' => '_update_post_term_count',

    )
    );

    register_taxonomy( 'curso-tematica',
    'CursosPost',
    array(
    'hierarchical' => false,
    'label' => __( 'Tematica' ),
    'rewrite' => array( 'slug' => 'curso-tematica' ),
    'update_count_callback' => '_update_post_term_count',
    )
    );
    }
    add_action( 'init', 'CursosPost_taxonomies' );

    El caso es que si me voy a la sección Apariencia->Menús, sí que me aparecen como opción las 3 taxonomies, vacías claro, te agradezco por adelantado tu ayuda.

    Un saludo !!

  6. hola que tal, tengo una pregunta, estoy tratande de hacer uns listado de mis taxonomia y cuando haga click en una especifica poder ver el listado de noticias relacionas con esa taxonomia, tienen alguna idea de como hacerlo? eh intento con muchas opciones pero no me sale, me dice pagina no encontrada.

  7. Hola

    Lo que yo quiero es mostra el valor de la taxonomía en la entrada. Es decir, si el valor es “negro”, que cuando visite la entrada en el front end, se pueda ver “negro” por algún lado

    Eso eso posible?

      1. Perfecto!!

        Pero en que archivo pongo eso? En que línea debe ir?

        Soy novato y no me aclaro muy bien todavía… 🙂

        1. Pues depende de muchas cosas y sin saber lo que quieres hacer y cómo lo has implementado en tu theme o plugin es difícil.

          De forma general te puedo decir que la función the_terms sería la equivalente a the_category para las entradas normales. Yo buscaría the_category en el código y lo pondría ahí.

          Si tienes implementaste archive-book-reviews.php o sigle-book-reviews.php del tutorial anterior también deberás ponerla en esos ficheros

          Un saludo

      2. Pues lo que quiero hacer es que la taxonomía se muestre en la entrada, esto es, que se vea. De momento lo único que he conseguido es que aparezca como una opción para añadir al menú. Es decir, tengo enlaces, categorías, páginas…etc Y ahora me da la opción de añadir la taxonomía que he creado como elemento del menú.

        Lo que yo hice fue poner este código en funtions:

        function crear_mis_taxonomias() {
        register_taxonomy(‘color’, ‘product’, array(
        ‘hierarchical’ => false, ‘label’ => ‘Color’,
        ‘query_var’ => true, ‘rewrite’ => true));
        add_action( ‘after_setup_theme’, ‘g1_childtheme_setup’ );

        }
        add_action(‘init’, ‘crear_mis_taxonomias’, 0);

        He buscado “the_category” y sólo aparece en el archivo funciones, pero del tema padre… No creo que se ahí donde tenga que ponerlo, no??

        Muchas gracias por la paciencia y disculpa 😉

        1. Vale, una cosa que no te había comentado

          Lo quiero hacer para productos en Woocommerce. He añadido la taxonomía a un post y si lo muestra

          Gracias!!!

  8. Hola Pedro, soy nuevo en esto de WP… Ya he creado una taxonomía para un post personalizado, comohago un link para que me dirija a esa taxonomía y me muestre los posts relacionados con esa taxonomia? Algo igual como lo hacen las categorias…

      1. Perfecto Pedro Gracias, ya el link lo tengo bien, pero ahora sucede que cuando doy clic ahi, este me envia al index de mi pagina, aunque teniendo la url asi, por ejemplo:

        http://localhost/DalePlay/genero/accion
        (debería mostrarme los post del genero accion)

        No se si es que me falta algun .php en mi theme, pero probe ya teniendo una estructura con archive.php, taxonomy.php, taxonomy-category_serie.php (category_serie es el nombre de mi tax) y me sigue enviando al index de mi pagina… Que estoy haciendo mal?

        1. Prueba esto: Ajustes -> Enlaces permanenetes y le das a guardar y prueba de nuevo. A veces WordPress tiene que resetear los enlaces permanentes

      2. Mil gracias Pedro, si fue asi, tuve que refrescar las url, active y desactive el tema y funcionó! Exito Pro!

Responder a oscar Cancelar respuesta

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