'; } /** * 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 ); }