Cómo crear taxonomías personalizadas exclusivas en WordPress

Publicado: 2022-03-11

WordPress, uno de los sistemas de administración de contenido y blogs de código abierto más poderosos, se está utilizando para impulsar una parte importante de las interwebs. Hasta una cuarta parte de todos los sitios web ejecutan WordPress y no hay escasez de demanda de servicios de desarrollo de WordPress.

A diferencia de muchos otros CMS, WordPress es apreciado por muchos por su flexibilidad y capacidad de personalización. Las taxonomías, una de las características principales de WordPress, le permiten organizar el contenido de la manera que lo necesita. Aunque viene integrado con algunas taxonomías predeterminadas, WordPress le permite agregar tantas taxonomías personalizadas como desee.

Sin embargo, lograr que las taxonomías se comporten exactamente de la manera que usted desea puede requerir que juegue con algunos enfoques no documentados.

Representación gráfica de las distintas opciones de taxonomía de WordPress

En este artículo, aprenderá cómo puede definir taxonomías personalizadas exclusivas en WordPress que se comportan mucho más como categorías que como etiquetas, lo que le permite categorizar sus publicaciones de manera mucho más estricta de lo que puede hacerlo de manera inmediata.

¿Qué es una taxonomía?

Según el códice de WordPress:

Una taxonomía es una forma de agrupar cosas.

Por ejemplo, un montón de diferentes tipos de frutas se pueden agrupar de acuerdo con varias características y luego se pueden asignar nombres a esos grupos.

En WordPress, las taxonomías se utilizan para agrupar publicaciones, páginas e incluso tipos de publicaciones personalizadas en diferentes grupos.

Los nombres de las diferentes agrupaciones en una taxonomía se denominan términos . Tome frutas, por ejemplo, y cómo se pueden agrupar según sus colores. En este caso, los nombres de diferentes colores serían los términos.

De forma predeterminada, WordPress viene integrado con cuatro taxonomías: categoría , etiqueta , categoría de enlace y formato de publicación . Puede obtener más información sobre estas taxonomías predeterminadas aquí.

Entre estas taxonomías integradas, las categorías y las etiquetas son muy similares pero tienen una diferencia importante: las categorías son taxonomías exclusivas (es decir, para cada publicación, puede seleccionar como máximo una categoría), mientras que a cada publicación se le pueden asignar varias etiquetas.

Además, las categorías suelen estar predefinidas, mientras que las etiquetas se pueden definir sobre la marcha.

Definición de taxonomías personalizadas

Puede definir una taxonomía personalizada utilizando la función register_taxonomy() . Puede obtener más información sobre la función aquí.

Para ver cómo funciona esta función, definamos una taxonomía personalizada para publicaciones con fotos de paisajes.

 function view_init() { register_taxonomy( 'view', 'post', array( 'label' => __( 'View' ), 'capabilities' => array( 'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides' ) ) ); } add_action( 'init', 'view_init' );

En el fragmento anterior, estamos definiendo una nueva taxonomía para las publicaciones llamada vista .

Puede pensar en esta taxonomía que se usa para categorizar fotos según el tipo o la naturaleza de las vistas que están presentes en las fotos (p. ej., montaña, lago o bosque).

Como siempre, las publicaciones que pertenecen a términos específicos de esta categoría aparecerán en /view/{view_name} .

La línea de capacidades en el fragmento anterior es opcional. Sin él, WordPress otorgará capacidades predeterminadas a los mismos usuarios que las publicaciones. Como se muestra arriba, esto permitirá que cualquier usuario con la capacidad personalizada de "edit_guides" asigne la taxonomía a una publicación y cualquier usuario con la capacidad personalizada de "publish_guides" para crear nuevos elementos de taxonomía.

Según la documentación oficial, hay cuatro capacidades que se pueden definir:

Las capacidades de taxonomía incluyen assignterms de editterms , los términos de edición, los términos de manageterms (muestra la taxonomía en la navegación del administrador) y los términos de deleteterms .

Cómo se utilizan las taxonomías

Dentro de su código, puede usar la función wp_set_object_terms() para agregar términos a los objetos usando la taxonomía. Puede listar los términos existentes usando la función the_terms() . Además, puede usar la función wp_tag_cloud() para generar una nube de términos para su taxonomía personalizada. Puede obtener más información sobre estas funciones aquí.

En el lado de la interfaz de usuario, WordPress crea un nuevo cuadro meta en las publicaciones para cada taxonomía. El cuadro meta es similar al cuadro meta Etiquetas que le permite vincular uno o más términos a su publicación. Esto es lo que hace WordPress por defecto, y esto es lo que podemos cambiar al hacer que una taxonomía sea exclusiva: Hacer que la taxonomía personalizada se comporte como la taxonomía de categorías.

Forzar la exclusividad en las taxonomías

Cuando creamos una taxonomía personalizada con el método register_taxonomy() , WordPress agrega un cuadro meta con selección de elementos múltiples a la página de edición posterior:

Usando este meta cuadro, un usuario puede elegir cualquier número de términos existentes (ya usados) y también puede agregar nuevos términos usando el cuadro de texto.

Para crear una taxonomía similar a una categoría, en la que cada publicación pertenezca como máximo a una categoría de un conjunto de categorías predefinidas, puede hacerlo ajustando un poco WordPress:

  • Oculte el cuadro meta predeterminado creado por WordPress.
  • Cree un cuadro meta personalizado en la página de edición posterior que proporcionará controles para la selección de un solo elemento.
  • Guarde el valor de la taxonomía cuando se guarde la publicación.

Echemos un vistazo a cada uno de los pasos.

Ocultar el metabox predeterminado creado por WordPress

Para esto, debemos establecer las opciones show_in_quick_edit y meta_box_cb en false al llamar a register_taxonomy .

Captura de pantalla de un cuadro meta de taxonomía personalizado donde puede agregar elementos al conjunto de términos disponibles

La primera opción oculta la taxonomía en el panel de edición rápida/masiva y la segunda opción la oculta en la página de edición posterior:

 register_taxonomy( 'custom_taxonomy', 'post', array( 'labels' => array( 'name' => 'Custom Exclusive Taxonomy' ), 'show_in_quick_edit' => false, 'meta_box_cb' => false ));

Cuando el metabox predeterminado está oculto, los elementos se pueden agregar al conjunto de términos disponibles de la taxonomía a través de la página de administración de taxonomía:

Captura de pantalla de un cuadro meta llamado Taxonomía exclusiva personalizada con varios botones de opción

Cree un metabox personalizado en la página de edición posterior

Para crear un metabox personalizado, podemos usar el gancho de WordPress add_meta_boxes . Puedes aprender más sobre el gancho aquí.

 add_action('add_meta_boxes', 'add_custom_meta_box'); function add_custom_meta_box(){ add_meta_box( 'taxonomy_box', __('Custom Exclusive Taxonomy'), 'fill_custom_meta_box_content', 'post' ,'side'); }

Llamamos al método add_meta_box con los siguientes argumentos:

  • taxonomy_box : el ID de la caja meta
  • __('Custom Exclusive Taxonomy') – El título del cuadro meta
  • fill_custom_meta_box_content : una función que se usa para completar el contenido del metabox
  • post : esto indica que el cuadro meta debe aparecer en la página de edición de publicaciones.
  • side : indica el lugar donde se debe insertar el cuadro meta.

Observe cómo especificamos taxonomy_box como ID. Sin embargo, es la función en el tercer parámetro la que nos permitirá definir lo que irá en el cuadro.

Ahora implementaremos la función fill_custom_meta_box_content :

 <?php function fill_custom_meta_box_content( $post ) { $terms = get_terms( array( 'taxonomy' => 'custom_taxonomy', 'hide_empty' => false // Retrieve all terms )); // We assume that there is a single category $currentTaxonomyValue = get_the_terms($post->ID, 'custom_taxonomy')[0]; ?> <p>Choose taxonomy value</p> <p> <?php foreach($terms as $term): ?> <input type="radio" name="custom_taxonomy" value="<?php echo $term->term_id;?>"<?php if($term->term_id==$currentTaxonomyValue->term_id) echo "checked"; ?>> <label for="taxonomy_term_<?php echo $term->term_id;?>"><?php echo $term->name; ?></label> </input><br/> <?php endforeach; ?> </p> <?php }

Aquí, primero estamos recuperando todos los términos (es decir, valores existentes) de la taxonomía. Los usaremos para mostrar una lista de controles de botón de opción.

A continuación, recuperamos el término de taxonomía actualmente seleccionado mediante la función get_the_terms() ; la necesitamos para seleccionar el botón de opción respectivo.

Tenga en cuenta que esta función devuelve una matriz. Esto se debe a que, de forma predeterminada, la publicación puede tener cualquier número de términos asociados. Según nuestra suposición, la publicación tiene como máximo un término, por lo que accedemos al primer elemento de la matriz. (Está bien si la matriz está vacía; obtendremos null como el valor actual y no se seleccionará ningún botón de opción).

El código de emisión de HTML utiliza custom_taxonomy como el nombre de los botones de opción y los ID de los términos correspondientes como sus valores; Los atributos de ID de botón de radio solo se usan para conectarse a etiquetas de etiquetas. Como resultado, obtenemos el siguiente cuadro meta personalizado:

Captura de pantalla de la función "agregar nueva etiqueta" de Custom Exclusive Taxonomy ahora disponible en la barra lateral del tablero de WordPress

Guarde el valor de la taxonomía cuando se guarde la publicación

Finalmente, debemos conservar el valor de la taxonomía cuando se guarda la publicación. Para esto, podemos usar el gancho save_post :

 add_action('save_post', 'save_custom_taxonomy'); function save_custom_taxonomy($post_id){ if ( isset( $_REQUEST['custom_taxonomy'] ) ) wp_set_object_terms($post_id, (int)sanitize_text_field( $_POST['custom_taxonomy'] ), 'custom_taxonomy'); }

¡Y eso es! Hemos terminado.

Ahora sabe cómo definir una taxonomía personalizada que se comportará como la taxonomía de categoría integrada.

Nota: WordPress ha aceptado una solicitud de función para que sea más fácil alternar la exclusividad para taxonomías personalizadas. Sin embargo, el boleto no ha visto mucha actividad por un tiempo.

Envolver

Las taxonomías son una característica muy poderosa y útil en WordPress. Fuera de la caja, carecen de la capacidad de hacer una categorización estricta de las publicaciones, pero como casi todo en WordPress, las taxonomías y la funcionalidad relacionada son extremadamente personalizables. Esto nos permite agregar esta habilidad a menudo necesaria en unos pocos pasos.

El enfoque presentado aquí también se puede utilizar para crear una interfaz de usuario aún más personalizada en las páginas de edición posterior para la selección de términos de taxonomía.

¡Espero que haya encontrado útil este tutorial rápido sobre la definición de taxonomías personalizadas exclusivas!