Entradas y taxonomías (VI) Creando una taxonomías personalizadas
Puede resultar muy interesante crear nuestras taxonomías personalizadas para abarcar problemas que de otra manera serían muy difíciles.
Vamos a crear una taxonomía para definir los tipos de productos que hemos desarrollado en las entradas.
En primer lugar debemos de definir la nueva categoría a través de la función register_taxonomy(). Esta función permite que personalicemos su aspecto y funcionamiento.
El código que vamos a ver puede funcionar en un plugin (pronto veremos su desarrollo) o en el archivo functions.php del tema con el que estemos trabajando, donde deberemos colocarlo:
add_action('init', 'definir_taxonomia_de_productos'); function definir_taxonomia_de_productos() { register_taxonomy('tipo', 'productos', array( 'hierarchical' => true, 'label' => 'Tipo', 'query_var' => true, 'rewrite' => true )); }
Lo primero que vemos es como se invoca a la acción init, que hace que se cargue la función definir_taxonomia_de_productos al inicial izarse.
Tras ello se ejecuta la función register_taxonomy() que tiene una serie de parámetros:
- type es el nombre de la taxonomía, como se guardará en la base de datos
- productos es el tipo de objeto, en nuestro caso se refiere a los productos
- el tercer parámetro es una array que recibe todas las opciones que queremos dar a nuestra taxonomía:
- hierarchical; indica si nuestra taxonomía personalizada admite o no relaciones jerárquicas, al ponerlo en true le hemos dicho que sí.
- label; indica el nombre que se va utilizar para identificar a nuestra taxonomía personalizada en las páginas de administración de WP
- query_var; indica si se pueden hacer consultas sobre el nombre de la taxonomía.
- rewrite; indica si queremos que WP establezca o no un enlace permanente sobre la taxonomía personalizada
Una vez que ya tenemos nuestro código ya podemos ver la etiqueta label bajo nuestros productos y cuando entramos nos damos cuenta de que se trata de un panel igual que el de las categorías que WP lleva por defecto, funcionando de forma muy similar. Incluso si creamos un nuevo producto podremos asignarle un tipo que queramos, crear nuevos tipos…
Al igual que ocurre con los tipos de entradas personalizados, las taxonomías personalizadas existen numerosos argumentos para registrarse, algunos de ellos son:
- public: indica si la taxonomía personalizada esta disponible de forma pública en el panel de control. De forma predeterminada esta como true. Tanto show_ui como show_in_nav heredan este valor.
- show_ui: indica sise crea o no un IU en el panel de control por defecto tiene el valor de public.
- show_in_nav: Indica si el tipo de entrada se puede seleccionar mediante la opción de administración de menús. También hereda su valor de public.
- show_tagcloud: Indica si se puede usar el widget nube de etiquetas con la taxonomía personalizada. Su valor por defecto es el de show_ui:
- hierarchical: Indica si la taxonomía es jerárquica, como las categorías, o no, como las etiquetas. Su valor predeterminado es false.
- update_count_callback: nombre de la función a invocar cuando se actualiza un termino de la taxonomía, su valor por defecto es none
- query_var: habilita la consulta publica para la taxonomía. Los valores aceptados son true, false o una cadena establecida con un valor var predeterminado.
- rewrite: Establece las reglas de análisis de URL para los enlaces permanentes que hacen referencia a esta taxonomía. Así se puede personalizar el slug. Se puede establecer como true o false o como una matriz de valores. De forma predeterminada su valor es true y utiliza como slug $taxonomy. El array de valores puede tomar los siguientes:
- slug: define un enlace permanente personalizado. De forma predeterminada el el valor name de la taxonomía.
- with_front: Indica si su taxonomía debe usar la base de sus ajustes de enlaces permanentes.
- hierarchical: permite URL jerárquicas. De forma predetermina esta como false.
Hay muchas más información sobre la función register_taxonomy() en el codex de WP:
https://codex.wordpress.org/Function_Reference/register_taxonomy
Definiendo etiquetas de taxonomías personalizadas
Al igual que con los tipos de entradas personalizados, las taxonomias personalizadas disponen de varias cadenas de texto que muestran en el panel de control. Estas cadenas suelen ser un enlace un botón u otro tipo de información sobre la taxonomía personalizada.
De forma predeterminada se utiliza el el termino etiqueta para las taxonomías no jerárquicas y categoría para las que si lo son.
Algunas de estas etiquetas son:
- name: nombre general de la taxonomía, generalmente en plural
- singular_name: Versión en singular del nombre
- search_items: Texto para el botón de búsqueda
- popular_items: Etiqueta para el texto los elementos más populares
- all_items: Etiqueta para el texto de todos los elementos
- parent_item: texto del elemento principal. Solo para jerárquicas
- parent_item_colon: igual que parent_item pero con dos puntos al final
- edit_item: Texto para editar un termino en concreto
- update_item: Se usa como texto para actualizar un término de taxonomía en concreto
- add_new_item: texto para añadir un nuevo elemento
- separate_items_with_commas: texto para separar los elementos por comas, no se utiliza en jerárquicas
- add_or_remove_items: texto mostrado en el cuadro de taxonomía al deshabilitar javascript. No se utiliza en jerárquicas
- choose_from_most_used: texto para utilizar entre las mas utilizadas. No se utiliza en jerárquicas
- menu_name: texto del nombre del menú. Su valor determinado es el de name.
Con estas etiquetas se puede modificar el código anterior e introducir etiquetas personalizadas:
add_action('init', 'definir_taxonomia_de_productos'); function definir_taxonomia_de_productos() { $labels = array( 'name' => 'Tipos', 'singular_name' => 'Tipo', 'search_items' => 'Buscar tipos', 'all_items' => 'Todos los tipos', 'parent_item' => 'Tipo padre', 'parent_tipe_colon' => 'Tipo padre', 'edit_item' => 'Editar tipo', 'update_item' => 'Update tipo', 'add_new_item' => 'Añadir nuevo tipo', 'new_item_name' => 'Nombre del nuevo tipo', 'menu_name' => 'Tipo', ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'query_var' => true, 'rewrite' => true, ); register_taxonomy('tipo', 'productos', $args); }
De esta forma ya tendríamos nuestras etiquetas con los valores que deseamos y nuestra taxonomía registrada.
Utilizando la taxonomía personalizada
Una vez que tenemos nuestra taxonomía personalizada hay que aprender a utilizarla y para ello WP mantiene una serie de funciones que nos facilitan enormemente el trabajo como por ejemplo:
wp_tag_cloud(array('taxonomy' => 'tipo', 'number' => 5));
En este ejemplo se ha utilizado la función wp_tag_cloud() con dos argumentos; taxonomy que dice a que taxonomía se refiere y number que dice el número de etiquetas a mostrar. (Aunque deben de tener elementos)
También se puede hacer un bucle personalizado con WP_query para mostrar los productos de una determinada taxonomía, por ejemplo en este caso joyería.
$args = array( 'post_type' => 'productos', 'tax_query' => array( array( 'taxonomy' => 'tipo', 'field' => 'slug', 'terms' => 'joyeria', ), ), ); $products = new WP_Query ($args); while ($products->have_posts()): $products->the_post(); echo '<p>' . get_the_title() . '</p>'; endwhile; wp_reset_postdata();
Los dos argumentos que mandamos son el post_type que dice que coja los productos y el tax_query que indica el termino de la taxonomía a utilizar.
Se pueden mostrar también los términos de taxonomía personalizada asignados a cada entrada utilizando la función get_the_term_list() muy similar a get_the_tag_list() pero generando los términos de la taxonomía personalizada.
Para que esto tenga funcionalidad el siguiente código debe de colocarse dentro del bucle, mostrándonos los términos a los que pertenece la entrada en la que nos encontramos:
echo get_the_term_list( $post->ID, 'tipo', 'Tipo de producto: ');
Los argumentos son la ID de la entrada, el nombre de nuestra taxonomía personalizada y el texto que queremos que aparezca junto al resultado, muy sencillo ¿verdad?
Como de costumbre podemos ver más información en el codex de wordpress:
https://codex.wordpress.org/Function_Reference/get_the_term_list
La función get_terms() se puede utilizar para recuperar una matriz de los valores de la taxonomía personalizada:
$terms = get_terms('tipo'); foreach ($terms as $term) { echo '<p>' . $term->name . '</p>'; }
Importante:
Siempre se debe de comprobar que nuestra taxonomía personalizada esta definida antes de trabajar con sus valores, puede que no obtengamos ningún resultado por que no hemos invocado antes la función register_taxonomy()
There is One Comment.