-
released this
2026-08-01 03:22:22 +02:00 | 1 commits to main since this releaseAutomatic 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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Source code (ZIP)
-
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
$_POSTdata (legacymagic_quotesemulation), andsanitize_text_field()/sanitize_textarea_field()do not strip those slashes. Every text input on$_POSTis now passed throughwp_unslash()before sanitization inajax_save_category,ajax_save_product, the prices array, settings, andupdate_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_typehandling inajax_save_categoryagainst 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_version→1.3) runs once on the first admin page load after upgrade. It iteratively strips accumulated backslashes from existing rows inlrob_categories(name, icon_value),lrob_products(name, description, allergens, badges), andlrob_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
sessionStorageunderlrob_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 andstrip_all_slashes()private helper, both guarded withSHOW TABLES LIKEchecks so they're safe to run on partial schemas. - Frontend
forEachcallback refactored: extractedshowAllRootCategories()andshowOnlyRootCategory()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
$dataarray, 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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
- 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
-
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 resolveparent_slug→ real DB IDs), fixing broken parent remapping across environments. - Export now includes a
parent_slugfield per category for reliable cross-site imports. - Replaced
wp_check_filetype_and_ext()withpathinfo()for JSON file validation, fixing false rejections on some server configurations. - Added missing
require_once class-settings.phpinrender_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_hierarchyreplaceslrob_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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
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
requirestatements 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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
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 (
$wpdbnow 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.phpandclass-admin.php— removed unsafe globals and raw queries.
🎨 CSS & UI Cleanup
- Major refactor of
style.cssandadmin.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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- Fully sanitized database access across all modules (
-
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
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
released this
2025-11-08 15:40:09 +01:00 | 17 commits to main since this releaseWe’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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2025-11-08 02:48:14 +01:00 | 18 commits to main since this releaseWe’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.mofiles 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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download