Contrato de datos de alérgenos

Los alérgenos son una taxonomía. Los elementos contienen términos; los términos contienen un nombre, una descripción y un icono.

La taxonomía

allergen, registrada para los tipos de contenido seleccionados en los ajustes de alérgenos. Un tipo de contenido que no esté seleccionado no tiene datos de alérgenos.

Los términos constituyen la biblioteca propia del restaurante, precargada con diecisiete entradas que cubren los alérgenos declarables más habituales y las intolerancias que se solicitan con frecuencia.

Campos del término

Campo Almacenamiento
Nombre El nombre del término
Descripción La descripción del término
Icono Meta clave del término pom_category_thumbnail, que contiene una URL

Un alérgeno sin icono almacenado recurre a un icono integrado solo cuando su slug coincide con un alérgeno integrado. Un alérgeno personalizado sin icono no tiene ninguno.

Leer los alérgenos de un elemento

$allergens = wp_get_post_terms( $post_id, 'allergen', array( 'fields' => 'all' ) );

foreach ( $allergens as $allergen ) {
    $icon = get_term_meta( $allergen->term_id, 'pom_category_thumbnail', true );
}

Ordenación

Los términos de alérgenos se ordenan con la misma posición almacenada que las categorías del menú, en la meta clave del término tax_position. El filtro público los muestra en ese orden.

Escribir alérgenos

Los alérgenos se asignan con las funciones estándar de taxonomías. Coincide con un comportamiento del producto: cuando hay una capa de traducción activa, la asignación de alérgenos de un elemento se aplica a todas sus traducciones, de modo que los datos de alérgenos no pueden divergir entre idiomas.

foreach ( pll_get_post_translations( $post_id ) as $translated_id ) {
    wp_set_post_terms( $translated_id, $allergen_ids, 'allergen' );
}

El filtro público

Los visitantes filtran seleccionando los alérgenos que quieren evitar. El mecanismo es un parámetro de consulta y una cookie con el mismo nombre:

Nombre Propósito
a_la_carte_allergens Slugs de alérgenos separados por comas, como parámetro de consulta y como cookie de 30 días

Cuando está presente en una petición de archivo, la consulta principal obtiene un tax_query que excluye esos términos:

array(
    'taxonomy' => 'allergen',
    'field'    => 'slug',
    'terms'    => $slugs,
    'operator' => 'NOT IN',
)

Por lo tanto, el filtro oculta los elementos coincidentes en lugar de mostrarlos.

Una cookie independiente, pom_rm_allergens_visibility, registra si un visitante ha elegido mostrar los iconos de alérgenos. Es una preferencia de visualización y no afecta a la consulta.

Implicaciones para la caché

Como el filtro se expresa mediante un parámetro de consulta, un archivo filtrado es una URL distinta. Una caché de páginas situada delante del sitio no debe servir una respuesta filtrada a una petición sin filtrar, y debe respetar el parámetro como parte de la clave de caché.

Shortcode Salida
[post_allergens] Los iconos de alérgenos de un elemento
[allergens_list] La biblioteca completa, con el conmutador de visibilidad y el panel de información
[allergens_filter] El formulario de filtro seleccionable

Consulta Shortcodes de front-end.

Guía de integración

  • No derives nunca los alérgenos de ningún otro dato. Son únicamente lo que un editor asignó.
  • No presentes nunca una asignación ausente como "sin alérgenos" en un contexto que implique verificación.
  • Conserva la semántica de exclusión si creas un filtro alternativo: los visitantes seleccionan lo que quieren evitar.
  • Mantén las asignaciones alineadas entre las traducciones.