{"id":345442,"date":"2026-08-01T20:52:18","date_gmt":"2026-08-01T20:52:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/seeonwall-for-woocommerce\/"},"modified":"2026-08-27T21:27:13","modified_gmt":"2026-08-27T21:27:13","slug":"seeonwall-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/cs.wordpress.org\/plugins\/seeonwall-for-woocommerce\/","author":23537617,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.8.2","stable_tag":"1.8.2","tested":"7.1","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"SeeOnWall \u2013 Wall Art Preview for WooCommerce","header_author":"Mateusz Dziurdziak","header_description":"Let shoppers preview posters on their own wall, at true physical scale, directly on your product pages.","assets_banners_color":"f2ede4","last_updated":"2026-08-27 21:27:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/seeonwall.com","header_author_uri":"https:\/\/profiles.wordpress.org\/mateuszdziurdziak\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":478,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"mateuszdziurdziak","date":"2026-08-01 20:51:58","revision":3631310},"1.0.1":{"tag":"1.0.1","author":"mateuszdziurdziak","date":"2026-08-05 00:00:34","revision":3634741},"1.0.2":{"tag":"1.0.2","author":"mateuszdziurdziak","date":"2026-08-05 21:28:50","revision":3635856},"1.1.0":{"tag":"1.1.0","author":"mateuszdziurdziak","date":"2026-08-11 13:33:31","revision":3642054},"1.2.0":{"tag":"1.2.0","author":"mateuszdziurdziak","date":"2026-08-12 16:57:32","revision":3643793},"1.3.0":{"tag":"1.3.0","author":"mateuszdziurdziak","date":"2026-08-13 08:30:01","revision":3644639},"1.3.1":{"tag":"1.3.1","author":"mateuszdziurdziak","date":"2026-08-13 08:45:23","revision":3644674},"1.4.0":{"tag":"1.4.0","author":"mateuszdziurdziak","date":"2026-08-14 21:09:35","revision":3647963},"1.5.0":{"tag":"1.5.0","author":"mateuszdziurdziak","date":"2026-08-15 20:02:03","revision":3649005},"1.6.0":{"tag":"1.6.0","author":"mateuszdziurdziak","date":"2026-08-19 06:43:03","revision":3653969},"1.7.0":{"tag":"1.7.0","author":"mateuszdziurdziak","date":"2026-08-19 12:02:00","revision":3654551},"1.7.1":{"tag":"1.7.1","author":"mateuszdziurdziak","date":"2026-08-20 19:28:53","revision":3657681},"1.8.0":{"tag":"1.8.0","author":"mateuszdziurdziak","date":"2026-08-25 22:44:16","revision":3666062},"1.8.1":{"tag":"1.8.1","author":"mateuszdziurdziak","date":"2026-08-25 23:27:44","revision":3666089},"1.8.2":{"tag":"1.8.2","author":"mateuszdziurdziak","date":"2026-08-27 21:27:13","revision":3669533}},"upgrade_notice":{"1.8.2":"<p>Fixes the Open dashboard, Upgrade plan and Manage subscription buttons, which browsers could block\nbecause their tab opened too late. Settings now report loading and failure instead of showing a\nstale plan, and invalid values are caught before saving. Nothing to configure.<\/p>","1.8.1":"<p>Listing only, no code changes. The usage limits and the plan answers on this page now match the\ncurrent plans, and the frame answer covers the catalogue added in 1.8.0. Nothing to do.<\/p>","1.8.0":"<p>The preview can now offer the frames your shop sells, and it opens on the frame variation the\nshopper picked. Add your frames in the SeeOnWall dashboard \u2014 Storefront button links there \u2014 and\nname them as your variations name them. Leave the list empty and nothing changes.<\/p>","1.7.1":"<p>Listing only, no code changes. Declares compatibility with WordPress 7.1. Nothing to do.<\/p>","1.7.0":"<p>Poster views now have a monthly limit alongside the hourly one, and both are tracked \u2014 5,000 views\na month on Basic, 25,000 on Premium, and 5,000 on Free while the current promotional offer runs.\nUltra has no monthly limit; its hourly views are now capped at 50,000. Nothing to configure; the\nsettings screen shows a meter for the monthly total.<\/p>","1.6.0":"<p>Adds theme-button matching: the See on wall button can now copy your Add to cart button&#039;s shape\nand typography. The frame width maximum drops from 25 cm to 10 \u2014 check your Default frame width if\nyou had set it higher.<\/p>","1.5.0":"<p>The plugin is now translated into German, Polish, Spanish, French and Italian, following your\nWordPress admin language. Adds French and Italian storefront button text. Nothing to configure.<\/p>","1.4.0":"<p>Adds support for variable products: variation Dimensions now drive the preview, and shoppers\nget a size selector. Fill in each variation&#039;s Dimensions; nothing else to configure.<\/p>","1.3.1":"<p>Listing only, no code changes. Nothing to do.<\/p>","1.3.0":"<p>Previews now show inches to shoppers in inch-measuring stores and to US visitors. Reads your\nexisting WooCommerce dimension unit; nothing to configure.<\/p>","1.2.0":"<p>Adds a per-product artwork inset for stores whose product photos are mockups, so the print\npreviews at its true size. Nothing changes unless you set it.<\/p>","1.1.0":"<p>Previews are now unframed by default instead of showing a 2 cm black frame. If your prices\ninclude a frame, set a default frame width under WooCommerce \u2192 SeeOnWall \u2192 Framing.<\/p>","1.0.2":"<p>Documentation only, no code changes. Adds how to report illegal content.<\/p>","1.0.1":"<p>Documentation only, no code changes. Clarifies how shopper wall photos are handled.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3631310,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3631310,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3631310,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3631310,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.1.0","1.2.0","1.3.0","1.3.1","1.4.0","1.5.0","1.6.0","1.7.0","1.7.1","1.8.0","1.8.1","1.8.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3631310,"resolution":"1","location":"assets","locale":"","width":2560,"height":1444},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3669533,"resolution":"2","location":"assets","locale":"","width":2540,"height":1524},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3669533,"resolution":"3","location":"assets","locale":"","width":2540,"height":1524},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3669533,"resolution":"4","location":"assets","locale":"","width":2540,"height":1524},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3669533,"resolution":"5","location":"assets","locale":"","width":1600,"height":900}},"screenshots":{"1":"The SeeOnWall settings page in WP-Admin.","2":"A true-to-scale wall preview with bookmarks and recently viewed posters.","3":"The room-scene picker and QR flow for starting a preview.","4":"The SeeOnWall analytics dashboard with session and poster-view metrics.","5":"The mobile wall-preview experience for shoppers."}},"plugin_section":[],"plugin_tags":[276418,9615,247834,258763,252866],"plugin_category":[45],"plugin_contributors":[274191],"plugin_business_model":[],"class_list":["post-345442","plugin","type-plugin","status-publish","hentry","plugin_tags-art-prints","plugin_tags-poster","plugin_tags-product-visualization","plugin_tags-room-visualizer","plugin_tags-wall-art","plugin_category-ecommerce","plugin_contributors-mateuszdziurdziak","plugin_committers-mateuszdziurdziak"],"banners":{"banner":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/banner-772x250.png?rev=3631310","banner_2x":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/banner-1544x500.png?rev=3631310","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/icon-128x128.png?rev=3631310","icon_2x":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/icon-256x256.png?rev=3631310","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/screenshot-1.png?rev=3631310","caption":"The SeeOnWall settings page in WP-Admin."},{"src":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/screenshot-2.jpg?rev=3669533","caption":"A true-to-scale wall preview with bookmarks and recently viewed posters."},{"src":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/screenshot-3.jpg?rev=3669533","caption":"The room-scene picker and QR flow for starting a preview."},{"src":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/screenshot-4.jpg?rev=3669533","caption":"The SeeOnWall analytics dashboard with session and poster-view metrics."},{"src":"https:\/\/ps.w.org\/seeonwall-for-woocommerce\/assets\/screenshot-5.jpg?rev=3669533","caption":"The mobile wall-preview experience for shoppers."}],"raw_content":"<!--section=description-->\n<p>SeeOnWall adds a \"See on your wall\" button to your poster\/art product pages. Shoppers take (or\nupload) a photo of their own wall, or pick a stock room scene, and instantly see the poster\nplaced at true physical scale \u2014 reducing purchase hesitation and returns.<\/p>\n\n<p><strong>Requires WooCommerce<\/strong> (8.0+) to be installed and active \u2014 SeeOnWall is a WooCommerce\nextension, not a standalone plugin.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Install and activate SeeOnWall.<\/li>\n<li>Go to WooCommerce \u2192 SeeOnWall and click <strong>Connect to SeeOnWall<\/strong>. No account signup, no API\nkey to copy \u2014 the plugin proves it controls your store's domain and a free account is\nprovisioned automatically.<\/li>\n<li>A \"See on your wall\" button appears on your product pages automatically, sized from your\nproduct's Dimensions (WooCommerce \u2192 Product data \u2192 Shipping).<\/li>\n<li>Upgrade to a paid plan any time from the SeeOnWall settings page: higher usage limits on\nevery paid plan, the seeonwall.com attribution removed from Basic up, shopper session\nsharing from Premium up, and no monthly view ceiling on Ultra. Every paid plan starts with\na 14-day free trial, billed by SeeOnWall directly (Polar.sh), not through WooCommerce.<\/li>\n<\/ol>\n\n<h4>External service: SeeOnWall<\/h4>\n\n<p>This plugin is the client for <strong>SeeOnWall<\/strong>, a hosted software-as-a-service that renders the\nwall previews. The plugin does not do the visualization itself \u2014 it connects your store to the\nSeeOnWall service at https:\/\/seeonwall.com and loads the service's viewer on your product pages.\nIt is not usable without this service, which is operated by the plugin author.<\/p>\n\n<p>What is sent, and when:<\/p>\n\n<ul>\n<li><strong>On connect \/ reconnect<\/strong> (one-time, triggered by you clicking <strong>Connect<\/strong>): your store's URL\nand the connecting WordPress admin's email address. In return the plugin receives a store token\nused to authenticate later requests. The admin email is used only for account notifications\n(e.g. usage-limit alerts) and billing \u2014 it is never shown to shoppers or used for marketing.<\/li>\n<li><strong>On product pages<\/strong> (for connected stores): a small JavaScript viewer is loaded from\n  https:\/\/seeonwall.com\/seeonwall.js, and the product's image URL and physical dimensions are\npassed to it so the shopper can preview the poster. This is loaded from SeeOnWall (not bundled)\nbecause the preview is a live hosted service, kept current server-side.<\/li>\n<li><strong>The plugin itself sends no shopper data.<\/strong> It only injects the button and passes the product\nimage URL and dimensions. Shoppers, however, interact directly with the SeeOnWall service once\nthey open the preview \u2014 see below.<\/li>\n<\/ul>\n\n<p>What SeeOnWall does with shopper data (not the plugin, but the service it loads):<\/p>\n\n<ul>\n<li>A shopper who picks a <strong>room-scene template<\/strong> uploads nothing at all. No photo is created.<\/li>\n<li>A shopper who uploads or takes a <strong>photo of their own wall<\/strong> has that photo stored in an EU\nCloudflare R2 bucket and analysed by Google Vertex AI (via Google's EU Data Boundary endpoint,\npinned to europe-west1) to detect the wall corners. The photo stays inside the EU for its whole\nlifetime, is never used to train models, and is deleted automatically when the session expires\nafter 7 days.<\/li>\n<li>Shoppers never create an account. Cloudflare Turnstile is used for bot protection on upload.<\/li>\n<li>A notice stating the above is shown to the shopper inside the viewer, before they upload.<\/li>\n<\/ul>\n\n<p>Service terms, privacy policy and sub-processors:<\/p>\n\n<ul>\n<li>Terms of Use: https:\/\/seeonwall.com\/terms<\/li>\n<li>Privacy Policy: https:\/\/seeonwall.com\/privacy<\/li>\n<li>Sub-processor list: https:\/\/seeonwall.com\/subprocessors<\/li>\n<\/ul>\n\n<h4>Reporting illegal content<\/h4>\n\n<p>If content hosted by SeeOnWall is unlawful \u2014 for example a poster image used without the rights\nholder's permission \u2014 you can report it to abuse@seeonwall.com. The notice-and-action procedure\nunder Article 16 of the EU Digital Services Act, including what a notice must contain and how it\nis handled, is described at https:\/\/seeonwall.com\/report<\/p>\n\n<h3>Source Code<\/h3>\n\n<p>The admin settings page is a small React + TypeScript app. The plugin ships only its compiled,\nminified output (<code>assets\/js\/settings.js<\/code>, <code>assets\/css\/settings.css<\/code>). The complete, human-readable\nsource those files are built from is included in this plugin under the <code>src\/<\/code> directory, together\nwith build instructions (<code>src\/README.md<\/code>). Build tooling: Node.js + Vite (<code>npm install &amp;&amp; npm run\nbuild<\/code>). React and ReactDOM are not bundled \u2014 they resolve at runtime to the copies WordPress\nships (the <code>react<\/code> \/ <code>react-dom<\/code> script handles).<\/p>\n\n<h3>Translations<\/h3>\n\n<p>The plugin ships translations for German, Polish, Spanish, French and Italian, covering both the\nPHP strings and the React settings screen. It follows your WordPress admin language (Users \u2192\nProfile \u2192 Language), including regional variants such as de_AT, es_MX and fr_CA. Translations\ndelivered through translate.wordpress.org take precedence over the bundled ones, so community\ntranslations are picked up automatically.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/seeonwall-for-woocommerce<\/code>, or install directly through the\nWordPress plugins screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to WooCommerce \u2192 SeeOnWall and click <strong>Connect to SeeOnWall<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20cost%20anything%3F\"><h3>Does this cost anything?<\/h3><\/dt>\n<dd><p>The plugin is free, and so is the plan it connects you to: a free account is provisioned\nautomatically on connect, with no card and no expiry. Paid plans buy higher limits (below),\nthe seeonwall.com attribution removed from Basic up, shopper session sharing from Premium up,\nand no monthly view ceiling on Ultra. Every paid plan starts with a 14-day free trial and is\nbilled by SeeOnWall directly, not through WooCommerce. The analytics dashboard \u2014 sessions,\nposter views, shares, downloads and the per-poster breakdown \u2014 is on every plan, Free\nincluded.<\/p><\/dd>\n<dt id=\"what%20are%20the%20usage%20limits%2C%20and%20where%20do%20i%20see%20them%3F\"><h3>What are the usage limits, and where do I see them?<\/h3><\/dt>\n<dd><p>WooCommerce \u2192 SeeOnWall shows a live meter for each one under <strong>Current usage<\/strong>.<\/p>\n\n<p>Per hour, resetting at the top of every hour, as Free \/ Basic \/ Premium \/ Ultra:<\/p>\n\n<ul>\n<li>Preview sessions \u2014 50 \/ 500 \/ 2,500 \/ 10,000<\/li>\n<li>Photo uploads \u2014 20 \/ 200 \/ 1,000 \/ 2,000<\/li>\n<li>Downloads and shares \u2014 25 \/ 250 \/ 1,000 \/ 2,000<\/li>\n<li>Poster views \u2014 100 \/ 2,500 \/ 10,000 \/ 50,000<\/li>\n<\/ul>\n\n<p>Poster views have a second, monthly budget on top of the hourly one: 500 a month on Free, 5,000\non Basic, 25,000 on Premium. Ultra has no monthly ceiling \u2014 it is bounded by its hourly rate\nalone. The month resets at the start of each calendar month (UTC).<\/p>\n\n<p>A poster view is one preview shown on a calibrated wall, counted once per shopper session per\nday however many devices it appears on. It counts against the hourly and the monthly budget at\nthe same time, and whichever runs out first stops further views from being counted.<\/p>\n\n<p>Reaching a view limit does not break your store \u2014 the button still appears and still opens \u2014 but\nshoppers who get all the way to the preview are asked to try again later instead of seeing it,\nuntil the window resets or you upgrade. You can opt in to an email alert when a limit is reached\nfrom your SeeOnWall account settings.<\/p><\/dd>\n<dt id=\"which%20product%20field%20sets%20the%20poster%27s%20physical%20size%3F\"><h3>Which product field sets the poster's physical size?<\/h3><\/dt>\n<dd><p>By default, WooCommerce's own product Dimensions (Product data \u2192 Shipping \u2192 Width\/Height),\nconverted using your store's configured dimension unit. On a variable product, each variation's\nown Dimensions are used. This can be overridden per-product via the <code>seeonwall_poster_width_cm<\/code>\n\/ <code>seeonwall_poster_height_cm<\/code> filters.<\/p><\/dd>\n<dt id=\"i%20sell%20one%20poster%20in%20several%20sizes%20as%20variations.%20does%20that%20work%3F\"><h3>I sell one poster in several sizes as variations. Does that work?<\/h3><\/dt>\n<dd><p>Yes, from version 1.4.0. Fill in the Dimensions of each variation (Product data \u2192 Variations \u2192\nexpand a variation \u2192 Dimensions) and the preview picks them up automatically. Shoppers get a\nsize selector inside the preview listing every size you sell, and when they change the size on\nyour product page the preview follows. There is nothing extra to configure and no size to type\ntwice \u2014 it reads the dimensions you already entered.<\/p>\n\n<p>Variations that share a size are listed once, so a Size \u00d7 Frame colour product still shows one\npill per size. If you left the Dimensions blank on the variations and filled them on the parent\nproduct instead, every variation measures the same and the preview behaves as it always has.<\/p><\/dd>\n<dt id=\"which%20products%20show%20the%20button%3F\"><h3>Which products show the button?<\/h3><\/dt>\n<dd><p>Configurable from WooCommerce \u2192 SeeOnWall \u2192 Product visibility. By default, every product with\nboth a width and a height set shows the button \u2014 on a variable product, that means at least one\nvariation with dimensions. Switch to \"Only products with the preview enabled\" to opt in\nper-product instead, via a <code>seeonwall_preview_enabled<\/code> custom field\/meta set to a truthy value \u2014\ndimensions are still required either way.<\/p><\/dd>\n<dt id=\"which%20image%20does%20the%20button%20preview%3F\"><h3>Which image does the button preview?<\/h3><\/dt>\n<dd><p>Configurable from WooCommerce \u2192 SeeOnWall \u2192 Poster image. By default, the product's first\ngallery image is used, unless a <code>seeonwall_image_url<\/code> custom field\/meta is set on that product,\nwhich overrides it \u2014 useful when the first image isn't a clean flat shot of the poster (e.g. a\nframed mockup or room scene). Switch to \"Use image from custom field\" to require the custom\nfield on every product instead; the button won't show on products missing it.<\/p><\/dd>\n<dt id=\"my%20product%20photos%20are%20mockups.%20can%20the%20preview%20still%20show%20the%20right%20size%3F\"><h3>My product photos are mockups. Can the preview still show the right size?<\/h3><\/dt>\n<dd><p>Yes, from version 1.2.0. If your photo shows the print on a coloured background or inside a\nframe, the preview would otherwise treat that whole photo as the poster and the print would look\nsmaller than it will on the wall.<\/p>\n\n<p>Set the <code>seeonwall_image_url<\/code> custom field on the product, then fill in <strong>SeeOnWall artwork\ninset<\/strong> on the product's Shipping tab with the rectangle the print itself occupies, as\nleft,top,width,height percentages of the image \u2014 for example <code>14.07,23.6,70.07,50.2<\/code>. Both are\nneeded: the rectangle is measured against one specific image, so it only applies to the image\nyou pointed the plugin at.<\/p>\n\n<p>Because mockups are normally generated from a template, the same value usually works for every\nproduct that shares that template. Leave the field empty to use the whole image.<\/p><\/dd>\n<dt id=\"do%20previews%20show%20the%20poster%20in%20a%20frame%3F\"><h3>Do previews show the poster in a frame?<\/h3><\/dt>\n<dd><p>Only if you say so. By default the preview shows the bare print, and the shopper can add,\nwiden, recolour or remove a frame themselves.<\/p>\n\n<p>There are two ways to set what it opens with. WooCommerce \u2192 SeeOnWall \u2192 Framing takes one\ndefault frame width in centimetres (and optionally a colour) for the whole shop; leave the width\nempty for unframed. From version 1.8.0 you can instead list the frames you sell in the SeeOnWall\ndashboard \u2014 a name, a colour and a width each \u2014 and shoppers pick from those inside the preview\nrather than from six generic colours. Name them as your variations name them and the preview\nopens on the frame the shopper selected, following the variation dropdown.<\/p>\n\n<p>Before version 1.1.0 every preview was drawn with a 2 cm black frame whether or not you sold\nframes; if you do sell framed prints, set a default width or list your frames to restore that\nappearance.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20move%20my%20store%20to%20a%20new%20domain%3F\"><h3>What happens if I move my store to a new domain?<\/h3><\/dt>\n<dd><p>Open WooCommerce \u2192 SeeOnWall \u2014 a \"Reconnect\" prompt appears automatically when the plugin\ndetects the site URL no longer matches the domain it was connected under.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.8.2<\/h4>\n\n<ul>\n<li><strong>Fixed: Open dashboard, Upgrade plan and Manage subscription no longer get blocked.<\/strong> These\nbuttons opened their tab only after the request behind them came back, which browsers treat as\na pop-up rather than as something you clicked. The tab now opens the moment you click and fills\nin when the address is ready. If your browser blocks it anyway, the screen says so instead of\nappearing to do nothing.<\/li>\n<li><strong>Your plan and your button settings now say when they are loading, and when they failed.<\/strong>\nThe plan used to read \"Free\" while it was still being fetched, so a paid store looked free for\na moment; the button settings simply stayed absent if the request failed. Both now show their\nstate, and the button settings offer Retry.<\/li>\n<li><strong>Settings you cannot save are caught before saving.<\/strong> Corner radius below zero, a frame width\noutside 0-10 cm and button text over 120 characters now show a clear client-side message (with\nthe affected label field identified) before the request is sent.<\/li>\n<li>The Corner radius field no longer stops at 50. It was the only field with a ceiling the plugin\ndoes not enforce.<\/li>\n<li>Buttons and fields now show a visible outline when reached by keyboard, and every action button\nis at least 44 pixels tall for touch.<\/li>\n<li>New screenshots on this listing: a preview on a real wall with the bookmarks and recently\nviewed panels, the room-scene picker beside the QR code, the analytics dashboard, and the\npreview as a shopper sees it on a phone.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Listing only, no code changes. The plan limits on this page were out of date. The Free plan's\npromotional capacity has ended, so Free now runs on its own figures: 500 poster views a month\nand 100 an hour, 50 preview sessions and 20 photo uploads an hour. Every plan's hourly limits\nare now listed rather than described, and the answers about what a paid plan adds \u2014 branding\nfrom Basic up, session sharing from Premium up, the 14-day trial, analytics on every plan\nincluding Free \u2014 say which plan each one belongs to. The answer about frames now covers the\nframe catalogue that 1.8.0 added.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li><strong>New: the preview can show the frames you sell instead of six generic colours.<\/strong> List your\nframes in the SeeOnWall dashboard \u2014 the name you use for each one, its colour and its width in\ncentimetres \u2014 and shoppers choose from that list inside the preview, at the width you entered.<\/li>\n<li><strong>The preview opens on the frame the shopper has selected.<\/strong> If you sell a poster framed in\nseveral ways as variations, the preview follows the variation dropdown: pick Oak and it opens\nin your oak frame, at your width. No setup and no new field \u2014 name a frame in the dashboard\nthe way it is named in your variations, and the two find each other. Any attribute works,\nwhatever you call it, in any of the six languages the plugin speaks.<\/li>\n<li>WooCommerce \u2192 SeeOnWall \u2192 Storefront button now links to the frame list. The plugin signs you\nin to the dashboard with one click, the same way it already does for your plan and analytics;\nthere is no second frame editor here to keep in step with that one.<\/li>\n<li>Frame names show exactly as you type them, to shoppers in every storefront language, because\nthey name your products rather than translate a word.<\/li>\n<li>Nothing changes until you add a frame: with an empty list the preview keeps the six colours it\nhad, and your Default frame width and Default frame colour work as before. Either way shoppers\ncan still widen, recolour or remove the frame inside the preview.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Listing only, no code changes. Declares compatibility with WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li><strong>Poster views now have a monthly limit as well as an hourly one, and both are tracked.<\/strong>\nA view counts against each; whichever runs out first stops views from being counted, and\nshoppers are asked to try again later instead of seeing the preview. The monthly ceiling is\n5,000 views on Basic and 25,000 on Premium, resetting at the start of each month; Free is 500,\nbut matches Basic at 5,000 for as long as the current promotional offer runs. Ultra has no\nmonthly ceiling, and in exchange its hourly views \u2014 previously unlimited \u2014 are now capped at\n50,000. The settings screen now shows a meter for the monthly total next to the hourly counters.<\/li>\n<li>Your usage panel is now headed <strong>Current usage<\/strong> rather than \"Usage this hour\", because one of\nits meters is no longer hourly. The four existing counters are unchanged.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li><strong>New: match your theme's Add to cart button.<\/strong> Under WooCommerce \u2192 SeeOnWall \u2192 Storefront\nbutton, set <strong>Button style<\/strong> to \"Match my Add to cart button\" and the See on wall button copies\nyour theme button's font, size, corners and spacing \u2014 no CSS, no values to look up. Colours stay\nours by default so shoppers can still tell the two buttons apart; tick <strong>Also match its colours<\/strong>\nif you want those copied too.<\/li>\n<li>Enabling \"Also match its colours\" now clears the three colour fields, because a colour you set\nyourself overrides the matched one. The fields stay on screen \u2014 set one again if you want your\ntheme's colours everywhere except, say, the border.<\/li>\n<li>The frame width in the preview now stops at 10 cm instead of 25. On a 30x40 print the old\nmaximum drew a border wider than the print itself, which read as a bug rather than as a frame.\nIf you had saved a wider <strong>Default frame width<\/strong>, the preview shows 10; lower it in the settings\nto match what your price actually includes.<\/li>\n<li>The <strong>Button style<\/strong> option \"SeeOnWall style\" is now called \"Default button style\" \u2014 same\nbehaviour, clearer name next to the new matching option.<\/li>\n<li>Shoppers can still widen, recolour or remove the frame inside the preview, exactly as before.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>The plugin now speaks your language. Everything the plugin shows you \u2014 the settings screen, the\nWooCommerce menu entry, the artwork inset field on the product editor, and its notices \u2014 follows\nyour WordPress admin language. German, Polish, Spanish, French and Italian are included, with\nregional variants (de_AT, de_CH, es_MX, es_AR, fr_BE, fr_CA and more) resolving to their\nlanguage rather than falling back to English.<\/li>\n<li>Two more storefront button languages: you can now set the button text for French and Italian\nalongside English, Polski, Deutsch and Espa\u00f1ol, under WooCommerce \u2192 SeeOnWall \u2192 Storefront\nbutton. Shoppers see the button in their own storefront language.<\/li>\n<li>No action needed. Stores running WordPress in English see no change.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Variable products are now supported. If you sell one poster in several sizes as variations,\nfill in each variation's Dimensions and the preview picks them up \u2014 no extra fields, no size\ntyped twice.<\/li>\n<li>Shoppers get a size selector inside the preview listing every size you sell, and changing the\nsize on your product page updates the preview to match.<\/li>\n<li>Previously the plugin read only the parent product's Dimensions, which variable products\nusually leave blank \u2014 so the button often did not appear on them at all. It now does.<\/li>\n<li>Variations sharing a size are listed once, so a Size \u00d7 Frame colour product shows one entry\nper size. Nothing changes for simple products.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Listing only, no code changes. The plugin name and WordPress.org search tags now say\nwhat it does, so merchants searching for a wall art preview tool can find it.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Shoppers in stores that measure in inches now see inches. If your WooCommerce dimension unit\n(WooCommerce \u2192 Settings \u2192 Products) is set to inches, the wall, frame and mat measurements in\nthe preview follow it. Visitors from the US get inches automatically even in a metric store,\nand anyone can switch units inside the preview.<\/li>\n<li>Poster sizes are still read from each product's Dimensions fields in whatever unit your store\nuses, exactly as before \u2014 the plugin has always converted them for you.<\/li>\n<li>No setting to change and no action needed. Stores measuring in centimetres see no difference.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New <strong>SeeOnWall artwork inset<\/strong> field on the product's Shipping tab, for stores whose poster\nimages are mockups \u2014 the print shown on a coloured background, or inside a frame. Previews\nused to treat the whole photo as the poster, so a 30x40 print appeared noticeably smaller\nthan it actually hangs. Enter the rectangle the print itself occupies, as\nleft,top,width,height percentages of the image, and every preview crops to it: on the wall,\non the phone, and in downloaded or shared images.<\/li>\n<li>The inset applies only to products that also have the <code>seeonwall_image_url<\/code> custom field set.\nThe rectangle is measured against one specific image, and the product's gallery image can be\nchanged by the theme, so pairing the two keeps the crop matched to the image it describes.<\/li>\n<li>Mockups are usually generated from a template, so the same few values normally cover a whole\ncatalogue.<\/li>\n<li>No action is needed for stores whose product images are the artwork itself.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Previews now show the poster unframed by default. Previously every preview was drawn with a\n2 cm black frame regardless of what the store sold, so shoppers looking at an unframed print\nsaw something the store does not ship. Shoppers can add a frame from inside the preview.<\/li>\n<li>New <strong>Framing<\/strong> section in the plugin settings: set a default frame width in centimetres and\ncolour, applied to every preview. Set this if your prices include a frame \u2014 it restores the\nprevious framed appearance.<\/li>\n<li>No action is needed for stores selling unframed prints.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Documentation only \u2014 no functional changes. Added a \"Reporting illegal content\" section\npointing to abuse@seeonwall.com and to the notice-and-action procedure under Article 16 of the\nEU Digital Services Act, published at https:\/\/seeonwall.com\/report<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Documentation only \u2014 no functional changes. Corrected the description of what happens to\nshopper data. The previous wording said no customer personal data was involved, which was\naccurate about the plugin itself but misleading about the SeeOnWall service the plugin loads:\na shopper who photographs their own wall has that photo stored in the EU and analysed to\ndetect the wall, then deleted after 7 days. The description now states this explicitly and\nlinks to the sub-processor list at https:\/\/seeonwall.com\/subprocessors.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Poster and wall art preview for WooCommerce: shoppers see any print at true size on a photo of their own wall, or in a room scene.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/345442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=345442"}],"author":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mateuszdziurdziak"}],"wp:attachment":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=345442"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=345442"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=345442"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=345442"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=345442"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=345442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}