{"id":368891,"date":"2026-09-17T07:51:50","date_gmt":"2026-09-17T07:51:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/plugupp-live-freemius-pricing\/"},"modified":"2026-09-26T14:08:18","modified_gmt":"2026-09-26T14:08:18","slug":"plugupp-live-pricing-for-freemius","status":"publish","type":"plugin","link":"https:\/\/ur.wordpress.org\/plugins\/plugupp-live-pricing-for-freemius\/","author":23510969,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.1.2","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"PlugUpp Live Pricing for Freemius","header_author":"PlugUpp","header_description":"Shows live Freemius prices on your own pages through blocks and shortcodes, refreshed by webhook, with a visitor currency toggle and currency-aware checkout links.","assets_banners_color":"353a65","last_updated":"2026-09-26 14:08:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugupp.com\/plugins\/live-pricing-for-freemius\/","header_author_uri":"https:\/\/plugupp.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":209,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.4":{"tag":"1.0.4","author":"plugupp","date":"2026-09-17 07:51:26","revision":3699730},"1.0.5":{"tag":"1.0.5","author":"plugupp","date":"2026-09-18 10:44:25","revision":3701816},"1.1.0":{"tag":"1.1.0","author":"plugupp","date":"2026-09-18 12:41:38","revision":3701987},"1.2.0":{"tag":"1.2.0","author":"plugupp","date":"2026-09-20 17:08:26","revision":3704483},"1.3.0":{"tag":"1.3.0","author":"plugupp","date":"2026-09-24 09:24:37","revision":3710965},"1.4.0":{"tag":"1.4.0","author":"plugupp","date":"2026-09-26 14:08:18","revision":3714318}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3704519,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3704519,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3704519,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3704519,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3704519,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"pflp\/release":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/release","title":"Freemius release","category":"widgets","icon":"update","description":"The product's latest release from Freemius: its version, what it requires and what it is tested up to, so a product page never carries a version somebody typed.","keywords":["Freemius","price","checkout","buy","version","release"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"show":{"type":"string","default":"version,requires,tested"},"separator":{"type":"string","default":" \u00b7 "},"dateFormat":{"type":"string","default":""},"align":{"type":"string","default":""}},"usesContext":["pflp\/product","pflp\/plan","pflp\/licenses"],"supports":{"html":false,"color":{"text":true,"background":true,"gradients":false,"__experimentalDefaultControls":{"text":true,"background":true}},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true},"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"style":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}},"shadow":true},"example":{"attributes":{},"viewportWidth":320},"editorScript":"pflp-blocks-editor"},"pflp\/features":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/features","title":"Freemius plan features","category":"widgets","icon":"list-view","description":"The features Freemius holds against a plan, as a list, so a pricing card lists what it sells without anyone retyping it.","keywords":["Freemius","price","checkout","buy","features"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"plan":{"type":"string","default":""},"showDescription":{"type":"boolean","default":false},"align":{"type":"string","default":""}},"usesContext":["pflp\/product","pflp\/plan","pflp\/licenses"],"supports":{"html":false,"color":{"text":true,"background":true,"gradients":false},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true},"spacing":{"margin":true,"padding":true}},"example":{"attributes":{},"viewportWidth":320},"editorScript":"pflp-blocks-editor"},"pflp\/card":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/card","title":"Freemius pricing card","category":"widgets","icon":"index-card","description":"The box a pricing card is: a border, a radius, padding and a width, with the plan's name, price, description, features and buy button inside it.","keywords":["Freemius","price","checkout","buy","card","container"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"plan":{"type":"string","default":""},"licenses":{"type":"string","default":""},"featured":{"type":"string","default":"auto"},"width":{"type":"string","default":""},"placement":{"type":"string","default":""}},"providesContext":{"pflp\/product":"product","pflp\/plan":"plan","pflp\/licenses":"licenses"},"supports":{"html":false,"anchor":true,"align":["wide","full"],"color":{"text":true,"background":true,"gradients":false,"__experimentalDefaultControls":{"text":true,"background":true}},"__experimentalBorder":{"color":true,"radius":true,"width":true,"style":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}},"shadow":true,"spacing":{"margin":true,"padding":true,"blockGap":true,"__experimentalDefaultControls":{"padding":true,"blockGap":true}},"dimensions":{"minHeight":true,"__experimentalDefaultControls":{"minHeight":true}},"layout":{"default":{"type":"flow"},"allowSwitching":false,"allowEditing":false}},"example":{"attributes":{"width":"320","style":{"border":{"color":"#e0e0e0","radius":"8px","style":"solid","width":"1px"},"spacing":{"padding":{"top":"2rem","right":"2rem","bottom":"2rem","left":"2rem"}}}},"innerBlocks":[{"name":"pflp\/plan","attributes":{"field":"title","align":"center"}},{"name":"pflp\/price","attributes":{"suffix":"auto","align":"center"}},{"name":"pflp\/button","attributes":{"width":"100","align":"center"}}],"viewportWidth":360},"editorScript":"pflp-blocks-editor"},"pflp\/cycle":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/cycle","title":"Freemius billing cycle toggle","category":"widgets","icon":"clock","description":"Lets a visitor switch every price and buy button on the page between the billing cycles your product is sold on.","keywords":["Freemius","price","checkout","buy","billing"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"default":{"type":"string","default":""},"labels":{"type":"object","default":{}},"badge":{"type":"boolean","default":false},"badgeText":{"type":"string","default":""},"activeColor":{"type":"string","default":""},"activeBackground":{"type":"string","default":""},"gap":{"type":"number"},"size":{"type":"string","default":""},"align":{"type":"string","default":""}},"usesContext":["pflp\/product","pflp\/plan","pflp\/licenses"],"styles":[{"name":"pills","label":"Pills"},{"name":"buttons","label":"Buttons"},{"name":"tabs","label":"Tabs"},{"name":"text","label":"Text"},{"name":"switch","label":"Switch"}],"supports":{"html":false,"color":{"text":true,"background":true,"gradients":false,"__experimentalDefaultControls":{"text":true,"background":true}},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true},"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"style":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}},"shadow":true},"example":{"attributes":{},"viewportWidth":320},"editorScript":"pflp-blocks-editor"},"pflp\/price":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/price","title":"Freemius price","category":"widgets","icon":"tag","description":"One live Freemius price: a plan, a licence tier and a billing cycle, in the visitor's own currency.","keywords":["Freemius","price","checkout","buy"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"plan":{"type":"string","default":""},"licenses":{"type":"string","default":""},"cycle":{"type":"string","default":""},"currency":{"type":"string","default":""},"format":{"type":"string","default":"symbol"},"suffix":{"type":"string","default":""},"missing":{"type":"string","default":"text"},"missingText":{"type":"string","default":""},"align":{"type":"string","default":""}},"usesContext":["pflp\/product","pflp\/plan","pflp\/licenses"],"supports":{"html":false,"color":{"text":true,"background":true,"gradients":false,"__experimentalDefaultControls":{"text":true,"background":true}},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true},"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"style":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}},"shadow":true},"example":{"attributes":{},"viewportWidth":320},"editorScript":"pflp-blocks-editor"},"pflp\/moneyback":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/moneyback","title":"Freemius money-back","category":"widgets","icon":"shield","description":"The money-back guarantee Freemius holds for the product, named after its Freemius refund policy, such as \"30-day satisfaction guarantee\", shown only while Freemius offers one.","keywords":["Freemius","price","checkout","buy","guarantee","refund"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"text":{"type":"string","default":""},"align":{"type":"string","default":""}},"usesContext":["pflp\/product","pflp\/plan","pflp\/licenses"],"supports":{"html":false,"color":{"text":true,"background":true,"gradients":false,"__experimentalDefaultControls":{"text":true,"background":true}},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true},"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"style":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}},"shadow":true},"example":{"attributes":{},"viewportWidth":320},"editorScript":"pflp-blocks-editor"},"pflp\/button":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/button","title":"Freemius buy button","category":"widgets","icon":"cart","description":"A buy button linking to your Freemius checkout for one plan, licence tier and billing cycle.","keywords":["Freemius","price","checkout","buy"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"plan":{"type":"string","default":""},"licenses":{"type":"string","default":""},"cycle":{"type":"string","default":""},"currency":{"type":"string","default":""},"label":{"type":"string","default":""},"width":{"type":"string","default":""},"missing":{"type":"string","default":"text"},"missingText":{"type":"string","default":""},"align":{"type":"string","default":""}},"usesContext":["pflp\/product","pflp\/plan","pflp\/licenses"],"supports":{"html":false,"anchor":true,"color":{"text":true,"background":true,"gradients":false,"__experimentalDefaultControls":{"text":true,"background":true}},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true},"spacing":{"padding":true,"margin":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}},"shadow":true},"styles":[{"name":"fill","label":"Filled","isDefault":true},{"name":"outline","label":"Outlined"}],"example":{"attributes":{},"viewportWidth":320},"editorScript":"pflp-blocks-editor"},"pflp\/currency":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/currency","title":"Freemius currency toggle","category":"widgets","icon":"money-alt","description":"Lets a visitor switch every price and buy button on the page between the currencies your product is sold in.","keywords":["Freemius","price","checkout","buy","currency"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"activeColor":{"type":"string","default":""},"activeBackground":{"type":"string","default":""},"gap":{"type":"number"},"size":{"type":"string","default":""},"align":{"type":"string","default":""}},"usesContext":["pflp\/product","pflp\/plan","pflp\/licenses"],"styles":[{"name":"pills","label":"Pills"},{"name":"buttons","label":"Buttons"},{"name":"tabs","label":"Tabs"},{"name":"text","label":"Text"},{"name":"switch","label":"Switch"}],"supports":{"html":false,"color":{"text":true,"background":true,"gradients":false,"__experimentalDefaultControls":{"text":true,"background":true}},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true},"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"style":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}},"shadow":true},"example":{"attributes":{},"viewportWidth":320},"editorScript":"pflp-blocks-editor"},"pflp\/plan":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pflp\/plan","title":"Freemius plan text","category":"widgets","icon":"text","description":"A plan's own words from Freemius: its title, its description or its free trial, so a pricing card names its plan once.","keywords":["Freemius","price","checkout","buy","plan"],"textdomain":"plugupp-live-pricing-for-freemius","attributes":{"product":{"type":"string","default":""},"plan":{"type":"string","default":""},"field":{"type":"string","default":"title"},"fallback":{"type":"string","default":""},"align":{"type":"string","default":""}},"usesContext":["pflp\/product","pflp\/plan","pflp\/licenses"],"supports":{"html":false,"color":{"text":true,"background":true,"gradients":false,"__experimentalDefaultControls":{"text":true,"background":true}},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true},"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"style":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}},"shadow":true},"example":{"attributes":{},"viewportWidth":320},"editorScript":"pflp-blocks-editor"}},"tagged_versions":["1.0.4","1.0.5","1.1.0","1.2.0","1.3.0","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3710967,"resolution":"1","location":"assets","locale":"","width":3520,"height":2452},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3714319,"resolution":"2","location":"assets","locale":"","width":3520,"height":2452},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3710967,"resolution":"3","location":"assets","locale":"","width":3436,"height":5414},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3710967,"resolution":"4","location":"assets","locale":"","width":3436,"height":4092},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3711006,"resolution":"5","location":"assets","locale":"","width":3840,"height":2160},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3704484,"resolution":"6","location":"assets","locale":"","width":2900,"height":1916},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3710967,"resolution":"7","location":"assets","locale":"","width":2080,"height":690},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3710967,"resolution":"8","location":"assets","locale":"","width":3520,"height":2452}},"screenshots":{"1":"The Products screen: every configured product, named by Freemius, with its plans, its currencies, its last fetch, its last webhook and its status.","2":"A product's own screen: the API Bearer Authorization Token with its Test button, the Status card showing the stored prices, the latest release and the money-back period Freemius holds, and the self-registered webhook, and the Shortcode builder, here writing a whole pricing card as the six lines a page builder's shortcode widget takes.","3":"The Appearance tab: how every toggle, pricing card and buy button looks, in one panel of Toggles, Cards, Buttons, Filled buttons and Outlined buttons, with the Card defaults every pricing card starts from, the hover lift, hover shadow and shadow colour for cards and for buy buttons, and for each kind of buy button a Border width and a Colours grid of Normal beside On hover. Every field that can be left empty says Unchanged. Both toggles, a live card and both buttons sit beside the fields and follow every change, with a Hold hover box for picking a hover colour without holding the mouse still.","4":"The Featured plan tab: how a featured card, its badge and its button look, with a live card beside the fields that follows every change.","5":"The Freemius pricing card in the block editor, with its own width, border, radius, padding and block spacing panels, on a theme that leaves WordPress's appearance tools off.","6":"A pricing row on a page: live prices, a billing cycle toggle carrying the saving computed from those prices, and the featured plan marking itself with its badge.","7":"The same cards in a visitor's own currency, swapped in their browser with no request back to the site.","8":"The Logs tab, showing every price fetch, webhook delivery and error, with the log level, Clear log and Download log."}},"plugin_section":[],"plugin_tags":[1220,8504,139562,4394,80],"plugin_category":[43,45],"plugin_contributors":[266955],"plugin_business_model":[],"class_list":["post-368891","plugin","type-plugin","status-publish","hentry","plugin_tags-block","plugin_tags-currency","plugin_tags-freemius","plugin_tags-pricing","plugin_tags-shortcode","plugin_category-customization","plugin_category-ecommerce","plugin_contributors-plugupp","plugin_committers-plugupp"],"banners":{"banner":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/banner-772x250.png?rev=3704519","banner_2x":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/banner-1544x500.png?rev=3704519","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/icon.svg?rev=3704519","icon":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/icon.svg?rev=3704519","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/screenshot-1.png?rev=3710967","caption":"The Products screen: every configured product, named by Freemius, with its plans, its currencies, its last fetch, its last webhook and its status."},{"src":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/screenshot-2.png?rev=3714319","caption":"A product's own screen: the API Bearer Authorization Token with its Test button, the Status card showing the stored prices, the latest release and the money-back period Freemius holds, and the self-registered webhook, and the Shortcode builder, here writing a whole pricing card as the six lines a page builder's shortcode widget takes."},{"src":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/screenshot-3.png?rev=3710967","caption":"The Appearance tab: how every toggle, pricing card and buy button looks, in one panel of Toggles, Cards, Buttons, Filled buttons and Outlined buttons, with the Card defaults every pricing card starts from, the hover lift, hover shadow and shadow colour for cards and for buy buttons, and for each kind of buy button a Border width and a Colours grid of Normal beside On hover. Every field that can be left empty says Unchanged. Both toggles, a live card and both buttons sit beside the fields and follow every change, with a Hold hover box for picking a hover colour without holding the mouse still."},{"src":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/screenshot-4.png?rev=3710967","caption":"The Featured plan tab: how a featured card, its badge and its button look, with a live card beside the fields that follows every change."},{"src":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/screenshot-5.png?rev=3711006","caption":"The Freemius pricing card in the block editor, with its own width, border, radius, padding and block spacing panels, on a theme that leaves WordPress's appearance tools off."},{"src":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/screenshot-6.png?rev=3704484","caption":"A pricing row on a page: live prices, a billing cycle toggle carrying the saving computed from those prices, and the featured plan marking itself with its badge."},{"src":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/screenshot-7.png?rev=3710967","caption":"The same cards in a visitor's own currency, swapped in their browser with no request back to the site."},{"src":"https:\/\/ps.w.org\/plugupp-live-pricing-for-freemius\/assets\/screenshot-8.png?rev=3710967","caption":"The Logs tab, showing every price fetch, webhook delivery and error, with the log level, Clear log and Download log."}],"raw_content":"<!--section=description-->\n<p>If you sell through Freemius, the prices on your website are a copy of the prices in your Freemius dashboard, and copies go stale. Change a price in the dashboard and you then have to remember every page, tile and sentence on your own site that quotes it, open each one in the editor, retype the figure and save. Miss one and a visitor is reading a price you no longer charge.<\/p>\n\n<p>This plugin keeps the figure in the page bound to the price in the dashboard. Blocks in the editor, shortcodes everywhere else, both rendering the same live figure. Prices are fetched from the Freemius API on your server, stored on your site, and refetched within seconds of a dashboard change. Your pages render the stored figure, so nothing about this makes a visitor wait on an API call, and nobody has to re-save a page for a new price to appear.<\/p>\n\n<p>A figure typed into a page is correct on the day and drifts from then on. This plugin never types one: every price on the page is read from the stored copy at render time, and the stored copy follows the dashboard.<\/p>\n\n<p>Freemius is a trademark of Freemius, Inc. This plugin is an independent integration built by PlugUpp on the public Freemius API; it is not affiliated with, endorsed by or maintained by Freemius, and it is not the Freemius for WordPress plugin.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>A <strong>Freemius pricing card<\/strong> block is a whole card in one go: insert it and it arrives holding the plan's name, its price, its description, its features list and a full-width buy button, every figure and every word of it live and every one of them still its own block. The card itself has a width, a position, a border, a radius, padding, a background and the space between the blocks inside it, all from its own panels, on every theme, including the themes where WordPress leaves those panels switched off.<\/li>\n<li>A <strong>Freemius price<\/strong> block renders any plan, licence tier and billing cycle, picked from dropdowns that offer only the combinations your product sells. <strong>Freemius buy button<\/strong>, <strong>Freemius plan text<\/strong>, <strong>Freemius plan features<\/strong>, <strong>Freemius currency toggle<\/strong>, <strong>Freemius billing cycle toggle<\/strong>, <strong>Freemius release<\/strong> and <strong>Freemius money-back<\/strong> sit beside it, all nine under Widgets in the inserter.<\/li>\n<li><code>[pflp_card]<\/code> is the same box as a shortcode, wrapping whatever you put between its tags. A row of cards side by side stays an ordinary Columns or Grid block, because WordPress is already good at that.<\/li>\n<li>The plan's own words come from Freemius too. <code>[pflp_plan]<\/code> renders its title, its description or its free trial, and <code>[pflp_features]<\/code> renders its feature list, so nothing on a pricing card is typed twice.<\/li>\n<li><code>[pflp_price]<\/code> does the same thing as a shortcode, for page builders, the classic editor, widget areas and template files. The blocks and the shortcodes are the same code, so the two can never drift apart, and an existing shortcode converts to a block in one click.<\/li>\n<li><code>[pflp_button]<\/code> renders a buy button linking to the hosted checkout for that same row, built the way WordPress builds its own Button block so your theme's button styling applies to it. It comes in two kinds, Filled and Outlined, the same two the core Buttons block offers and built the same way, and each kind has its own colours on the Settings screen.<\/li>\n<li><code>[pflp_cycle]<\/code> renders a billing cycle toggle and <code>[pflp_currency]<\/code> a currency toggle, each with five styles, a size, a gap and an active colour, and each rendering nothing at all where there is only one option to offer.<\/li>\n<li>The cycle toggle can carry the saving on the yearly option. It is computed from your own prices rather than typed, so a price change moves it, and it is not shown at all when there is no saving to claim.<\/li>\n<li>A price can print your own text after the figure, <code>\/month<\/code> and <code>\/year<\/code> set once on the Settings screen and following the toggle, or your own words. It is off unless you ask for it, so nothing already published changes.<\/li>\n<li>A plan that does not sell the cycle on show says so, \"Yearly only\", built from the cycles it does sell. A price never falls back to a nearby figure and never prints a zero.<\/li>\n<li>Every attribute is optional. <code>[pflp_price]<\/code> and <code>[pflp_button]<\/code> with nothing at all render your headline price and the checkout that sells it, so the shortest thing you can type is already the right one.<\/li>\n<li>A webhook receiver refetches within seconds of a price or plan change in the dashboard, and registers itself: there is nothing to paste. A staleness check is the backstop, and a daily job is the backstop for that.<\/li>\n<li>Every price carries all of its currencies and all of its billing cycles, so a visitor sees theirs through a swap in their own browser. No request comes back to your site, which means a page cache or a CDN can never serve one visitor's currency to another.<\/li>\n<li>Buy buttons stay ordinary links to the hosted checkout and gain the visitor's currency, whether the plugin rendered them or your theme did. One setting opens the checkout in an overlay instead.<\/li>\n<li>If the Freemius API is ever unreachable, the last good prices stay on the page and an admin notice tells you. Nothing goes blank, and no figure is ever invented or shown as zero.<\/li>\n<li>A shortcode builder on each product's screen writes any of it for you, says what it will render, and lists every price the product sells. Pick Pricing card and it writes the whole card, all six lines at once, ready for a page builder's shortcode widget or the classic editor. A second row of dropdowns offers whatever named choices the element has: a price's format and its suffix, a button's style and width, a toggle's look, the saving badge, a card's featured state and its button style, and a features list's descriptions.<\/li>\n<li>Card defaults set the border, radius, padding, background and shadow of every pricing card on the site at once. They start empty, so nothing changes until you fill one, and anything set on a card itself always wins.<\/li>\n<li>The version is live too. <strong>Freemius release<\/strong> and <code>[pflp_release]<\/code> show the latest release Freemius holds for the product: its version, what it requires and what it is tested up to, and its release date if you ask for it. <strong>Freemius money-back<\/strong> and <code>[pflp_moneyback]<\/code> show the money-back guarantee set in the dashboard. Both show nothing at all where Freemius holds nothing, rather than a typed stand-in that would go stale.<\/li>\n<\/ul>\n\n<h4>Who it is for<\/h4>\n\n<p>Anyone selling a WordPress plugin or theme through Freemius who publishes prices on their own site: a pricing page, a comparison table, a landing page, or a price quoted in a paragraph of copy. It is most useful if you sell in more than one currency, or change prices more than once a year.<\/p>\n\n<h3>About PlugUpp<\/h3>\n\n<p>PlugUpp builds WordPress plugins for people who publish and sell on their own site. This one is free because everyone who needs it is a plugin or theme seller with a marketing site, which is exactly who PlugUpp builds for. Three more for the same site:<\/p>\n\n<ul>\n<li><strong>PlugUpp Link &amp; Image Health Audit<\/strong> finds the broken links and broken images on the site you sell from, checked on your own server with no external crawler and no quota. <a href=\"https:\/\/plugupp.com\/plugins\/link-image-health-audit\/\">See it on plugupp.com<\/a><\/li>\n<li><strong>PlugUpp Search &amp; Social Appearance Audit<\/strong> shows how every page looks in Google and on social platforms, from the page as it actually ships, before a buyer sees it. <a href=\"https:\/\/plugupp.com\/plugins\/search-social-appearance-audit\/\">See it on plugupp.com<\/a><\/li>\n<li><strong>PlugUpp Dynamic OG Image Generator<\/strong> gives each page a real browser screenshot of itself as its share image, so a shared link shows the page as it is. <a href=\"https:\/\/plugupp.com\/plugins\/dynamic-og-image-generator\/\">See it on plugupp.com<\/a><\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on the Freemius platform. Three separate calls are involved, and they are described here in full, followed by one call to WordPress.org on two admin screens.<\/p>\n\n<p><strong>1. Reading your prices from the Freemius API<\/strong><\/p>\n\n<p>Your server requests <code>https:\/\/api.freemius.com\/v1\/products\/{product ID}\/pricing.json<\/code>. It sends the numeric Freemius product ID in the URL and your Freemius API Bearer Authorization Token in an authorization header. Nothing else is sent, and nothing about your visitors is sent. The call happens only on your server, never during a visitor's page view: when you press Refresh now or Test token in the admin, when a webhook arrives, when a scheduled refresh runs, and whenever you save the product. If no token is configured, the call is never made.<\/p>\n\n<p>When a save has proved the token, your server also reads the product's secret key from <code>https:\/\/api.freemius.com\/v1\/products\/{product ID}.json<\/code> (it signs every webhook delivery; it is stored on your site and never shown or logged) and registers this site's webhook with the same API: it lists the product's webhooks at <code>https:\/\/api.freemius.com\/v1\/products\/{product ID}\/webhooks.json<\/code>, then creates one for this site or brings its own up to date, and removes its own when you delete the product. The only thing sent is this site's webhook URL and the eleven event types it subscribes to: a price or a plan being created, updated or deleted, a version being released, deployed, updated or deleted, and a release being suspended. Webhooks pointing anywhere else are never touched.<\/p>\n\n<p>The prices answer also carries the product's money-back period and refund policy, and those two are kept with the prices. Whenever the prices are read, your server also reads the product's latest released version from <code>https:\/\/api.freemius.com\/v1\/products\/{product ID}\/tags\/latest.json<\/code>, with the same product ID and token and nothing else. Only the version, the WordPress and PHP versions it requires, the version it is tested up to, its release date and its tag number are kept from it; the download link the answer carries is never stored.<\/p>\n\n<p><strong>2. Choosing the visitor's currency<\/strong><\/p>\n\n<p>The visitor's browser requests <code>https:\/\/checkout.freemius.com\/geo.json<\/code>. The request carries nothing beyond the request itself, which necessarily includes the visitor's IP address as any web request does. The answer is a currency code, which the browser keeps for one hour so the call is not repeated on every page. This happens only on pages where a price or a currency toggle has been rendered, and only when the visitor has not already chosen a currency.<\/p>\n\n<p><strong>3. The overlay checkout<\/strong><\/p>\n\n<p>When you switch the Checkout setting to \"Open the checkout in an overlay\", the visitor's browser loads the Freemius checkout script from <code>https:\/\/checkout.freemius.com\/js\/v1\/<\/code> so the checkout can open in place. With the default hosted setting, this script is never loaded and your buy buttons remain ordinary links.<\/p>\n\n<p><strong>4. The More from PlugUpp panel<\/strong><\/p>\n\n<p>On this plugin's own Products and Settings screens, and nowhere else, your site asks the WordPress.org plugins API (<code>https:\/\/api.wordpress.org\/plugins\/info\/1.2\/<\/code>) for the list of plugins published by the PlugUpp account, once a day, and shows them as cards with their WordPress.org icons (served from <code>https:\/\/ps.w.org\/<\/code>). The request carries the author name and nothing about your site. This is the same API WordPress itself uses for the Add New plugin screen and for update checks. If it cannot be reached, a short built-in list is shown instead.<\/p>\n\n<p><strong>Webhooks are inbound.<\/strong> A webhook is a call from Freemius to your site, not from your site to Freemius. Your site never initiates it and sends nothing. Each delivery is verified twice before it is acted on: the URL carries a key this plugin generated, and the body carries a signature checked against your product's secret key.<\/p>\n\n<p>Freemius is operated by Freemius, Inc. Their terms of service are at https:\/\/freemius.com\/terms\/ and their privacy policy is at https:\/\/freemius.com\/privacy\/.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>The nine badge icons are <a href=\"https:\/\/github.com\/tabler\/tabler-icons\">Tabler Icons<\/a> by Pawel Kuna, used unmodified under the MIT licence. The licence text ships with them, in <code>assets\/icons\/badge\/LICENSE-icons.txt<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the plugin through Plugins, Add New, or upload the plugin folder to <code>wp-content\/plugins\/<\/code>, then activate it.<\/li>\n<li>Open Freemius Pricing in the WordPress admin menu. It lands on Products.<\/li>\n<li>Press Add product and fill in the numeric Freemius product ID and its API Bearer Authorization Token, from the Freemius dashboard under the product, then Settings, then Keys. Nothing else is typed: the product's name arrives with the prices, and the product secret key, which signs webhooks, is read with the token. Both the token and the secret come from the Freemius dashboard, under the product, then Settings, then Keys.<\/li>\n<li>Press Test token to check it, then Add product to save.<\/li>\n<li>You are now on the product's own screen, and the webhook is already registered with Freemius: the save did it, and the Status card says so. If it could not be, the same line says why, and Show webhook URL beneath it opens the URL and the events to paste into the Freemius dashboard, under the product, then Webhooks, then Listeners, yourself.<\/li>\n<li>The same screen has a Shortcode builder: pick the element, the plan, the licence tier and the billing cycle, and it writes the shortcode and says what it renders. Copy it into a page. In the block editor, insert any of the nine Freemius blocks from the inserter under Widgets instead, or drop in the Freemius pricing card from the Patterns tab, and pick the row from dropdowns.<\/li>\n<li>Freemius Pricing, then Settings holds the site-wide choices: under Display the default currency, whether a visitor's currency choice is remembered, hosted or overlay checkout and how stale prices may get before a background refresh; under Billing cycle the default cycle, the three toggle labels and the three texts that can follow a price; under Buttons the default label, CSS classes and hover effect. Freemius Pricing, then Logs shows what the plugin has been doing.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20slow%20my%20pages%20down%3F\"><h3>Does this slow my pages down?<\/h3><\/dt>\n<dd><p>No. Pages read the prices from your own database, and your server never calls Freemius while a visitor is waiting. A stale copy renders as it is and schedules a background refresh.<\/p><\/dd>\n<dt id=\"how%20quickly%20does%20a%20price%20change%20appear%3F\"><h3>How quickly does a price change appear?<\/h3><\/dt>\n<dd><p>With the webhook registered, within seconds. Without it, within the Refresh after interval on the Settings screen, which starts at 15 minutes, and at worst within a day on a page nobody visits.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20freemius%20is%20down%2C%20or%20my%20token%20stops%20working%3F\"><h3>What happens if Freemius is down, or my token stops working?<\/h3><\/dt>\n<dd><p>The last prices fetched stay on your pages indefinitely, and an admin notice tells you the refresh is failing. Nothing goes blank and nothing invents a figure.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20set%20up%20the%20webhook%3F\"><h3>Do I have to set up the webhook?<\/h3><\/dt>\n<dd><p>No. Saving a product with a working token registers it with Freemius for you, and every later save checks it. Where Freemius has not enabled webhooks for a product yet (it reserves them until a product is actively selling), the save is still complete and the Status card says so rather than blaming the token; every later save tries again.<\/p><\/dd>\n<dt id=\"do%20i%20need%20freemius%27s%20own%20wordpress%20plugin%20as%20well%3F\"><h3>Do I need Freemius's own WordPress plugin as well?<\/h3><\/dt>\n<dd><p>No. This plugin talks to the Freemius API directly and depends on no other plugin. The two run side by side happily. The only thing this one does to the rest of your page is add the visitor's currency to links pointing at the Freemius checkout, whoever made them, and open them in the overlay if you have chosen it.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20the%20api%20bearer%20authorization%20token%2C%20and%20is%20it%20safe%3F\"><h3>Where do I get the API Bearer Authorization Token, and is it safe?<\/h3><\/dt>\n<dd><p>In the Freemius dashboard: the product, then Settings, then Keys. It is stored in your site's settings, shown masked, never written to the log, and sent nowhere but api.freemius.com over HTTPS from your server. The product secret key, which proves a webhook genuine, is read with it, so there is nothing else to copy.<\/p><\/dd>\n<dt id=\"which%20currencies%20are%20supported%3F\"><h3>Which currencies are supported?<\/h3><\/dt>\n<dd><p>The ones the Freemius pricing API returns: USD, EUR and GBP. The plugin never converts a price, so a currency a plan has no row in is never offered for it, and the currency toggle does not render at all where there is only one.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20write%20out%20every%20attribute%3F\"><h3>Do I have to write out every attribute?<\/h3><\/dt>\n<dd><p>No. Every attribute on every shortcode is optional, and the shortest form is the right one: <code>[pflp_price]<\/code> renders your headline price and <code>[pflp_button]<\/code> links to the checkout that sells it. Left out, <code>plan<\/code> means the plan Freemius marks as featured, <code>licenses<\/code> means that plan's lowest numbered tier, and <code>cycle<\/code> means your default cycle where the tier sells it. An attribute you do write is never second-guessed.<\/p><\/dd>\n<dt id=\"can%20i%20show%20prices%20for%20more%20than%20one%20product%3F\"><h3>Can I show prices for more than one product?<\/h3><\/dt>\n<dd><p>Yes. Add each one under Freemius Pricing, Products, then name one with <code>product=\"12345\"<\/code>, or with its Freemius slug or name. The first product configured is used when a shortcode names none.<\/p><\/dd>\n<dt id=\"the%20product%20was%20renamed%20in%20freemius.%20when%20does%20the%20site%20follow%3F\"><h3>The product was renamed in Freemius. When does the site follow?<\/h3><\/dt>\n<dd><p>The name comes with the prices on every fetch, and Freemius sends no webhook for a rename, so it follows on the next refresh, or straight away if you press Refresh now or save the product.<\/p><\/dd>\n<dt id=\"what%20about%20the%20free%20plan%3F\"><h3>What about the free plan?<\/h3><\/dt>\n<dd><p>Nothing from this plugin: a plan with no price has no figure to show and no checkout to link to, so the block's Plan dropdown does not offer it and a shortcode naming it renders nothing. For the free tier of a pricing table, use an ordinary button, the core Buttons block or your theme's, linking to the plugin's download page. That link is a fixed fact rather than a live price, so there is nothing to keep current.<\/p><\/dd>\n<dt id=\"are%20there%20blocks%2C%20or%20only%20shortcodes%3F\"><h3>Are there blocks, or only shortcodes?<\/h3><\/dt>\n<dd><p>Both, and they are the same code, so they can never disagree. Nine blocks under Widgets in the inserter (Freemius pricing card, price, buy button, plan text, plan features, currency toggle, billing cycle toggle, release and money-back), and the pricing card again under Freemius in the Patterns tab, ready sized and bordered. Each block renders your headline row as soon as it is inserted, and its dropdowns offer only the combinations your product sells. A Shortcode block converts to the matching block in one click, and the block type menu converts it back; styling set in the editor's own panels is inline CSS and cannot travel to a shortcode, which the editor says once.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20a%20page%20cache%3F\"><h3>Does it work with a page cache?<\/h3><\/dt>\n<dd><p>Yes, and it is built for it. Every price is written into the page in all of its currencies and all of its billing cycles, and both swaps happen in the visitor's own browser with no request back to your server, so a cached page is the same page for everyone.<\/p><\/dd>\n<dt id=\"does%20it%20replace%20my%20buy%20buttons%3F\"><h3>Does it replace my buy buttons?<\/h3><\/dt>\n<dd><p>Only if you want it to. <code>[pflp_button]<\/code> renders one for any plan, licence tier and billing cycle, with four widths, two kinds of button, Filled and Outlined, and the <code>wp-element-button<\/code> class WordPress gives its own buttons. A button you built yourself works just as well: the plugin adds the visitor's currency to any link pointing at the Freemius checkout, and can open it in an overlay.<\/p><\/dd>\n<dt id=\"can%20it%20show%20the%20current%20version%20and%20the%20money-back%20guarantee%3F\"><h3>Can it show the current version and the money-back guarantee?<\/h3><\/dt>\n<dd><p>Yes. The Freemius release block, or <code>[pflp_release]<\/code>, shows the latest version released on Freemius, what it requires and what it is tested up to, and the Freemius money-back block, or <code>[pflp_moneyback]<\/code>, shows the guarantee set in the dashboard, named after its refund policy. Both update when you release or change them, the same way prices do. A product with no releases on Freemius, such as an app, shows no release line at all, and a product with no money-back period shows no guarantee: there is no typed fallback, because a typed version is the copy that goes stale.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20plan%20does%20not%20sell%20the%20billing%20cycle%20on%20show%3F\"><h3>What happens if a plan does not sell the billing cycle on show?<\/h3><\/dt>\n<dd><p>The price says so, \"Yearly only\", built from the cycles that tier does sell in your own words for them, and the buy button keeps its shape and says the same rather than linking to a checkout that cannot sell it. It never falls back to a nearby figure and never prints a zero. <code>missing=\"hide\"<\/code> prints nothing instead, and <code>cycle=\"annual\"<\/code> pins a card to its own figure so a toggle leaves it alone.<\/p><\/dd>\n<dt id=\"what%20external%20services%20does%20this%20plugin%20use%3F\"><h3>What external services does this plugin use?<\/h3><\/dt>\n<dd><p>The Freemius platform. Your server reads your prices from <code>https:\/\/api.freemius.com\/v1\/products\/{product ID}\/pricing.json<\/code>, with the money-back period in the same answer, and the latest release from <code>...\/tags\/latest.json<\/code>, sending the product ID and your API Bearer Authorization Token and nothing else, and only when you refresh, test a token, receive a webhook or a scheduled refresh runs. The visitor's browser calls <code>https:\/\/checkout.freemius.com\/geo.json<\/code> to work out which currency to show, sending nothing beyond the request itself, and caching the answer for an hour. If you turn on overlay checkout, the visitor's browser also loads the checkout script from <code>https:\/\/checkout.freemius.com\/js\/v1\/<\/code>; with the default hosted checkout it does not. Webhooks run the other way, inbound from Freemius to your site, and each one is verified by both a generated URL key and a body signature. Nothing about your visitors is ever sent to Freemius by your server. Freemius terms: https:\/\/freemius.com\/terms\/ . Freemius privacy policy: https:\/\/freemius.com\/privacy\/ .<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added: a release line, read from Freemius. The Freemius release block and [pflp_release] show the product's latest released version, what it requires and what it is tested up to, such as \"Version 1.4.0 \u00b7 Requires WordPress 6.2 and PHP 7.4 \u00b7 Tested up to 7.1\", with the release date as a fourth part you can add. Choose the parts and their order, the text between them and the date format. Only a released version shows, never a beta. A product Freemius has no releases for, such as an app, shows nothing at all, and the editor, the shortcode builder and the product's Status card each say why. A part Freemius holds nothing for is left out, and there is no fallback text, because a version typed as a fallback is exactly the copy that goes stale.<\/li>\n<li>Added: the money-back guarantee, read from Freemius. The Freemius money-back block and [pflp_moneyback] show the guarantee from the period and refund policy set in the Freemius dashboard, named the way Freemius names the policy, such as \"30-day satisfaction guarantee\" for its Moderate policy, or your own words with %d where the number of days goes. It shows nothing while Freemius holds no period, your own words included, so a page can never promise a guarantee the checkout does not give.<\/li>\n<li>Added: the product's Status card shows the release and the money-back period it holds, and Refresh now fetches both with the prices. The shortcode builder offers Release line, with a Show list of the four parts, and Money-back guarantee.<\/li>\n<li>Changed: a refresh now reads the latest release from Freemius as well as the prices, and the money-back period arrives with the prices. Each is kept on its own terms: if one read fails, what it last fetched stays and the other still updates. Refresh now says so when the prices came back and the release did not.<\/li>\n<li>Changed: the webhook this plugin registers with Freemius now also listens for a version being released, deployed, updated or deleted, and for a release being suspended, so a new release reaches your pages within seconds and a withdrawn one leaves them. A site updated from an earlier version brings its existing webhook up to date by itself, once, in the background; a site that had no webhook registered is not given one.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added: the look of every currency and billing cycle toggle can be set once, under Toggles on the Appearance tab: a Style, and a Colours grid with a Normal column and an Active one for the text and the background. Leave the style Unchanged and a colour empty and your theme's own stays, exactly as before. A toggle that names its own style in the editor or in a shortcode still keeps it, and so does one given a colour in the editor's own panel. Size and Gap stay on each toggle, because they are layout rather than look.<\/li>\n<li>Added: buy button colours, site-wide, for each kind of button. The Appearance tab has two Colours grids, Filled buttons and Outlined buttons, each with the same shape as the one on the Featured plan tab: the text, the border and the background that kind of button takes Normal and On hover. An outlined button's background is empty to start with, which is what makes it outlined; set one for a tint at rest or a fill under the pointer. Leave a colour empty and your theme's own stays, as before. A colour set on a button itself, in its block panel or its shortcode, still wins, and a featured card's button keeps its own. The two kinds are called Filled and Outlined everywhere now, including the block's own Styles panel. Each kind of button has a Border width too, and the Buttons settings are three groups now: Buttons for what both kinds share, then Filled buttons and Outlined buttons, each a Border width and a Colours grid. A button shows a border only when it has a width, set here, on the button itself, or by your theme, and 0 means none; a Border colour never creates a width, it colours a border the button already has, and an outlined button keeps its 2px outline while its width is empty. There is no width on hover, because a border that changed under the pointer would move the page, so the On hover Border colour paints the border the button already has. An outlined button's border follows its Text colour until you give Border one of its own. The featured card's button has the same Border width on the Featured plan tab; a width set on the button itself, in its own Border panel, wins over it, as it wins over the site-wide ones.<\/li>\n<li>Changed: an outlined buy button now takes your theme's own outline style wherever that style can reach it. Its 2px border and its padding were WordPress's own, fixed, and overrode the theme's, so it matched an outlined WordPress Button block on 2 of the 10 themes we test against; it matches on 5 now, Twenty Twenty-One, GeneratePress and Kadence joining Neve and Hello Elementor. WordPress's own outline look stays as the fallback wherever the theme's cannot reach: a theme that keeps its outline style for the core Buttons block, as Astra and Blocksy do, or that sets it through theme.json, as Twenty Twenty-Five and Twenty Twenty-Four do. On Astra the outlined button takes the theme's general button padding and border colour. The Border width and colours on the Appearance tab, and the block's own panels, still win over all of it.<\/li>\n<li>Changed: a filled buy button on a theme that styles no buttons is now padded the way WordPress pads its own button, so a filled and an outlined button side by side are the same size, in the Appearance tab's preview too. On a theme that styles its buttons, which all ten we test against do, nothing changes.<\/li>\n<li>Changed: a featured card's button with a Border colour and no Border width keeps the 1 pixel border it has had since 1.2.0, and its Border width now says so. That border came from the colour alone, and a colour no longer creates a width, so the first run after the update writes the width for you: 1, on the Featured plan tab and on every product's own Featured plan, wherever a Border colour is set and the width is empty. It runs once, and a width you have set, 0 included, is never changed.<\/li>\n<li>Changed: the Settings screen has a new Appearance tab, between Settings and Featured plan, with an entry of its own in the sidebar. Settings keeps what a price says and how it behaves: Display, Billing cycle and the Button label, saved with Save settings. How every toggle, card and buy button looks moved to Appearance, in Toggles, Cards, Buttons, Filled buttons and Outlined buttons, saved with Save appearance, with the live preview beside it. Saving either tab never changes a value on the other. Both are laid out like the rest of the plugin's screens, with their fields in one titled panel and the Save button at its foot rather than adrift below it. Every field that means the same thing on more than one screen is now called the same thing, every colour that can be left empty says Unchanged, and every number box is the same size.<\/li>\n<li>Added: the Appearance tab previews what you are setting. A live pricing card, two buy buttons, one filled and one outlined, and both toggles sit beside the fields and follow every change, drawn with your own theme and your own settings rather than a picture of them. Point at the card or a button to see its hover, or tick Hold hover to pin the hover on while you pick a colour. The figures are placeholders and no product is needed.<\/li>\n<li>Changed: the Freemius pricing card pattern now has 16 pixel corners in place of 8, which is the card as it looks on our own pricing pages. A card already on one of your pages keeps the corners it was given: a pattern is copied when you insert it, so changing it never reaches a page you have already built.<\/li>\n<li>Changed: a site installing this plugin for the first time now starts with the Card defaults filled in from the Freemius pricing card pattern: a 1 pixel #e0e0e0 border, a 16 pixel corner radius and 2rem of padding, with no background and no shadow. A card written as a shortcode then looks like a card inserted from the inserter with nothing to match up by hand. A site updating from an earlier version is not touched: its Card defaults start empty, so not one card on it moved. Empty fields now say what empty means, so a length left blank reads \"Theme's own\" rather than sitting there looking unset.<\/li>\n<li>Fixed: a pricing card written as a shortcode into a page builder's widget, alongside other content in the same widget, stretched to the full height of that widget and hung over whatever came next. Measured in an Elementor text widget: 425 pixels tall for 189 pixels of content, overlapping the section below by 236. A card now fills its container only when it is the whole of that container, which is what a row of cards is, so cards side by side are still all the same height with their buy buttons on one line.<\/li>\n<li>Added: the shortcode builder on a product's screen can now write a whole pricing card. Choose Pricing card as the element and the box gives you the six lines a card is made of, ready to paste into a page builder's shortcode widget or a classic editor: the card, the plan name, the price, the features list and the buy button. The four shortcodes inside name no product, plan or licence tier, because they follow the card, so changing the plan means changing one line. The Billing cycle choice is switched off for a card on purpose: naming a cycle fixes the price, and the billing toggle on the page would then leave that card behind. One card per plan, each in its own column of your page builder.<\/li>\n<li>Added: a second row of choices in the shortcode builder, so the settings you would otherwise have to look up are on the screen. A price can be written with a currency code instead of a symbol, and with the site-wide text after the figure. A buy button can be Filled or Outlined, and sized to the content or to a quarter, a half, three quarters or the full width. Either toggle can take any of the five looks. A billing cycle toggle can carry the saving badge. A features list can show each feature's description. A card can be forced to stand out or forced not to, and its buy button can be Outlined. Every one of them is a choice of words rather than a value to type, anything left at its default is left out of the shortcode, and the sentence under the box says what the choice changes.<\/li>\n<li>Added: Card defaults, under Cards on the Appearance tab: a border colour and width, a corner radius, padding, a background and a shadow for every pricing card on the site. They start empty, and empty means unchanged, so nothing on your site moves when you update: a card still takes whatever your theme gives a plain box until you fill a field. Anything set on a card itself always wins, whether it came from the block's own panels or from a shortcode attribute, including a background chosen from your theme's palette. The Cards section's Shadow colour now colours both a card's resting shadow and its hover shadow, because they are one card's shadow.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added: a Shadow colour beside every shadow setting - the buy button's hover shadow, a pricing card's hover shadow, and a featured card's own shadow, site-wide and per product. The shadow keeps the depth and softness of the preset you chose and only changes colour, so a brand tint reads as light falling on the page rather than as a border. Leave it empty and the shadow is the neutral black it has always been, so no site changes until you pick a colour. With the shadow set to None, or to Unchanged on a featured card, there is nothing to colour and the field says so.<\/li>\n<li>Added: two styles for a buy button, Fill and Outline, the same two the core Buttons block offers and under the same names, so a theme that styles an outline button styles this one. Pick it in the block's Styles panel, or write style=\"outline\" in the shortcode. Outline draws a 2px border in the surrounding text colour with the page showing through it; Fill is the solid button and stays the default, so nothing already published changes. Each style has its own hover colours under Buttons on the Settings screen - text, border and background, one column for Fill and one for Outline - because an outline button starts transparent and usually wants a different hover from a solid one. Measured on ten themes: the outline draws in the theme's own text colour and keeps the theme's own corners, from square on Twenty Twenty-One to fully round on GeneratePress and OceanWP.<\/li>\n<li>Fixed: a pricing card with no width set no longer overrides your theme's content width. It used to say \"no maximum\" and could render far wider than a normal block in the same place - on Twenty Twenty-Five, 1340px where a core Group was 645px. A card now caps itself only when you choose a width, and otherwise sits at whatever width your theme gives its content.<\/li>\n<li>Fixed: a buy button, price or toggle placed beside other blocks in a row no longer pushes them aside. Its wrapper used to claim the full width of whatever held it, so on a centred row the block next to it was shoved to the left edge. It now takes exactly the space a WordPress block of the same size would, and a toggle set to Centre still centres itself without moving its neighbours.<\/li>\n<li>Fixed: the billing cycle and currency toggles always show a keyboard focus ring, even on a theme that removes the one browsers draw. It appears for keyboard users only, never on a mouse click, and it is drawn in the surrounding text colour so it reads on a light background and a dark one. A theme that styles focus itself still wins, so there is only ever one ring.<\/li>\n<li>Fixed: the hover colours you set under Buttons now apply on every theme. On Twenty Twenty-One they did not, because that theme overrides the hover colours of every WordPress button and the plugin's rule was not specific enough to answer it.<\/li>\n<li>Fixed: the badge on a featured card is centred correctly on right-to-left sites. It was pushed half its own width off to one side, and on a narrow card that put part of it outside the card.<\/li>\n<li>Fixed: a featured card's Text colour now shows in the editor as well as on the site. The editor draws the card itself and had not been told about the new colour.<\/li>\n<li>Changed: a buy button now renders as a WordPress button, so your theme's button styling applies to it. It is built exactly the way WordPress builds its own Button block, which is what themes style, so on most themes a buy button matches the rest of the site's buttons with nothing set. Measured on ten themes: on Astra, OceanWP, GeneratePress and Twenty Twenty-One the buy button now takes the theme's own colour and corners instead of WordPress's plain grey, and on Astra and OceanWP it is no longer underlined like a link. Anything you had set in the button's own panel, or under Buttons on the Settings screen, still wins.<\/li>\n<li>Changed: an inserted pricing card now sizes its price with X-Large in place of XX-Large. XX-Large is not a size WordPress itself defines, so on most themes the price fell back to body size and came out smaller than the plan name above it - on seven of the ten themes tested. Cards already on your pages keep the size they were given.<\/li>\n<li>Added: a Text colour for a featured card, beside its Background on the Featured plan tab and on a product's own override. Left empty the card keeps its own text colour, as every field there does. Set it whenever you set a background: on a dark theme a light background would otherwise keep the light text of the page around it.<\/li>\n<li>Fixed: the badge on a featured card no longer hangs over the sides of a card narrower than the badge. It is capped to the card and wraps to a second line instead.<\/li>\n<li>Fixed: a pricing card's features list now keeps its own spacing on themes that indent every list in the content area. On Astra and Kadence a card's features were indented by 20px and 34px with no bullets to make room for, and on Astra and Neve the list carried the theme's own top and bottom margin instead of the card's spacing. A features list written on its own outside a card is unchanged, because there it is part of your page and your theme should style it.<\/li>\n<li>Fixed: the five billing-cycle and currency toggle styles, and a pricing card's own width, now hold on themes that style every button or constrain everything on the page to one width. A toggle set to Pills, Buttons, Tabs, Text or Switch keeps its corners and its colours on a theme that paints every button on the site, and a card set to a width is that width on a theme that gives the page a content width of its own. Measured on ten themes: Twenty Twenty-Five, Twenty Twenty-Four, Twenty Twenty-One, Astra, GeneratePress, Kadence, Blocksy, OceanWP, Neve and Hello Elementor. A toggle left on the plain style is untouched, because there your theme is meant to decide.<\/li>\n<li>Added: a pricing card now sets the plan for everything in it. Choose the product, the plan and the licence tier once on the card and the plan name, the price, the description, the features and the buy button inside it all follow. A block that names a plan of its own keeps it, so nothing you have already published moves. <code>[pflp_card product=\"\" plan=\"\" licenses=\"\"]<\/code> does the same for a shortcode.<\/li>\n<li>Added: the plan you mark featured in the Freemius dashboard now marks its own card. Its look is set once on a Featured plan tab of its own under Settings, in three groups - Card (border, background, shadow, lift), Badge (position, words, size, an optional icon from nine built in, two colours) and Button (text, border and background, at rest and under the pointer) - and can be overridden for one product on that product's screen, with a real pricing card previewing the result beside the settings in both places. Every colour is WordPress's own colour picker. Leave a colour empty and being featured does not change it: the card keeps the border, background and button colours it already has. The badge is the one thing with no colour of its own to keep, so left empty it is filled with the card's text colour and its words take the card's background, which matches any site. A card can also be told always or never to stand out. A product with only one paid plan is never marked, which is Freemius's own rule.<\/li>\n<li>Added: a hover lift and shadow for pricing cards, under Cards on the Settings screen. Every card rises and deepens under the pointer by as much as you choose: 0 to 6 pixels, and none, soft or strong. A card already raised for being featured rises further rather than dropping back, and a featured card keeps its own shadow at rest and takes the hover one while the pointer is on it. On screens 1025px and wider only, so a tapped card on a phone is never left lifted. Off to start with.<\/li>\n<li>Changed: a plan name, a price, a features list and a toggle inside a pricing card each take a line of their own now, with no alignment set on any of them, which is what a pricing card looks like. Left, Centre and Right still decide where on the line one sits. Outside a card nothing changes: a price written into a sentence is still part of the sentence.<\/li>\n<li>Changed: the hover effect on buy buttons is now two settings you can read - a lift in pixels, 0 to 6, and a shadow of None, Soft or Strong - in place of the single on or off choice. A site that had the lift switched on keeps exactly the look it had, as a lift of 1 with a soft shadow. Still on pointer screens only, so a tapped button on a phone never stays lifted. Hover colours, text, border and background, can be set once for every button, so buy buttons hover the way the rest of the site's buttons do; a featured card's button keeps its own.<\/li>\n<li>Changed: a pricing card you insert in the editor now fills in its own plan, with the plan it would have fallen back to anyway, so the sidebar names it instead of saying Default. Cards already on your pages are never touched, and a shortcode with no plan still resolves one when the page renders.<\/li>\n<li>Added: a Freemius pricing card block, and <code>[pflp_card]<\/code> for a shortcode. The card is the box: a border, a radius, padding, a width, a background and the space between the things inside it, all from the block's own panels, on every theme. Insert one and it arrives holding the plan name, the price, the description, the features and a buy button, each of them still its own block and still live. Cards in a row are the same height, and whatever block is last in a card sits at the bottom, so a row of buttons lines up whatever the copy above them. A price, plan text, features list or toggle placed as a block now sits on its own line on every theme; as a shortcode it stays inline unless aligned.<\/li>\n<li>Changed: the Freemius pricing card pattern is that block now, in place of the plain group it used to be, so the card you insert is one you can style. Pages already carrying the old pattern are untouched.<\/li>\n<li>Fixed: a billing cycle or currency toggle wider than its container (three cycles with a saving badge inside a narrow pricing card, or on a phone) overflowed it. The toggle now stays inside its container and wraps onto a second line when it must.<\/li>\n<li>Fixed: the border settings (colour, width, style, radius) and the text colour now show on the plugin's blocks as soon as the Styles tab opens, on every theme, including themes that leave WordPress's appearance tools off (most classic themes, and some block themes), where WordPress keeps borders, padding and margin off for every block. Before, they sat hidden behind the panel's menu, and on those themes the panel did not appear at all. On such a theme the panel is headed Shadow; the border settings are inside it.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: a billing cycle toggle, as a block and as <code>[pflp_cycle]<\/code>. Every price and buy button on the page follows it, in the visitor's currency, with an optional saving badge on the yearly option worked out from the prices themselves.<\/li>\n<li>Added: plan text as a block and as <code>[pflp_plan]<\/code> (the plan's title, description or trial period) and the plan's feature list as a block and as <code>[pflp_features]<\/code>, all read from Freemius with the prices.<\/li>\n<li>Added: a text after the price (<code>\/month<\/code>, <code>\/year<\/code>, <code>one-time<\/code>, set once under Settings and changed per price) that swaps with the cycle; a price or button on a plan that does not sell the chosen cycle says why (\"Yearly only\") instead of showing a figure, or hides, or shows your own text.<\/li>\n<li>Added: five styles for both toggles (pills, buttons, tabs, text, switch), active option colours, gap and size; border and shadow panels on the price and plan text blocks, shadow on the button; a Freemius pricing card pattern in the block inserter. The five toggle styles now hold their shape on a theme that forces a corner radius on every button.<\/li>\n<li>Changed: the product screen is one screen in two columns: the product's two fields with the secret key shown as a state, a shortcode builder that writes any shortcode from four dropdowns and says what it renders, the status as a list, and the reference moved to the documentation.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed: a product secret key containing a <code>&lt;<\/code>, or a <code>%<\/code> followed by two hex digits, was altered on the way into storage, so every webhook delivery for that product failed its signature check and Freemius marked the events as errors. Keys are now stored exactly as Freemius issues them. If a product's Status line has never shown a delivery, save the product once after updating and the key is refetched.<\/li>\n<li>Added: a delivery that fails its signature check refetches the product secret key in the background, and the daily job refreshes every product's key, so a key regenerated in the Freemius dashboard is picked up without a visit to the product screen.<\/li>\n<li>Fixed: the webhook is registered only once the product secret key is on file, fetching it first if a product was added without one, so a registration can never point Freemius at deliveries this site cannot verify.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed: deleting an older copy of the plugin from the Plugins screen while the renamed copy is active no longer removes the products, tokens and prices the active copy is using.<\/li>\n<li>Changed: the plugin is now called PlugUpp Live Pricing for Freemius, with the slug and text domain plugupp-live-pricing-for-freemius, at the WordPress.org review team's request that a third-party name be framed as an integration. Nothing about how it works changes; settings, stored prices and webhooks carry over, because they are filed under the pflp prefix, not the slug.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed: a border set in the buy button block's border panel now draws. WordPress zeroes the border width on every button and never writes a border style, so the panel's width and colour rendered as no border at all.<\/li>\n<li>Added: a Width setting on the buy button, the 25, 50, 75 and 100 percent that the core Buttons block offers, so a button can span a pricing card. <code>[pflp_button width=\"100\"]<\/code> does the same.<\/li>\n<li>Added: a Hover effect option under Buttons on the Settings screen. Lift raises every button 1px under the pointer with a soft shadow of its own colour, on screens 1025px and wider only, so a touch screen never leaves a tapped button lifted. Off by default.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Changed: the block's Plan dropdown offers only plans that sell something. A plan with no price has no figure to show and no checkout to link to, so nothing could render from it; the product's own screen says so, and the free tier of a pricing table is an ordinary button linking to the download page.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added: only the product ID and the API Bearer Authorization Token are typed. The product secret key is read from Freemius with the token on every save, so there is no third field.<\/li>\n<li>Added: the webhook registers itself with Freemius when a product is saved with a working token, is kept up to date on every save, and is removed when the product is deleted. The product's Status list says so; the URL and the six events sit behind Show webhook URL for pasting by hand if that cannot happen. A product for which Freemius has not yet enabled webhooks (it reserves them until a product is actively selling) is saved with a warning that says so, and the token is not blamed.<\/li>\n<li>Changed: the product's name comes from Freemius with the prices and is refreshed with every fetch and every save, and the Label field is gone. The Products list, the product's own screen, the Test token result and the block editor's product dropdown all show the name the Freemius dashboard gives it, and <code>product=\"...\"<\/code> on a shortcode takes the product ID, its Freemius slug or its name.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release. Freemius price, Freemius buy button and Freemius currency toggle blocks, the matching <code>[pflp_price]<\/code>, <code>[pflp_button]<\/code> and <code>[pflp_currency]<\/code> shortcodes rendering through the same code, prices fetched from the Freemius API and stored on the site, webhook and scheduled refreshes, a visitor currency toggle with geo detection, currency-aware checkout links with an optional overlay, and a Freemius Pricing admin menu with a products list, a per-product screen carrying the webhook URL and a Shortcodes section with a ready-made price and button shortcode for every plan and pricing row, site-wide settings and a log. The blocks fill their plan, licence tier and billing cycle dropdowns from the stored rows, preview through the server so the editor shows what the page renders, carry the editor's own colour, typography, spacing and border panels, align all three from the block toolbar, and convert to and from a shortcode in one click.<\/li>\n<\/ul>","raw_excerpt":"Freemius pricing, live on your own pages with blocks or shortcodes, in each visitor&#039;s currency, refreshed so it never goes stale.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/368891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=368891"}],"author":[{"embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/plugupp"}],"wp:attachment":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=368891"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=368891"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=368891"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=368891"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=368891"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=368891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}