{"id":301544,"date":"2026-05-01T05:57:07","date_gmt":"2026-05-01T05:57:07","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/orchestra-pop-lite\/"},"modified":"2026-05-03T09:23:01","modified_gmt":"2026-05-03T09:23:01","slug":"orchestra-pop-lite","status":"publish","type":"plugin","link":"https:\/\/tg.wordpress.org\/plugins\/orchestra-pop-lite\/","author":23482077,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.6.37","stable_tag":"0.6.37","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Orchestra Pop Lite","header_author":"Orchestra Pop","header_description":"Show a simple discount offer on WooCommerce product pages; coupons apply when shoppers use Add to cart. One campaign at a time \u2014 no analytics, no external API.","assets_banners_color":"a390ca","last_updated":"2026-05-03 09:23:01","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugin.orchestrapop.com\/","header_author_uri":"https:\/\/orchestrapop.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":137,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.6.35":{"tag":"0.6.35","author":"carthub","date":"2026-05-01 06:05:12"},"0.6.36":{"tag":"0.6.36","author":"carthub","date":"2026-05-01 06:51:32"},"0.6.37":{"tag":"0.6.37","author":"carthub","date":"2026-05-03 09:23:01"}},"upgrade_notice":{"0.3.0":"<p>Storefront now shows one offer per product; coupon list in admin hides invalid codes. Re-save settings if you relied on multiple offers or the old dropdown toggle.<\/p>","0.2.1":"<p>Admin toggles are now switch controls; minor storefront\/preview typography alignment.<\/p>","0.2.0":"<p>Multi-coupon campaign with per-product filtering; open Lite settings to re-save and pick coupons from the list.<\/p>","0.1.3":"<p>Fixes missing storefront styling; clearer coupon whitelist copy; Premium link updated.<\/p>","0.1.2":"<p>Refined admin and storefront styling to match Orchestra Pop design language.<\/p>","0.1.1":"<p>Admin menu moved to a top-level \u201cOrchestra Pop Lite\u201d item; privacy guide text added.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3520152,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3520152,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3520439,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3520439,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.6.35","0.6.36","0.6.37"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3520152,"resolution":"1","location":"assets","locale":"","width":1024,"height":731},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3520152,"resolution":"2","location":"assets","locale":"","width":1024,"height":731}},"screenshots":{"1":"Campaign settings: activate campaign, coupon hints, and Premium upsell (Lite 0.6.x).","2":"Campaign &amp; placement: targeting, offer box position, title badge, and shortcodes."}},"plugin_section":[],"plugin_tags":[326,331,24101,286],"plugin_category":[45],"plugin_contributors":[261605],"plugin_business_model":[],"class_list":["post-301544","plugin","type-plugin","status-publish","hentry","plugin_tags-coupon","plugin_tags-discount","plugin_tags-product-page","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-carthub","plugin_committers-carthub"],"banners":{"banner":"https:\/\/ps.w.org\/orchestra-pop-lite\/assets\/banner-772x250.png?rev=3520439","banner_2x":"https:\/\/ps.w.org\/orchestra-pop-lite\/assets\/banner-1544x500.png?rev=3520439","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/orchestra-pop-lite\/assets\/icon-128x128.png?rev=3520152","icon_2x":"https:\/\/ps.w.org\/orchestra-pop-lite\/assets\/icon-256x256.png?rev=3520152","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/orchestra-pop-lite\/assets\/screenshot-1.png?rev=3520152","caption":"Campaign settings: activate campaign, coupon hints, and Premium upsell (Lite 0.6.x)."},{"src":"https:\/\/ps.w.org\/orchestra-pop-lite\/assets\/screenshot-2.png?rev=3520152","caption":"Campaign &amp; placement: targeting, offer box position, title badge, and shortcodes."}],"raw_content":"<!--section=description-->\n<p>Orchestra Pop Lite helps merchants surface WooCommerce coupons on the product page:<\/p>\n\n<ul>\n<li><strong>Coupon whitelist:<\/strong> pick from coupons that are published, not expired, and under their global usage limit (invalid codes are hidden from the list).<\/li>\n<li><strong>Per-product intelligence:<\/strong> WooCommerce rules decide which whitelisted codes apply to each product (categories \/ inclusions \/ exclusions).<\/li>\n<li><strong>One or more offers per product:<\/strong> by default, if several codes could apply, the plugin shows only the strongest (when \u201csort strongest first\u201d is on: percent before fixed, then amount). You can allow multiple stackable coupons (not \u201cIndividual use\u201d in WooCommerce) so shoppers see and apply them together when rules overlap (e.g. category + product restrictions).<\/li>\n<li><strong>Custom savings line (optional):<\/strong> leave empty for default WooCommerce-style text, or use placeholders <code>{percent}<\/code>, <code>{amount_raw}<\/code>, <code>{amount_html}<\/code>, <code>{code}<\/code>.<\/li>\n<li><strong>Presentation:<\/strong> options for savings lines and showing codes to shoppers; floating quick guide (purple circle with white \u201c?\u201d opens a solid side panel) with contextual help; live campaign summary in admin.<\/li>\n<li><strong>Shortcodes:<\/strong> <code>[orchestra_pop_lite_offer]<\/code> for the full offer box; <code>[orchestra_pop_lite_badge]<\/code> for the compact discount line only (title area). Both use the current product in context; optional <code>product_id=\"123\"<\/code> when needed.<\/li>\n<li><strong>Targeting:<\/strong> all products, selected categories, or specific product IDs \u2014 same campaign.<\/li>\n<li><strong>Apply:<\/strong> no separate button \u2014 when the shopper adds the product with WooCommerce\u2019s Add to cart, the plugin applies the same coupon(s) shown on the page (if rules allow). For percentage \/ fixed-product coupons, the box can show an estimated price after discount and a short line inviting Add to cart to activate the offer. If the code(s) are already on the cart, a short green confirmation appears with an estimated price when the coupon type allows it.<\/li>\n<li><strong>Placement:<\/strong> on the default product template, move the offer box relative to title \/ Add to cart; the shortcode position in your builder is unchanged.<\/li>\n<li><strong>Shop badge (optional):<\/strong> on catalog cards, short lead label plus strongest applicable discount (and a hint when several combinable coupons apply); Blocksy-friendly. Toggle off the extra savings text for label-only. Not for block-only product grids.<\/li>\n<li><strong>Title badge (optional):<\/strong> on the default single-product template, compact discount line above the product name (WooCommerce hook priority 4); use <code>[orchestra_pop_lite_badge]<\/code> in builders when the title is outside the summary.<\/li>\n<li><strong>Lite stats:<\/strong> aggregate counters in admin (add-to-cart applies and monthly orders with whitelisted coupons); stored in options only, resettable from settings.<\/li>\n<\/ul>\n\n<p><strong>Premium (separate plugin)<\/strong> adds multiple campaigns, reservation\/urgency flows, branded design, analytics via the merchant portal, and licensed updates. See the in-plugin information card for a feature overview.<\/p>\n\n<h3>Privacy<\/h3>\n\n<ul>\n<li><strong>Data stored:<\/strong> Plugin options only (campaign settings, texts, allowed coupon codes list, optional aggregate counters). No separate customer database table.<\/li>\n<li><strong>External services:<\/strong> None in the Lite version; no telemetry to Orchestra Pop servers.<\/li>\n<li><strong>Suggested policy text:<\/strong> Registered with WordPress for the Privacy Policy guide (<code>wp_add_privacy_policy_content<\/code>). Merchants should still align with WooCommerce and their host\/legal requirements.<\/li>\n<\/ul>\n\n<p>For the WordPress.org plugin directory, prepare <strong>banner<\/strong>, <strong>icon<\/strong>, and <strong>screenshot<\/strong> images in SVN (not bundled inside the plugin ZIP). See <a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/plugin-assets\/\">Plugin Assets<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/orchestra-pop-lite<\/code>, or install the ZIP from Plugins \u2192 Add New.<\/li>\n<li>Activate through the Plugins screen.<\/li>\n<li>Ensure WooCommerce 8.0+ is active (WordPress will remind you if the dependency is missing).<\/li>\n<li>Create coupons in WooCommerce \u2192 Marketing \u2192 Coupons (published).<\/li>\n<li>Open <strong>Orchestra Pop Lite<\/strong> in the sidebar \u2192 tick the coupons to allow \u2192 turn the campaign on \u2192 set targeting (all \/ categories \/ product IDs) \u2192 adjust headlines and toggles \u2192 save.<\/li>\n<li>On matching product pages, customers see the applicable offer(s); the discount is applied when they add the product to the cart (or they see a confirmation if the code is already active on the cart).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20phone%20home%3F\"><h3>Does this plugin phone home?<\/h3><\/dt>\n<dd><p>No. The free version does not require calls to external servers to work.<\/p><\/dd>\n<dt id=\"what%20about%20privacy%20and%20personal%20data%3F\"><h3>What about privacy and personal data?<\/h3><\/dt>\n<dd><p>The plugin stores only configuration in your database (options). It does not log identifiable visitors. When shoppers apply the coupon, WooCommerce handles cart and checkout data as usual. A suggested paragraph for your privacy policy is available under <strong>Settings \u2192 Privacy \u2192 Policy guide<\/strong> after this plugin is active.<\/p><\/dd>\n<dt id=\"can%20i%20run%20this%20together%20with%20orchestra%20pop%20premium%3F\"><h3>Can I run this together with Orchestra Pop Premium?<\/h3><\/dt>\n<dd><p>You can, but you may see two offer UIs if both output on the product page. Normally you should use only one.<\/p><\/dd>\n<dt id=\"where%20do%20updates%20come%20from%3F\"><h3>Where do updates come from?<\/h3><\/dt>\n<dd><p>After the plugin is listed on WordPress.org, updates are delivered through the official WordPress update system (SVN). The Premium plugin is updated separately via the merchant portal.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.6.37<\/h4>\n\n<ul>\n<li>Admin: Premium tab \u2014 annual subscription card displays \u20ac49 (VAT included) to match current checkout pricing.<\/li>\n<\/ul>\n\n<h4>0.6.36<\/h4>\n\n<ul>\n<li>Admin: Premium marketing copy no longer mentions timed tokens (aligned with Orchestra Pop Premium coupon-centric defaults); margins tile and upsell strings updated accordingly.<\/li>\n<\/ul>\n\n<h4>0.6.35<\/h4>\n\n<ul>\n<li>WordPress.org review: load shipped <code>.mo<\/code> paths via <code>plugin_dir_path()<\/code> (no <code>WP_PLUGIN_DIR<\/code> concatenation).<\/li>\n<li>WordPress.org review: remove custom <code>plugins_api<\/code> \/ \u201cView details\u201d override, manual update-cache refresh, and direct <code>update.php<\/code> include \u2014 rely on core Updates; admin strip now links to Dashboard \u2192 Updates only.<\/li>\n<\/ul>\n\n<h4>0.6.34<\/h4>\n\n<ul>\n<li>Packaging: translation merge backups removed from <code>languages\/<\/code>; internal doc wording adjusted so automated directory checks stay clean.<\/li>\n<\/ul>\n\n<h4>0.6.33<\/h4>\n\n<ul>\n<li>WordPress.org readiness: no custom filters on core plugin update data; plugin-details helper renamed; readme <strong>Tested up to<\/strong> uses <strong>major.minor<\/strong> only (directory rule); \u201cCheck for updates\u201d link keeps the current admin tab without unsafe <code>$_GET<\/code> handling.<\/li>\n<\/ul>\n\n<h4>0.6.32<\/h4>\n\n<ul>\n<li>Readme: <strong>Contributors<\/strong> lists everyone who ships the plugin on WordPress.org.<\/li>\n<li>Admin: WooCommerce missing or outdated version \u2014 admin notice <strong>only<\/strong> on <strong>Plugins \u2192 Installed Plugins<\/strong> (not on every dashboard screen).<\/li>\n<\/ul>\n\n<h4>0.6.31<\/h4>\n\n<ul>\n<li>Admin: Premium sidebar banner \u2014 border on image container; refreshed <code>gopremium.png<\/code> asset.<\/li>\n<\/ul>\n\n<h4>0.6.30<\/h4>\n\n<ul>\n<li>Admin: Premium sidebar banner image set to <code>assets\/images\/gopremium.png<\/code> (full width, same corner radius).<\/li>\n<\/ul>\n\n<h4>0.6.29<\/h4>\n\n<ul>\n<li>Admin \u2014 Premium tab pricing card uses the <strong>WooCommerce currency symbol<\/strong> (same approach as Orchestra Pop Premium), not a hard-coded euro sign.<\/li>\n<\/ul>\n\n<h4>0.6.28<\/h4>\n\n<ul>\n<li>Readme \/ plugin card metadata: <strong>Tested up to<\/strong> included the <strong>patch<\/strong> level (6.9.4) so QA sites on WordPress 6.9.x did not show the \u201cuntested with your version\u201d notice in the modal. <strong>Superseded for wordpress.org listing<\/strong> by 0.6.33 (directory expects major.minor only).<\/li>\n<\/ul>\n\n<h4>0.6.27<\/h4>\n\n<ul>\n<li>Plugins screen: <strong>View details<\/strong> shows description, installation, FAQ, and changelog from the shipped readme, plus <strong>Documentation and FAQ<\/strong> (same idea as Orchestra Pop Premium).<\/li>\n<\/ul>\n\n<h4>0.6.26<\/h4>\n\n<ul>\n<li>Admin: <strong>Check for updates<\/strong> in the top strip refreshes WordPress.org plugin data and shows a one-time result with links to <strong>Dashboard \u2192 Updates<\/strong> and <strong>Plugins<\/strong>.<\/li>\n<\/ul>\n\n<h4>0.6.25<\/h4>\n\n<ul>\n<li>Main plugin file: stable snippet <code>OPOP_LITE_OFFICIAL_ID<\/code> so Orchestra Pop Premium can detect the official Lite package even if the install path differs.<\/li>\n<\/ul>\n\n<h4>0.6.24<\/h4>\n\n<ul>\n<li>Plugin headers: <strong>Author URI<\/strong> \u2192 orchestrapop.com; <strong>Plugin URI<\/strong> unchanged (plugin subdomain) \u2014 required distinction for the plugin directory.<\/li>\n<\/ul>\n\n<h4>0.6.23<\/h4>\n\n<ul>\n<li>Campaign sample products by category: use the WooCommerce product API instead of <code>get_posts<\/code> + <code>tax_query<\/code> (better for Plugin Check and for large catalogs).<\/li>\n<\/ul>\n\n<h4>0.6.22<\/h4>\n\n<ul>\n<li>i18n: rely on WordPress 4.6+ automatic loading for the text domain; admin-only locale override still uses <code>load_textdomain()<\/code> where needed. Readme: short description within directory limits; <strong>Tested up to<\/strong> aligned with QA WordPress. Minor PHPCS \/ translator-comment cleanups.<\/li>\n<\/ul>\n\n<h4>0.6.21<\/h4>\n\n<ul>\n<li>Admin \u2014 Premium subscription block: \u201cActivate Premium license\u201d string (translatable); default purchase URL <code>https:\/\/www.orchestrapop.com\/#abbonamento<\/code> (<code>opop_lite_premium_purchase_url<\/code> filter unchanged). Stripe row uses <code>stripe.svg<\/code> beside the secure-payment label (Italian string in catalogs).<\/li>\n<\/ul>\n\n<h4>0.6.20<\/h4>\n\n<ul>\n<li>Admin \u2014 subscription widget: simpler header (gradient + bottom border); Stripe wordmark removed from markup.<\/li>\n<\/ul>\n\n<h4>0.6.19<\/h4>\n\n<ul>\n<li>Admin \u2014 subscription Stripe row: flat layout (flex + gap), no boxed frame.<\/li>\n<\/ul>\n\n<h4>0.6.18<\/h4>\n\n<ul>\n<li>Admin \u2014 Premium tab: \u201cmargins\u201d tile uses <code>control-panel.png<\/code> (replaces <code>controllo.png<\/code>); subscription card header colours and Stripe badge sizing. Added <code>assets\/images\/control-panel.png<\/code>.<\/li>\n<\/ul>\n\n<h4>0.6.17<\/h4>\n\n<ul>\n<li>Admin \u2014 Premium tab: fourth feature tile (\u201cFull control over margins\u201d) \u2014 new teaser and expanded copy (budget caps, reservation, token routing); no media block. Removed \u201cVisual preview coming soon\u201d caption under placeholder images on other tiles.<\/li>\n<li>i18n: new strings for margins tile (5 languages).<\/li>\n<\/ul>\n\n<h4>0.6.16<\/h4>\n\n<ul>\n<li>Admin \u2014 Premium tab: first three feature accordion panels show illustrative backgrounds on the media placeholder (<code>funnel.png<\/code>, <code>pickbrandcolor.png<\/code>, <code>multilayer-campaign.png<\/code> in <code>assets\/images\/<\/code>); fourth panel unchanged.<\/li>\n<li>Includes those PNG assets in the plugin package for consistent deploy\/ZIP.<\/li>\n<\/ul>\n\n<h4>0.6.15<\/h4>\n\n<ul>\n<li>Storefront: coupon code line styled as a compact white card; body copy unified to #222222 where not using the accent purple; removed the extra \u201capply hint\u201d row under the offer; shorter estimated-price copy (with price placeholder) and matching cart-active line.<\/li>\n<li>i18n: new strings for the indicative price sentences (5 languages).<\/li>\n<\/ul>\n\n<h4>0.6.14<\/h4>\n\n<ul>\n<li>Admin: Right column rail (<code>.opop-lite-layout__rail<\/code>) includes <code>min-height: 100%<\/code>; bump version so admin CSS cache refreshes (<code>?ver=<\/code>).<\/li>\n<\/ul>\n\n<h4>0.6.13<\/h4>\n\n<ul>\n<li>Admin: Campaign summary (saved settings) moved out of the Premium upsell panel into its own block below it in the right column; summary area uses position sticky while scrolling.<\/li>\n<\/ul>\n\n<h4>0.6.12<\/h4>\n\n<ul>\n<li>Admin: Campaign settings \u2014 native checkboxes for placement badge and all \u201cWhat shoppers see\u201d options; switch with Enabled\/Disabled text kept only for \u201cActivate campaign\u201d and \u201cAllow multiple stackable coupons\u201d in the coupon section.<\/li>\n<\/ul>\n\n<h4>0.6.11<\/h4>\n\n<ul>\n<li>Admin: Campaign settings \u2014 contextual Premium hints (tip + link) at the end of each main section: activation, coupons, campaign &amp; placement, storefront display, and storefront preview.<\/li>\n<\/ul>\n\n<h4>0.6.10<\/h4>\n\n<ul>\n<li>Admin: Campaign settings \u2014 live campaign summary moved to the sidebar under the Premium banner; aggregate statistics panel moved to the bottom of the page (after storefront preview). New aside aria-label for screen readers.<\/li>\n<\/ul>\n\n<h4>0.6.9<\/h4>\n\n<ul>\n<li>Admin: Premium tab \u2014 Full stack and annual subscription side by side; Orchestrator AI roadmap note moved into full stack with crown mark (inline SVG, same path as premium <code>corona-tab.svg<\/code>); removed separate roadmap panel.<\/li>\n<\/ul>\n\n<h4>0.6.8<\/h4>\n\n<ul>\n<li>Admin: Premium tab \u2014 removed hero panel; full-stack section new Italian copy + checkmark list; annual subscription widget (styles in admin.css, checkout link + Stripe row).<\/li>\n<\/ul>\n\n<h4>0.6.7<\/h4>\n\n<ul>\n<li>Admin: settings sidebar upsell \u2014 replace bullet list with Italian promotional banner image (<code>assets\/images\/premium-sidebar-banner-it.png<\/code>), full width, 12px rounded corners.<\/li>\n<\/ul>\n\n<h4>0.6.6<\/h4>\n\n<ul>\n<li>Admin: Premium tile icons \u2014 resolve <code>graph|branding|multicampagna|controllo<\/code> in <code>assets\/images\/<\/code> with case-insensitive stem; accept <code>.png<\/code>, <code>.webp<\/code>, <code>.jpg<\/code>\/<code>.jpeg<\/code> (no strict exact filename match).<\/li>\n<\/ul>\n\n<h4>0.6.5<\/h4>\n\n<ul>\n<li>Admin: Premium tile icons \u2014 optional <code>assets\/images\/*.png<\/code> only if file exists (no shipped raster placeholders); otherwise inline SVG. Removed icon image frame CSS. Drop stale <code>graph\/branding\/multicampagna\/controllo<\/code> PNG\/SVG placeholders to avoid \u201cpurple square\u201d confusion.<\/li>\n<\/ul>\n\n<h4>0.6.4<\/h4>\n\n<ul>\n<li>Admin: Premium tab tile icons default to bundled SVG in <code>assets\/images\/<\/code> (<code>graph.svg<\/code>, <code>branding.svg<\/code>, <code>multicampagna.svg<\/code>, <code>controllo.svg<\/code>); PNG filenames remain allowed as fallback.<\/li>\n<\/ul>\n\n<h4>0.6.3<\/h4>\n\n<ul>\n<li>Admin: Premium tab tile icons \u2014 HTTPS URL when site uses HTTPS; framed icon area (background + border) so light\/transparent assets remain visible; replaces near-invisible placeholder fills.<\/li>\n<\/ul>\n\n<h4>0.6.2<\/h4>\n\n<ul>\n<li>Admin: Premium tab \u2014 feature tiles use PNG icons in <code>assets\/images\/<\/code> (graph, branding, multicampagna, controllo); accordion trigger padding adjusted.<\/li>\n<\/ul>\n\n<h4>0.6.1<\/h4>\n\n<ul>\n<li>Admin: Premium tab copy refresh \u2014 hero headline\/kicker\/lead; \u201cMultiple campaigns\u201d tile; removed Lite vs Premium compare; added Premium full-stack list + \u201cComing soon\u201d AI Orchestrator callout; pricing card shows full-stack line + richer visual shell.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Admin: Premium tab redesigned \u2014 3-column feature grid with exclusive accordion (SVG icons, expandable copy, placeholder for future GIFs), Lite vs Premium comparison, annual pricing card (\u20ac49 VAT included, full stack), primary CTA to purchase URL (filterable). New <code>class-opop-lite-admin-premium-tab.php<\/code>; filters <code>opop_lite_premium_purchase_url<\/code>, <code>opop_lite_show_premium_price_card<\/code>.<\/li>\n<\/ul>\n\n<h4>0.5.4<\/h4>\n\n<ul>\n<li>Admin: removed extra bottom padding on the campaign form (sticky save bar may overlap the last panels when scrolled to the end \u2014 intentional trade-off).<\/li>\n<\/ul>\n\n<h4>0.5.3<\/h4>\n\n<ul>\n<li>Admin: Premium sidebar \u2014 separator above \u201cfull overview\u201d link; pull-quote slogan without quotation marks, larger italic type; language selector spacing and select chrome. Removed redundant \u201cHow it works\u201d panel (covered by the floating guide).<\/li>\n<\/ul>\n\n<h4>0.5.2<\/h4>\n\n<ul>\n<li>Admin: Premium sidebar \u2014 clearer copy for the per-product discount cap bullet (limit you set, not billing surprises).<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Admin: Premium sidebar \u2014 same SVG icon as the WP menu entry, \u201cGo Premium!\u201d title, pull-quote style slogan, benefit list with accent checkmarks (accent titles + neutral subtitles).<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Admin: tab navigation \u2014 Campaign settings and Orchestra Pop Premium; Premium tab is a full in-admin overview with honest upsell copy.<\/li>\n<li>Admin: right column (sidebar) Premium hook \u2014 lead + benefit bullets + link to Premium tab + external CTA to orchestrapop.com.<\/li>\n<\/ul>\n\n<h4>0.4.9<\/h4>\n\n<ul>\n<li>Admin: removed redundant intro paragraph above the Storefront preview shortcodes (placement\/apply behaviour is covered elsewhere).<\/li>\n<\/ul>\n\n<h4>0.4.8<\/h4>\n\n<ul>\n<li>Admin: sticky bar \u2014 Save on the left, section anchor links on the right; lighter link weight. Italian UI: \u201cCoupons\u201d label uses \u201cCoupon\u201d (not \u201cBuoni\u201d).<\/li>\n<\/ul>\n\n<h4>0.4.7<\/h4>\n\n<ul>\n<li>Admin: clearer campaign activation copy (activate campaign + show storefront widget); toggle states use \u201cEnabled\u201d \/ \u201cDisabled\u201d instead of \u201cOn\u201d \/ \u201cOff\u201d (gettext + catalogs).<\/li>\n<li>Admin: sticky bottom \u201cpill\u201d bar with Save and in-page anchor links to Summary, Activation, Coupons, Placement, Display, and Preview.<\/li>\n<\/ul>\n\n<h4>0.4.6<\/h4>\n\n<ul>\n<li>i18n: default storefront copy (headline, catalog badge label, legacy CTA) is stored empty when unchanged; resolved at runtime with gettext so it follows the <strong>site<\/strong> language on the storefront and the <strong>admin UI language<\/strong> (including the per-screen selector) in settings. Admin fields show translated placeholders when empty. One-time migration clears legacy English defaults saved in the option on first load.<\/li>\n<\/ul>\n\n<h4>0.4.5<\/h4>\n\n<ul>\n<li>Fix: admin language selector now loads the plugin\u2019s own <code>.mo<\/code> files directly. WordPress <code>switch_to_locale()<\/code> only allows locales installed under <code>wp-content\/languages<\/code>, so Italian\/German\/French\/Spanish from the plugin package were previously ignored (UI stayed English).<\/li>\n<\/ul>\n\n<h4>0.4.4<\/h4>\n\n<ul>\n<li>i18n: shipped <code>.mo<\/code> catalogs for <code>en_US<\/code>, <code>it_IT<\/code>, <code>de_DE<\/code>, <code>fr_FR<\/code>, <code>es_ES<\/code> (storefront follows site language; admin follows WordPress user\/site language).<\/li>\n<li>Admin: optional per-user override for the Lite settings screen only \u2014 language selector with globe icon under the header logo; stored in user meta (<code>opop_lite_admin_ui_locale<\/code>).<\/li>\n<\/ul>\n\n<h4>0.4.3<\/h4>\n\n<ul>\n<li>Storefront: catalog badge \u2014 <code>padding: 10px<\/code>, column layout with centered text; percentage display without useless decimals (<code>10<\/code> not <code>10.00<\/code>); compact lines include winning coupon code in parentheses; <code>{percent}<\/code> in custom savings template uses the same percent formatting.<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Storefront: richer catalog badge (lead label + best applicable discount, custom savings template when enabled, combinable stack hint); toggle \u201cInclude discount hint on catalog badge\u201d.<\/li>\n<li>PDP: optional compact badge above product title (default WC layout); campaign toggle; shortcode <code>[orchestra_pop_lite_badge]<\/code> for page builders; shared \u201cfirst output wins\u201d if hook and shortcode both exist.<\/li>\n<li>Coupon handler: <code>get_compact_discount_summary_for_code<\/code>, <code>get_combinable_stack_suffix<\/code> for badge copy without cart-centric wording.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Storefront: archive badge compatibility with Blocksy \u2014 output via <code>blocksy:woocommerce:product-card:badges<\/code> so the label appears with image badges (not only when the title layer runs). Single output per product when both paths apply. CSS: base <code>.opop-lite-archive-badge<\/code> for any placement.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Campaign: PDP placement (before\/after title or Add to cart on default WC template); optional shop\/category\/tag archive badge with custom label (classic loop); aggregate statistics (apply-on-cart + monthly orders with whitelisted coupons), reset + privacy guide text; admin styling for stats panel.<\/li>\n<\/ul>\n\n<h4>0.3.7<\/h4>\n\n<ul>\n<li>Admin: guide drawer \u2014 active answer block (<code>.opop-lite-guide-item--toc-active<\/code>) uses neutral panel background <code>#f9f8fc<\/code> (<code>--op-bg-panel<\/code> on the floating panel); design tokens on <code>.opop-lite-guide-panel<\/code> so variables resolve outside the main settings wrap.<\/li>\n<\/ul>\n\n<h4>0.3.6<\/h4>\n\n<ul>\n<li>Storefront: do not show the green \u201cdiscount already on cart\u201d state when the cart is empty; refresh the offer box via AJAX after WooCommerce cart\/coupon events (<code>added_to_cart<\/code>, <code>removed_from_cart<\/code>, <code>wc_fragments_refreshed<\/code>, cart totals update, coupon applied\/removed) so the PDP does not stay stale without a full page reload.<\/li>\n<\/ul>\n\n<h4>0.3.5<\/h4>\n\n<ul>\n<li>Storefront: removed the apply button; discounts are applied on WooCommerce Add to cart via <code>woocommerce_add_to_cart<\/code>. Banner shows a clear hint and an estimated post-discount unit price when calculable (percent \/ fixed product). Admin preview matches (no button). Legacy \u201cButton label\u201d setting kept but not displayed.<\/li>\n<\/ul>\n\n<h4>0.3.4<\/h4>\n\n<ul>\n<li>PDP apply: auto-add simple (and variation \/ variable-with-defaults) products to the cart before applying coupons, avoiding \u201cnot applicable to cart\u201d errors when the cart was empty; clearer errors for external\/grouped\/variable-without-defaults; decode HTML entities in WooCommerce error notices shown in the widget.<\/li>\n<\/ul>\n\n<h4>0.3.3<\/h4>\n\n<ul>\n<li>Admin: guide FAB solid purple (#6a2dce) with white \u201c?\u201d icon; guide drawer \u2014 light vertical divider between TOC and answers, selected answer block lightly accented; overlap alert with \u201c!\u201d icon; campaign summary line uses the requested alert wording.<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>Admin guide: floating button uses a purple \u201c?\u201d SVG (accent); guide drawer is solid white with a higher z-index above WP admin chrome; guide TOC is sticky while scrolling.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Admin: campaign activation section (toggle) separate from placement; live summary panel; coupon overlap notice with optional \u201cmultiple stackable coupons\u201d; renamed \u201cWhat shoppers see\u201d options with clearer copy.<\/li>\n<li>Storefront: optional multiple stackable offers (non\u2013individual-use coupons only); AJAX applies several codes in one action.<\/li>\n<li>Floating guide (purple #6a2dce FAB, white \u201c?\u201d icon) opens a solid white side drawer; TOC vs answers separated by a light vertical rule; contextual ? links jump into the drawer; sticky table of contents.<\/li>\n<li>Shortcode <code>[orchestra_pop_lite_offer]<\/code> (default) plus optional <code>product_id<\/code> for layouts without product context; preview section shows copy + example.<\/li>\n<li>Form panel spacing fixed inside the save form.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>One winning coupon per product page (no multi-select UI on the storefront).<\/li>\n<li>Hide expired or globally exhausted coupons from the admin whitelist.<\/li>\n<li>Optional custom savings line with placeholders; improved AJAX success copy.<\/li>\n<li>When the discount is already on the cart: compact green message plus indicative price for this product when calculable.<\/li>\n<li>Admin: Orchestra Pop branding (sidebar SVG + header logo), Quick guide (TOC + contextual ? buttons), single-coupon preview.<\/li>\n<li>Removed \u201calways use dropdown\u201d option (obsolete with a single storefront offer).<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Admin: storefront toggles use visual switches (Orchestra-style) instead of checkboxes; preview well wider (32rem); headline\/button styles aligned with storefront tokens.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Admin: load published coupons from the site; multi-select whitelist with select-all \/ clear.<\/li>\n<li>Storefront: list or dropdown of applicable coupons per product (<code>WC_Coupon::is_valid_for_product<\/code>); AJAX applies the chosen code.<\/li>\n<li>Toggles: savings lines, public codes, sort strongest first, force dropdown.<\/li>\n<li>Floating contextual guide in admin; save logic preserves whitelist when the coupon list UI is not on the form.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Fix: enqueue storefront CSS\/JS using the main product ID (not <code>global $product<\/code>), so styles load on typical themes.<\/li>\n<li>Storefront rules scoped under <code>.woocommerce<\/code> + data attribute, with guarded <code>!important<\/code> where themes override buttons.<\/li>\n<li>Admin: label \u201cAllowed coupon code (whitelist)\u201d + copy explaining Lite has no separate list.<\/li>\n<li>Premium CTA \u2192 https:\/\/www.orchestrapop.com\/ ; upsell card can no longer be dismissed.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Admin UI aligned with Orchestra Pop premium shell (strip, panels, typography, accent buttons).<\/li>\n<li>Storefront box uses brand tokens (purple CTA, ghost background); more reliable JS click handling.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Top-level admin menu with dedicated SVG icon (no longer under WooCommerce).<\/li>\n<li>Privacy Policy guide integration; readme Privacy section and FAQ.<\/li>\n<li>Plugin header: <code>Requires Plugins: woocommerce<\/code>; full GPLv2 license notice in main file; <code>LICENSE<\/code> file.<\/li>\n<li>Readme: <code>Requires Plugins<\/code> \/ WC tested headers for directory compatibility.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"WooCommerce coupon offers on product pages: one campaign, whitelist, optional shortcodes. No external API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/301544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=301544"}],"author":[{"embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/carthub"}],"wp:attachment":[{"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=301544"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=301544"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=301544"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=301544"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=301544"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=301544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}