{"id":382905,"date":"2026-10-11T09:58:48","date_gmt":"2026-10-11T09:58:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/luntsi-lunch-menu\/"},"modified":"2026-10-11T15:00:15","modified_gmt":"2026-10-11T15:00:15","slug":"luntsi","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/luntsi\/","author":23581924,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.3","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"Luntsi \u2013 Lunch Menu","header_author":"Mainos21 Oy","header_description":"Weekly lunch menu for restaurants: write the week once, show \"Today's lunch\" and the whole week on your site. Old menus hide themselves, public holidays are handled automatically. Native Divi 5 modules, Elementor widgets and blocks, plus a shortcode for any theme. Includes a Facebook and Instagram image of the week.","assets_banners_color":"ece9e4","last_updated":"2026-10-11 15:00:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/luntsi.fi","header_author_uri":"https:\/\/mainos21.fi","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"mopetti","date":"2026-10-11 10:19:28","revision":3739328},"1.1.0":{"tag":"1.1.0","author":"mopetti","date":"2026-10-11 15:00:15","revision":3739646}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3739276,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3739276,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3739276,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500-fi.png":{"filename":"banner-1544x500-fi.png","revision":3739276,"resolution":"1544x500","location":"assets","locale":"fi","width":1544,"height":500},"banner-1544x500-sv_SE.png":{"filename":"banner-1544x500-sv_SE.png","revision":3739276,"resolution":"1544x500","location":"assets","locale":"sv_SE","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3739276,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-fi.png":{"filename":"banner-772x250-fi.png","revision":3739276,"resolution":"772x250","location":"assets","locale":"fi","width":772,"height":250},"banner-772x250-sv_SE.png":{"filename":"banner-772x250-sv_SE.png","revision":3739276,"resolution":"772x250","location":"assets","locale":"sv_SE","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3739276,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"luntsi\/today":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"luntsi\/today","version":"1.0.0","title":"Today's lunch","category":"widgets","icon":"food","description":"Today's lunch from the weekly lunch menu. Updates itself every day.","keywords":["lunch","menu","lounas","lounaslista","lunch menu"],"textdomain":"luntsi","attributes":{"showPrices":{"type":"boolean","default":true},"showOrigins":{"type":"boolean","default":true},"tomorrow":{"type":"boolean","default":false},"linkUrl":{"type":"string","default":""},"location":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"],"color":{"text":true,"background":true,"link":true},"spacing":{"padding":true,"margin":true},"typography":{"fontSize":true,"lineHeight":true},"__experimentalBorder":{"color":true,"radius":true,"style":true,"width":true}},"editorScript":"luntsi-blocks","style":"luntsi"},"luntsi\/week":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"luntsi\/week","version":"1.0.0","title":"Lunch menu: week","category":"widgets","icon":"calendar-alt","description":"The whole week's lunch menu. Shows the current week and switches to next week by itself.","keywords":["lunch","menu","week","lounas","lounaslista","viikko"],"textdomain":"luntsi","attributes":{"showInfo":{"type":"boolean","default":true},"location":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"],"color":{"text":true,"background":true,"link":true},"spacing":{"padding":true,"margin":true},"typography":{"fontSize":true,"lineHeight":true}},"editorScript":"luntsi-blocks","style":"luntsi"}},"tagged_versions":["1.0.2","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3739276,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3739276,"resolution":"2","location":"assets","locale":"","width":1280,"height":725},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3739276,"resolution":"3","location":"assets","locale":"","width":1280,"height":486},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3739276,"resolution":"4","location":"assets","locale":"","width":794,"height":754},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3739276,"resolution":"5","location":"assets","locale":"","width":1280,"height":900},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3739276,"resolution":"6","location":"assets","locale":"","width":1280,"height":900},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3739276,"resolution":"7","location":"assets","locale":"","width":780,"height":1688}},"screenshots":{"1":"Write the week once: one dish per line, diet markings in parentheses.","2":"The whole week on your site. Today is highlighted and the week changes by itself.","3":"Today's lunch for the front page.","4":"A ready image of the week for Facebook and Instagram.","5":"Settings: prices, lunch hours, meat origin, serving days, public holidays and diet markings.","6":"Blocks for the block editor. Divi 5 modules and Elementor widgets work the same way.","7":"Kitchen staff can update the menu on a phone."}},"plugin_section":[],"plugin_tags":[153747,285765,285750,41098,20710],"plugin_category":[39,43],"plugin_contributors":[285751],"plugin_business_model":[],"class_list":["post-382905","plugin","type-plugin","status-publish","hentry","plugin_tags-daily-menu","plugin_tags-lounas","plugin_tags-lounaslista","plugin_tags-lunch-menu","plugin_tags-restaurant","plugin_category-business","plugin_category-customization","plugin_contributors-mopetti","plugin_committers-mopetti"],"banners":{"banner":"https:\/\/ps.w.org\/luntsi\/assets\/banner-772x250.png?rev=3739276","banner_2x":"https:\/\/ps.w.org\/luntsi\/assets\/banner-1544x500.png?rev=3739276","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/luntsi\/assets\/icon.svg?rev=3739276","icon":"https:\/\/ps.w.org\/luntsi\/assets\/icon.svg?rev=3739276","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/luntsi\/assets\/screenshot-1.png?rev=3739276","caption":"Write the week once: one dish per line, diet markings in parentheses."},{"src":"https:\/\/ps.w.org\/luntsi\/assets\/screenshot-2.png?rev=3739276","caption":"The whole week on your site. Today is highlighted and the week changes by itself."},{"src":"https:\/\/ps.w.org\/luntsi\/assets\/screenshot-3.png?rev=3739276","caption":"Today's lunch for the front page."},{"src":"https:\/\/ps.w.org\/luntsi\/assets\/screenshot-4.png?rev=3739276","caption":"A ready image of the week for Facebook and Instagram."},{"src":"https:\/\/ps.w.org\/luntsi\/assets\/screenshot-5.png?rev=3739276","caption":"Settings: prices, lunch hours, meat origin, serving days, public holidays and diet markings."},{"src":"https:\/\/ps.w.org\/luntsi\/assets\/screenshot-6.png?rev=3739276","caption":"Blocks for the block editor. Divi 5 modules and Elementor widgets work the same way."},{"src":"https:\/\/ps.w.org\/luntsi\/assets\/screenshot-7.png?rev=3739276","caption":"Kitchen staff can update the menu on a phone."}],"raw_content":"<!--section=description-->\n<p>Luntsi is made for lunch restaurants. Write the week's lunch once and your site shows the right day every day, without anyone remembering to update it.<\/p>\n\n<p>Made in Finland for the <em>lounas<\/em>, <em>lounaslista<\/em> and <em>ruokalista<\/em> (Swedish: <em>lunchmeny<\/em>, <em>dagens lunch<\/em>) of Finnish lunch restaurants, and it works for any daily lunch menu, such as the Spanish <em>men\u00fa del d\u00eda<\/em>.<\/p>\n\n<ul>\n<li><strong>Today's lunch and the whole week.<\/strong> Show today's (or tomorrow's) lunch on the front page and the whole week on the lunch page.<\/li>\n<li><strong>Old menus hide themselves.<\/strong> A saved week appears on its own week and disappears when it is over. On weekends the week view switches to next week as soon as it is published.<\/li>\n<li><strong>Never shows yesterday's lunch from a cache.<\/strong> The views pick the right day in the visitor's browser, so page caches and CDNs cannot serve an old day.<\/li>\n<li><strong>Fast to write.<\/strong> One dish per line, diet markings in parentheses: <code>Pea soup (L, G)<\/code>. \"Copy previous week\" fills the week from last week's menu.<\/li>\n<li><strong>Public holidays built in (Finland and Spain).<\/strong> Good Friday, Midsummer, Christmas and the rest are marked closed automatically for the country you choose. Any single holiday can be opened, and any other day closed.<\/li>\n<li><strong>Meat origin.<\/strong> Show the origin country of meat, which restaurants in Finland are required to display in writing.<\/li>\n<li><strong>Diet markings.<\/strong> L, VL, M, G, K and VE out of the box, editable.<\/li>\n<li><strong>A role for the kitchen.<\/strong> The \"Lunch editor\" role can edit the lunch menu and nothing else.<\/li>\n<li><strong>Works everywhere.<\/strong> Native Divi 5 modules (with live preview in the Visual Builder), Elementor widgets with style controls, blocks for the block editor, and the <code>[luntsi]<\/code> shortcode for any other theme or page builder.<\/li>\n<li><strong>Image for Facebook and Instagram.<\/strong> One click turns the week's menu into a ready image (A4 for Facebook, 4:5 for Instagram) with your logo and colour. On a phone the image goes straight to the share sheet. Made in the browser: no external service.<\/li>\n<li><strong>Search engines understand it.<\/strong> The week is published as schema.org Menu data.<\/li>\n<li><strong>Accessible.<\/strong> The views and the editor are tested against WCAG 2.2 AA with axe-core.<\/li>\n<li><strong>Private.<\/strong> No external services, no tracking, no cookies. The font for the image ships with the plugin.<\/li>\n<li>In English, with Finnish and Swedish coming through translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>Luntsi Pro<\/h4>\n\n<p><a href=\"https:\/\/luntsi.fi\">Luntsi Pro<\/a> adds lunch lines with their own prices, several locations, a dish bank with the 14 EU allergens, an info screen for a TV, a printable A4 menu, reminder e-mails, more image templates, Stories images and a brand kit. Luntsi itself is complete without it.<\/p>\n\n<h4>Shortcodes<\/h4>\n\n<ul>\n<li><code>[luntsi]<\/code> \u2013 today's lunch<\/li>\n<li><code>[luntsi view=\"tomorrow\"]<\/code> \u2013 tomorrow's lunch<\/li>\n<li><code>[luntsi view=\"week\"]<\/code> \u2013 the whole week<\/li>\n<li><code>[luntsi prices=\"no\" origins=\"no\" link=\"https:\/\/example.com\/lunch\/\"]<\/code><\/li>\n<li><code>[luntsi view=\"week\" info=\"no\"]<\/code><\/li>\n<\/ul>\n\n<h4>For developers<\/h4>\n\n<p>Lunch lines (e.g. lunch, soup lunch, vegetarian lunch with their own prices) and several locations on one site are built in and defined with the <code>luntsi_lines<\/code> and <code>luntsi_locations<\/code> filters; Luntsi Pro adds a user interface for them. Shortcode: <code>[luntsi location=\"slug\"]<\/code>.<\/p>\n\n<p>Templates can be overridden by copying <code>templates\/today.php<\/code> or <code>templates\/week.php<\/code> to <code>your-theme\/luntsi\/<\/code>. Colours follow the theme; the accent colour is the CSS custom property <code>--luntsi-accent<\/code>. After inserting a view with JavaScript, call <code>window.Luntsi.refresh()<\/code>.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Luntsi does not send data anywhere, set cookies or track visitors. Menus and settings are stored in your WordPress database and removed when the plugin is deleted.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Lunch menu<\/strong> in the dashboard and write this week's lunch.<\/li>\n<li>Add Luntsi to your pages: the <strong>Luntsi<\/strong> modules in Divi 5, the <strong>Lunch menu<\/strong> widgets in Elementor, the <strong>Today's lunch<\/strong> and <strong>Lunch menu: week<\/strong> blocks in the block editor, or the <code>[luntsi]<\/code> shortcode anywhere else.<\/li>\n<li>In <strong>Lunch menu \u2192 Settings<\/strong>, add your prices, lunch hours and meat origin.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20divi%204%3F\"><h3>Does it work with Divi 4?<\/h3><\/dt>\n<dd><p>Use the <code>[luntsi]<\/code> shortcode in a Text or Code module. The native modules are for Divi 5.<\/p><\/dd>\n<dt id=\"is%20the%20image%20made%20on%20your%20server%3F\"><h3>Is the image made on your server?<\/h3><\/dt>\n<dd><p>No. It is drawn in your browser and downloaded or shared directly from there.<\/p><\/dd>\n<dt id=\"does%20the%20menu%20change%20by%20itself%20every%20day%3F\"><h3>Does the menu change by itself every day?<\/h3><\/dt>\n<dd><p>Yes. You save the week once; the site shows the right day and hides the week when it is over.<\/p><\/dd>\n<dt id=\"my%20site%20uses%20a%20page%20cache.%20will%20visitors%20see%20yesterday%27s%20lunch%3F\"><h3>My site uses a page cache. Will visitors see yesterday's lunch?<\/h3><\/dt>\n<dd><p>No. The page carries the current and next week, and a small script picks the right day in the visitor's browser. Luntsi also clears common page caches when you save and right after midnight.<\/p><\/dd>\n<dt id=\"can%20kitchen%20staff%20update%20the%20menu%20without%20access%20to%20the%20rest%20of%20the%20site%3F\"><h3>Can kitchen staff update the menu without access to the rest of the site?<\/h3><\/dt>\n<dd><p>Yes. Give them the \"Lunch editor\" role. They land directly on the lunch menu after logging in and can write the menu, but not change the settings.<\/p><\/dd>\n<dt id=\"we%20are%20open%20on%20a%20public%20holiday.\"><h3>We are open on a public holiday.<\/h3><\/dt>\n<dd><p>Turn on \"Open on this public holiday\" for that day in the menu editor, or turn off automatic holiday closing in the settings.<\/p><\/dd>\n<dt id=\"where%20is%20the%20source%20code%3F\"><h3>Where is the source code?<\/h3><\/dt>\n<dd><p>The JavaScript in <code>build\/<\/code> is compiled. Its readable source ships with the plugin in <code>src\/<\/code>, together with <code>package.json<\/code> and <code>webpack.config.js<\/code>. To build it yourself, run <code>npm install<\/code> and <code>npm run build<\/code> in the plugin folder (Node.js 18 or newer).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Settings: country for public holidays, Finland or Spain. Spain covers the national holidays; regional and local holidays are closed in the menu editor. A new site in Spanish (Spain), Catalan, Galician or Basque starts with Spain.<\/li>\n<li>The menu editor keeps the week, unsaved changes and the chosen location when you visit another tab, and picks up changed settings straight away.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Translations come from translate.wordpress.org.<\/li>\n<li>The Lunch menu item sits after the WordPress core menu items.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>A public holiday on which the restaurant is open now shows its name in the week view, today's lunch, the images, the printout and the info screen.<\/li>\n<li>Settings: \"Lunch also on weekends\" switch (Saturday, or Saturday and Sunday).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Weekly editor, today\/tomorrow\/week views, Finnish public holidays, meat origin, diet markings, Lunch editor role.<\/li>\n<li>Divi 5 modules, Elementor widgets, blocks and the [luntsi] shortcode.<\/li>\n<li>Facebook and Instagram image of the week.<\/li>\n<li>Lunch lines and locations in the data model (defined with filters, UI in Luntsi Pro).<\/li>\n<li>Works on multisite networks (network or per-site activation); uninstall cleans every site.<\/li>\n<li>Finnish and Swedish translations.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Divi 5 modules \"Today's lunch\" and \"Lunch menu week\" with live Visual Builder preview and Divi design options.<\/li>\n<li>Elementor widgets with colour, typography and spacing controls.<\/li>\n<li>Facebook (A4) and Instagram (4:5) image of the week with logo, accent colour and contact line. Bundled font, no Google Fonts.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First version: weekly editor, today\/tomorrow\/week views, blocks, shortcode, Finnish public holidays, meat origin, diet markings, lunch editor role, Finnish and Swedish translations.<\/li>\n<\/ul>","raw_excerpt":"Weekly lunch menu (lounaslista) for restaurants. Write the week once; \"Today's lunch\" and the whole week update themselves on your site.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/382905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=382905"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mopetti"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=382905"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=382905"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=382905"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=382905"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=382905"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=382905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}