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é.
Shortcodes relacionados
| 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.