';
}
/**
* Resolve slug from attributes or settings.
*
* @param string $override Attribute override.
* @return string
*/
function bayle_menu_widget_resolve_slug( string $override = '' ): string {
$slug = bayle_menu_widget_sanitize_slug( $override );
if ( '' === $slug ) {
$slug = bayle_menu_widget_sanitize_slug( (string) get_option( BAYLE_MENU_WIDGET_OPTION_SLUG, '' ) );
}
return $slug;
}
/**
* Admin-only notice when slug is missing.
*
* @return string
*/
function bayle_menu_widget_missing_slug_notice(): string {
if ( ! current_user_can( 'manage_options' ) ) {
return '';
}
return '' . esc_html__( 'Bayle Menu is not configured yet. Set the restaurant slug in Settings → Bayle Menu.', 'bayle-menu-widget' ) . '
';
}
/**
* Render the menu from shortcode/block attributes.
*
* @param array $atts Attributes.
* @return string
*/
function bayle_menu_widget_render_menu( array $atts ): string {
$slug = bayle_menu_widget_resolve_slug( isset( $atts['slug'] ) ? (string) $atts['slug'] : '' );
if ( '' === $slug ) {
return bayle_menu_widget_missing_slug_notice();
}
$base = bayle_menu_widget_resolve_base_url( isset( $atts['base_url'] ) ? (string) $atts['base_url'] : '' );
$lang = bayle_menu_widget_resolve_lang( isset( $atts['lang'] ) ? sanitize_text_field( (string) $atts['lang'] ) : '' );
$display = isset( $atts['display'] ) ? (string) $atts['display'] : '';
$display = in_array( $display, array( 'native', 'iframe' ), true ) ? $display : bayle_menu_widget_menu_mode_setting();
if ( 'native' === $display ) {
// Every string in the menu (headings, badges, buttons, cart) must be
// in the menu language, also when a block forces another language.
$switched = strtolower( substr( determine_locale(), 0, 2 ) ) !== $lang && switch_to_locale( bayle_menu_widget_lang_locale( $lang ) );
$html = bayle_menu_widget_render_native_menu(
$slug,
$lang,
array(
'images' => bayle_menu_widget_bool_att( $atts['images'] ?? null, true ),
'categories' => bayle_menu_widget_bool_att( $atts['categories'] ?? null, true ),
'layout' => (string) ( $atts['layout'] ?? 'list' ),
'ordering' => bayle_menu_widget_bool_att( $atts['ordering'] ?? null, true ),
'heading' => (int) ( $atts['heading'] ?? 2 ),
)
);
if ( $switched ) {
restore_previous_locale();
}
return $html;
}
bayle_menu_widget_enqueue_public_assets();
return bayle_menu_widget_render_iframe( $slug, $base, $lang );
}