• v1.3.5 3cddc4da92

    Robin released this 2026-08-01 03:22:22 +02:00 | 1 commits to main since this release

    Automatic updates — at last

    La Carte now updates itself. New versions show up under Plugins and
    Dashboard → Updates just like any other plugin, and install in one click —
    no more downloading a ZIP and re-uploading it by hand.

    Because this is the first release carrying the updater, this one still has to
    be installed manually
    (download the ZIP below, then Plugins → Add New → Upload
    Plugin, and overwrite the current version). Every release after this one arrives
    on its own.

    New home: git.lrob.net

    Development has moved to git.lrob.net/WP/la-carte.
    That's where the source, the releases and the issue tracker now live — and where
    the plugin looks for its updates. Nothing else changes for your menus: no
    database migration, no settings to redo.

    Bug reports and suggestions: git.lrob.net/WP/la-carte/issues
    or lrob.fr/contact.

    Downloads
  • v1.3.4 555dab59fd

    UltimateByte released this 2026-04-26 23:20:49 +02:00 | 2 commits to main since this release

    💡 This release fixes a long-standing data integrity bug around escaped characters (apostrophes, quotes) silently accumulating backslashes in saved content, restores the active category filter after every product save in the admin UI, and adds a new block setting to control how categories are displayed by default on the frontend.

    🐛 Bug Fixes

    • Apostrophes and quotes no longer accumulate visible backslashes in product names, descriptions, allergens, badges, category names, icon values, and price labels. Root cause: WordPress automatically slashes $_POST data (legacy magic_quotes emulation), and sanitize_text_field() / sanitize_textarea_field() do not strip those slashes. Every text input on $_POST is now passed through wp_unslash() before sanitization in ajax_save_category, ajax_save_product, the prices array, settings, and update_positions.
    • The admin Products page no longer resets to the first root category after saving, deleting, or editing a product. Previously the JS-only filter state was wiped on every location.reload(), forcing the user to re-click their working category for every new product — a real friction point when bulk-adding items. The active root tab and both subcategory levels are now persisted across reloads.
    • Hardened icon_type handling in ajax_save_category against missing keys (?? '') to prevent a PHP warning when a category is created without an explicit icon type.

    Improvements

    • New retroactive cleanup migration (lrob_carte_db_version1.3) runs once on the first admin page load after upgrade. It iteratively strips accumulated backslashes from existing rows in lrob_categories (name, icon_value), lrob_products (name, description, allergens, badges), and lrob_product_prices (label) — handling not just single-save corruption but also content that was edited and re-saved multiple times under the bug, accumulating two, three, or more layers of slashes. Iteration is capped at 20 passes per value as a safety guard.
    • New block setting Default Category Selection in the Gutenberg Inspector → Display panel (full-menu mode only): choose between First category (existing behavior, the first root category is selected by default) and None — show all at once (all root categories rendered together on a single screen, with no active nav item). The latter is ideal for short menus, single-page printable carts, or layouts where the operator wants visitors to see everything without clicking.
    • When Default Category Selection is set to None, clicking the currently active category nav item deselects it and returns to the all-categories view, giving visitors a way back to the unfiltered display without reloading the page. This deselection behavior is intentionally inactive in the First category mode to preserve the existing UX.
    • Admin filter state is now persisted in sessionStorage under lrob_admin_filter_state (root + level 1 + level 2 IDs), with graceful fallback to the first root category when a stored ID no longer matches an existing tab (e.g., after a category was deleted or renamed in another tab).

    🧹 Code Cleanup

    • New LRob_Carte_Database::cleanup_slashes() migration method and strip_all_slashes() private helper, both guarded with SHOW TABLES LIKE checks so they're safe to run on partial schemas.
    • Frontend forEach callback refactored: extracted showAllRootCategories() and showOnlyRootCategory() helpers to deduplicate display logic between init, click-to-filter, and click-to-deselect paths.
    • The admin AJAX-save handlers now extract input variables before building the $data array, making the slash flow explicit and consistent ($name = sanitize_text_field(wp_unslash($_POST['name']));).
    • No breaking changes — full backward compatibility maintained. Existing menus continue to render with the original First category default.
    Downloads
  • v1.3.3 0412639e49

    UltimateByte released this 2026-04-11 00:55:05 +02:00 | 3 commits to main since this release

    💡 This release focuses on fixing hierarchy-related bugs across rendering, import/export, and admin ordering, ensuring subcategories and direct products behave correctly in all contexts.

    🐛 Bug Fixes

    • Root categories with both direct products and subcategories now correctly render direct products.
    • Direct products are automatically hidden/shown when a subcategory filter is active.
    • JSON import now uses a two-pass category insertion (insert all with parent_id=0, then resolve parent_slug → real DB IDs), fixing broken parent remapping across environments.
    • Export now includes a parent_slug field per category for reliable cross-site imports.
    • Replaced wp_check_filetype_and_ext() with pathinfo() for JSON file validation, fixing false rejections on some server configurations.
    • Added missing require_once class-settings.php in render_menu_block(), fixing a potential fatal error when the Gutenberg block renders without the Settings class loaded.

    Improvements

    • Category up/down reordering is now hierarchy-aware — moving a category also moves all its descendants as a group.
    • New AJAX endpoint lrob_update_category_hierarchy replaces lrob_update_positions, saving positions and parent IDs in a single call.
    • Event handlers for category move buttons switched to delegated events ($(document).on()), improving reliability with dynamically added elements.

    🧹 Code Cleanup

    • Indentation and alignment normalization across all modified files.
    • No breaking changes — full backward compatibility maintained.
    Downloads
  • v1.2.1 5b50b0a26d

    UltimateByte released this 2025-11-09 23:03:08 +01:00 | 9 commits to main since this release

    💡 This release refines the plugin’s architecture for lighter performance and cleaner maintainability, ensuring a solid base for future modular updates.

    Performance Optimizations

    • Admin class now loads only in admin context (not on frontend).
    • Settings class no longer loaded on frontend.
    • Import/Export class lazy-loads only during actual import/export operations.
    • Frontend assets (JS/CSS) load only when the block is present on the page.
    • Admin assets load only on plugin admin pages.
    • Reduced memory footprint for non-admin requests.

    🧩 Code Quality Improvements

    • Refactored AJAX handler registration (11 calls → 1 loop).
    • Streamlined submenu registration (4 calls → 1 loop).
    • Added verify_ajax() helper for centralized AJAX security checks.
    • Added sanitize_object() helper to eliminate duplicate sanitization code.
    • Removed redundant class require statements from admin methods.
    • Adopted nullsafe coalescing operator (??=) for singleton patterns.
    • ~70+ lines reduced through DRY (Don’t Repeat Yourself) principles.

    🛠️ Technical Changes

    • Split admin vs frontend initialization hooks for cleaner architecture.
    • Database class now always loads (required for activation hook and block logic).
    • No breaking changes — full backward compatibility maintained.
    Downloads
  • v1.2.0 169cf130d7

    UltimateByte released this 2025-11-08 18:15:09 +01:00 | 14 commits to main since this release

    🔒 Security & Data Integrity

    • Fully sanitized database access across all modules ($wpdb now uses prepared statements and whitelisted tables).
    • Added strict nonce and capability checks to all AJAX endpoints.
    • Escaped all dynamic outputs (esc_html, esc_attr, esc_url) in both admin and frontend templates.
    • Implemented input and loop limits to prevent abuse and large data submissions.
    • Hardened import/export routines with MIME type validation and nonce enforcement.
    • Cleaned up class-database.php and class-admin.php — removed unsafe globals and raw queries.

    🎨 CSS & UI Cleanup

    • Major refactor of style.css and admin.css:
      • Removed redundancy and outdated selectors.
      • Replaced hardcoded colors with CSS variables.
      • Simplified layout and spacing rules.
      • Unified visual style for badges, modals, and buttons.
    • Adopted WordPress admin color palette for a more native look.
    • Leaner responsive styles for faster rendering.

    ⚙️ General Improvements

    • Improved code consistency and readability across PHP and JS.
    • Prepared Gutenberg color and typography settings for future block-level customization.
    • Added minor accessibility and contrast enhancements in admin UI.

    💡 This release focuses on hardening the plugin and modernizing its CSS foundation, paving the way for a more flexible Gutenberg integration in upcoming versions.

    Downloads
  • v1.1.1 ae536e5567

    UltimateByte released this 2025-11-08 16:34:48 +01:00 | 16 commits to main since this release

    • Fixed broken JSON export in import/export feature
    • Fixed property is_happy_hour (logs warning)
    Downloads
  • v1.1.0 89fa622091

    UltimateByte released this 2025-11-08 15:40:09 +01:00 | 17 commits to main since this release

    We’re excited to bring you La Carte v1.1.0, a major quality-of-life update that refines the admin experience, optimizes visuals, and streamlines product management for a smoother workflow.

    What’s New

    • 🧹 Cleaned unused FontAwesome code to reduce plugin size and load time
    • 🖼️ Complete overhaul of product image management — more reliable uploads and display consistency
    • 🔍 Removed broken product search in the management panel to prepare for a new, improved search feature
    • 🧭 Unified navigation — the product management panel now matches the frontend structure for a more intuitive experience
    • 🪞 Adapted product images to display as miniature thumbnails, improving readability and layout balance
    • 🧩 Refined product cards — no more awkward blank spaces; cleaner and more responsive presentation

    🧑‍💻 Developer Notes

    This release focuses on polishing existing features and laying the groundwork for future updates.
    If you’re upgrading from v1.0.0, no configuration changes are required — just update and refresh your menus.

    ❤️ Thanks for Using LRob – La Carte

    As always, your feedback helps us grow.
    If you enjoy La Carte, check out LRob’s WordPress Hosting for specialized support and optimized performance.


    📦 Upgrade safely:
    Download the ZIP from the Releases page or update directly in WordPress if you’ve installed it manually.

    Downloads
  • v1.0.0 d6156e719a

    UltimateByte released this 2025-11-08 02:48:14 +01:00 | 18 commits to main since this release

    We’re thrilled to release LRob – La Carte, a professional and intuitive WordPress plugin for managing restaurant and bar menus.
    Whether you’re running a cozy café or a bustling bistro, La Carte helps you create elegant, multilingual menus that look perfect on any device — for free.

    Highlights

    • 🍽️ Menu Management Made Simple – Add products with names, descriptions, prices, allergens, and badges
    • 🗂️ Smart Categories – Hierarchical organization with icons, drag & drop ordering, and quick default creation
    • 💸 Multiple Prices – Support for product variations like size or portion
    • Happy Hour & Availability Status – Toggle availability or mark special pricing
    • 🌍 Multilingual Ready – Full English & French translations out of the box
    • 🧱 Gutenberg Block – Display your menu anywhere with a modern, customizable block
    • 💾 Import/Export – Backup and restore your entire menu with one click

    🔧 Technical Details

    • Tested with WordPress 6.8 and PHP 8.4
    • Built with a robust release process using gettext & WP-CLI
    • Includes .pot, .po, and .mo files for easy translation

    🧑‍💻 Development Notes

    • Fully open for localization — add your own language in minutes
    • Clean build script for reproducible releases
    • No breaking changes planned for the 1.x line

    ❤️ Made by LRob

    Crafted with care by LRob, your WordPress hosting specialists.
    If you love La Carte, you’ll love our tailored WordPress hosting with expert support.

    Downloads