{"id":358825,"date":"2026-08-28T15:26:42","date_gmt":"2026-08-28T15:26:42","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/happybites-qr-code-food-menu\/"},"modified":"2026-08-28T17:11:49","modified_gmt":"2026-08-28T17:11:49","slug":"happybites","status":"publish","type":"plugin","link":"https:\/\/arq.wordpress.org\/plugins\/happybites\/","author":23555073,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.5","stable_tag":"2.0.5","tested":"7.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"HappyBites \u2013 QR Code Food Menu","header_author":"HappyBites Team","header_description":"Create a modern, mobile-friendly QR food menu for your restaurant, fully integrated with WordPress.","assets_banners_color":"eeefee","last_updated":"2026-08-28 17:11:49","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/happybites.io","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.5":{"tag":"2.0.5","author":"happybites","date":"2026-08-28 17:11:49","revision":3670712}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3670594,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3670594,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3670594,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3670594,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3670594,"resolution":"1","location":"assets","locale":"","width":1600,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3670594,"resolution":"2","location":"assets","locale":"","width":1600,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3670594,"resolution":"3","location":"assets","locale":"","width":1600,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3670594,"resolution":"4","location":"assets","locale":"","width":1600,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3670594,"resolution":"5","location":"assets","locale":"","width":1600,"height":900}},"screenshots":{"1":"Menu Items","2":"Menu Management","3":"Reviews","4":"Settings - Themes","5":"Settings - QR Code Generation"}},"plugin_section":[],"plugin_tags":[126510,30524,1865,1373,20710],"plugin_category":[39,43],"plugin_contributors":[278102],"plugin_business_model":[],"class_list":["post-358825","plugin","type-plugin","status-publish","hentry","plugin_tags-digital-menu","plugin_tags-food-menu","plugin_tags-menu","plugin_tags-qr-code","plugin_tags-restaurant","plugin_category-business","plugin_category-customization","plugin_contributors-happybites","plugin_committers-happybites"],"banners":{"banner":"https:\/\/ps.w.org\/happybites\/assets\/banner-772x250.png?rev=3670594","banner_2x":"https:\/\/ps.w.org\/happybites\/assets\/banner-1544x500.png?rev=3670594","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/happybites\/assets\/icon-128x128.png?rev=3670594","icon_2x":"https:\/\/ps.w.org\/happybites\/assets\/icon-256x256.png?rev=3670594","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/happybites\/assets\/screenshot-1.png?rev=3670594","caption":"Menu Items"},{"src":"https:\/\/ps.w.org\/happybites\/assets\/screenshot-2.png?rev=3670594","caption":"Menu Management"},{"src":"https:\/\/ps.w.org\/happybites\/assets\/screenshot-3.png?rev=3670594","caption":"Reviews"},{"src":"https:\/\/ps.w.org\/happybites\/assets\/screenshot-4.png?rev=3670594","caption":"Settings - Themes"},{"src":"https:\/\/ps.w.org\/happybites\/assets\/screenshot-5.png?rev=3670594","caption":"Settings - QR Code Generation"}],"raw_content":"<!--section=description-->\n<p>HappyBites helps restaurants publish a beautiful mobile menu that guests open by scanning a QR code.<\/p>\n\n<ul>\n<li>React-powered admin for menu, categories, products, settings, and reviews<\/li>\n<li>Fast PWA guest menu with multi-language support<\/li>\n<li>Theme presets and brand colors<\/li>\n<li>WiFi info, social links, working hours, and extra HTML content<\/li>\n<li>Customer reviews with optional Google reCAPTCHA v3 spam protection<\/li>\n<\/ul>\n\n<p>The guest menu does not add credit or promotional links unless you opt in under <strong>HappyBites \u2192 Settings \u2192 General<\/strong>.<\/p>\n\n<h3>HappyBites Pro<\/h3>\n\n<p>The free plugin includes the full menu, presets, reviews, and multi-language support. <strong>HappyBites Pro<\/strong> is a separate add-on (annual subscription) that unlocks:<\/p>\n\n<ul>\n<li>Custom design \u2014 color editor, logo-based themes, browser theme-color, header overlay<\/li>\n<li>Instagram-style menu stories<\/li>\n<li>Footer bar on the guest menu<\/li>\n<li>Analytics via Google Tag Manager<\/li>\n<li>Menu import and export<\/li>\n<li>MCP \u2014 AI agent menu management<\/li>\n<\/ul>\n\n<p>Purchase: https:\/\/happybites.io<\/p>\n\n<p>Install HappyBites Pro and enter your license key under <strong>HappyBites \u2192 License<\/strong>.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The review form may collect optional name, email, comment, ratings, IP address, and browser user agent. Configure your privacy policy URL under <strong>Settings \u2192 Security<\/strong>, or use your WordPress privacy policy page.<\/p>\n\n<p>If Google reCAPTCHA v3 is enabled, review submissions send a token to Google for spam checks. See Google\u2019s privacy policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can connect to <strong>Google reCAPTCHA v3<\/strong> when you enable it under <strong>HappyBites \u2192 Settings \u2192 Security<\/strong>. It is used only to reduce spam on the guest review form.<\/p>\n\n<p>When a guest submits a review, the plugin sends the reCAPTCHA response token (and the server IP WordPress sees) to Google\u2019s verification API at <code>https:\/\/www.google.com\/recaptcha\/api\/siteverify<\/code>. The guest browser also loads <code>https:\/\/www.google.com\/recaptcha\/api.js<\/code> to obtain that token.<\/p>\n\n<p>No account with HappyBites is required. You must create your own reCAPTCHA v3 keys in Google\u2019s admin console. If the keys are empty, the plugin does not call Google.<\/p>\n\n<p>Google terms of service: https:\/\/policies.google.com\/terms\nGoogle privacy policy: https:\/\/policies.google.com\/privacy\nGoogle reCAPTCHA: https:\/\/www.google.com\/recaptcha\/about\/<\/p>\n\n<h3>Source code<\/h3>\n\n<p>Compiled admin and guest-menu JavaScript ships in <code>public\/admin\/<\/code> and <code>public\/pwa\/<\/code>. The corresponding source and build tools are included in <code>admin-app\/<\/code> and <code>pwa\/<\/code> (run <code>npm install<\/code> then <code>npm run build<\/code> in each folder). Development repository: https:\/\/github.com\/happybitesio\/happybites<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/happybites<\/code>, or install through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Open <strong>HappyBites<\/strong> in the WordPress admin and configure your menu.<\/li>\n<li>Share the menu URL or QR code with guests.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20is%20the%20guest%20menu%20url%3F\"><h3>Where is the guest menu URL?<\/h3><\/dt>\n<dd><p>Go to <strong>HappyBites \u2192 Settings \u2192 General<\/strong>. The menu slug defines the public URL.<\/p><\/dd>\n<dt id=\"how%20do%20i%20protect%20reviews%20from%20spam%3F\"><h3>How do I protect reviews from spam?<\/h3><\/dt>\n<dd><p>Go to <strong>HappyBites \u2192 Settings \u2192 Security<\/strong> and add your Google reCAPTCHA v3 Site Key and Secret Key. Review submissions then call Google\u2019s verification API.<\/p><\/dd>\n<dt id=\"where%20is%20the%20privacy%20policy%20link%20shown%3F\"><h3>Where is the privacy policy link shown?<\/h3><\/dt>\n<dd><p>The privacy policy link is shown on the guest review form. Under <strong>Settings \u2192 Security<\/strong> you can set a custom privacy policy URL. If left empty, your site's WordPress privacy policy page (Settings \u2192 Privacy) is used; if neither is set, the link is hidden.<\/p><\/dd>\n<dt id=\"can%20ai%20agents%20manage%20my%20menu%3F\"><h3>Can AI agents manage my menu?<\/h3><\/dt>\n<dd><p>MCP is a <strong>HappyBites Pro<\/strong> feature. Purchase at https:\/\/happybites.io, install the HappyBites Pro add-on, activate your license under <strong>License<\/strong>, then enable MCP under <strong>Settings \u2192 MCP<\/strong>.<\/p><\/dd>\n<dt id=\"what%20is%20happybites%20pro%3F\"><h3>What is HappyBites Pro?<\/h3><\/dt>\n<dd><p>Pro is a separate plugin (annual subscription) that adds custom design, menu stories, a guest-menu footer bar, Google Tag Manager analytics, menu import\/export, and MCP. Free users keep full menu management and built-in theme presets.<\/p><\/dd>\n<dt id=\"how%20do%20i%20show%20a%20happybites%20credit%20on%20the%20guest%20menu%3F\"><h3>How do I show a HappyBites credit on the guest menu?<\/h3><\/dt>\n<dd><p>Go to <strong>HappyBites \u2192 Settings \u2192 General<\/strong> and enable <strong>Show a HappyBites credit link on the guest menu<\/strong>. It is off by default.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>Address Plugin Directory review notes: enqueue admin\/PWA assets, field-aware settings sanitization, local jQuery UI, and review rate-limiting by REMOTE_ADDR<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>Finish remaining Plugin Check warnings (escaping, prepared reviews queries, CLI scripts, hidden files)<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Plugin Check hardening: escaped admin output, sanitized settings, prepared SQL, and local filesystem APIs<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Plugin URI and Author URI are no longer the same (Author URI omitted)<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Guest-menu credit links are opt-in and off by default<\/li>\n<li>Load QR assets locally (no third-party CDN)<\/li>\n<li>Harden admin AJAX capability checks<\/li>\n<li>Include React source in the distribution package<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Complete rebuild with React admin and PWA frontend<\/li>\n<li>REST API and hosted MCP support (MCP requires HappyBites Pro)<\/li>\n<li>Theme presets, customer reviews, and reCAPTCHA v3<\/li>\n<li>Multi-language menu and privacy policy URL setting<\/li>\n<li>Guest-menu credit links are opt-in (off by default)<\/li>\n<\/ul>","raw_excerpt":"Create a modern, mobile-friendly QR food menu for your restaurant, fully integrated with WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358825"}],"author":[{"embeddable":true,"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/happybites"}],"wp:attachment":[{"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358825"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358825"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358825"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358825"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358825"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/arq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}