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_for
  • a_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.