Modelo de contenido
Fenómenus modela un restaurante como diez tipos de contenido públicos de menú, cada uno con su propia taxonomía de categorías, más un pequeño número de taxonomías transversales.
Tipos de contenido de menú
| Slug | Tipo de menú |
|---|---|
a_la_carte_menu |
Menú a la carta |
terrace_menu |
Menú de terraza |
breakfast |
Desayunos |
desserts |
Postres |
bar_menu |
Menú de bar |
wine_list |
Carta de vinos |
cocktails |
Cócteles |
beverages |
Bebidas |
tasting_menu |
Menú degustación |
set_menu |
Menú del día |
Un undécimo tipo interno, set_menu_dishes, contiene los platos que un menú del día ofrece como opciones.
Solo se registran los tipos activados en un sitio. Compruébalo con post_type_exists() en lugar de darlo por hecho.
Taxonomías de categorías
Cada tipo de menú tiene una taxonomía de categorías que sigue la convención <post_type>_category:
a_la_carte_menu_category, terrace_menu_category, breakfast_category, desserts_category, bar_menu_category, wine_list_category, cocktails_category, beverages_category, tasting_menu_category, set_menu_category, set_menu_dishes_category
Son jerárquicas y las herramientas de administración las usan con un nivel de profundidad.
Orden de los términos
Los términos de categoría guardan una posición en la clave de metadatos del término tax_position. Todas las consultas ordenadas del producto la utilizan:
$terms = get_terms( array(
'taxonomy' => 'a_la_carte_menu_category',
'hide_empty' => false,
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_key' => 'tax_position',
) );
Reproduce ese orden en el código personalizado o tu resultado no coincidirá con el menú.
Orden de los elementos
Los elementos se ordenan por menu_order, de forma ascendente. La lista de administración escribe ese valor cuando se arrastran las filas, y las importaciones masivas añaden después del máximo actual.
$query = new WP_Query( array(
'post_type' => 'a_la_carte_menu',
'orderby' => 'menu_order',
'order' => 'ASC',
) );
Taxonomías transversales
| Taxonomía | Se aplica a | Notas |
|---|---|---|
allergen |
Los tipos de contenido activados para alérgenos | Los términos llevan un icono en la clave de metadatos del término pom_category_thumbnail |
featured |
Los tipos de contenido de menú | No pública; el slug del único término es is-featured |
La taxonomía destacada no se puede consultar públicamente de forma deliberada. Su nombre público es editable mientras que el slug is-featured permanece fijo.
Extras de a la carta y terraza
Existen dos taxonomías adicionales para a_la_carte_menu:
a_la_carte_menu_not_suitable_fora_la_carte_menu_options
Ambas se registran sin sus propios archivos.
El terrace_menu independiente tiene las taxonomías equivalentes terrace_menu_not_suitable_for y terrace_menu_options, también sin archivos.
Taxonomías de vinos
| Taxonomía | Contenido |
|---|---|
wine_list_category |
El árbol de tipos de vino, sembrado al activar |
wine_vintage |
Años, sembrados de 1930 a 2030, no jerárquica |
wine_aging_classification |
Vino joven, crianza media, larga crianza |
wine_winery |
Productores |
wine_grape |
Variedades |
wine_region |
Orígenes, jerárquica |
Soportes
Los tipos de contenido de menú admiten title y page-attributes, además de thumbnail cuando está activado. No admiten revisiones, por lo que no existe historial de versiones para un elemento del menú.
wine_list no usa el editor de contenido del mismo modo que los demás tipos; sus datos residen en metadatos y taxonomías específicos de vinos.
El contrato de puntuación numérica de vinos usa parker_score y penin_score, ambos limitados a 0–100. Una puntuación ausente se guarda como un valor vacío y no debe representarse como una puntuación de cero.
Estados
Las herramientas de administración solo usan publish y draft. Los cambios de estado hechos desde la pantalla de lista se aplican a un elemento y a todas sus traducciones.
Leer un menú
$terms = get_terms( array(
'taxonomy' => "{$post_type}_category",
'hide_empty' => false,
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_key' => 'tax_position',
) );
foreach ( $terms as $term ) {
$items = new WP_Query( array(
'post_type' => $post_type,
'posts_per_page' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'tax_query' => array( array(
'taxonomy' => "{$post_type}_category",
'field' => 'term_id',
'terms' => $term->term_id,
) ),
) );
}
Ese es el mismo recorrido que realiza el generador de PDF, y produce el menú en el orden en que los comensales lo leen.