{"id":345995,"date":"2026-07-31T06:15:48","date_gmt":"2026-07-31T06:15:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/modern-price-table\/"},"modified":"2026-07-31T06:15:40","modified_gmt":"2026-07-31T06:15:40","slug":"tabelio-price-table","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tabelio-price-table\/","author":17452584,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.5","stable_tag":"1.4.5","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Tabelio Price Table \u2013 Pricing Tables for Block Editor & Page Builders","header_author":"Arman Basir","header_description":"Build responsive pricing tables with support for Gutenberg (block) and Elementor (widget), from a single shared data source.","assets_banners_color":"37363d","last_updated":"2026-07-31 06:15:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/armanbasir.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":23,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.4":{"tag":"1.4.4","author":"armanbasir","date":"2026-07-31 06:15:40"},"1.4.5":{"tag":"1.4.5","author":"armanbasir","date":"2026-07-31 06:15:40"}},"upgrade_notice":{"1.4.5":"<p>WordPress.org Plugin Check fixes: the editor-preview CSS is now generated\nthrough wp_add_inline_style()\/wp_print_styles() instead of a hand-built\n tag, and the shortcode now consistently uses the &quot;tblio&quot; prefix\n([tblio_table], previously [tabelio_table]).<\/p>","1.4.4":"<p>Display name updated to &quot;Tabelio Price Table \u2013 Pricing Tables for Block\nEditor &amp; Page Builders&quot; (plugin header + readme title only; slug, text\ndomain, and all internal identifiers are unchanged).<\/p>","1.4.3":"<p>Plugin renamed from &quot;Priceloom&quot; to &quot;Tabelio Price Table&quot; (new slug:\ntabelio-price-table), per the requester&#039;s preference. All internal\nfunction\/class\/CSS prefixes changed too; no functional changes.<\/p>","1.4.2":"<p>WordPress.org Plugin Check fixes: CSS is now properly enqueued via\nwp_enqueue_style() on normal page views (inline output is reserved only\nfor editor preview requests that have no ), and REST API endpoints\nnow use object-specific capability checks (edit_post\/delete_post\/\npublish_posts) instead of a single broad check.<\/p>","1.4.1":"<p>Plugin renamed from &quot;Modern Price Table&quot; to &quot;Tabelio Price Table&quot; (new slug:\ntabelio-price-table), for WordPress.org naming-distinctiveness requirements. All\ninternal function\/class\/CSS prefixes changed too; no functional changes.<\/p>","1.4.0":"<p>Adds 5 more design presets: Luxury, Sunset, Editorial, Ocean, and Frame \u2014\n20 presets in total, all existing ones kept unchanged.<\/p>","1.3.0":"<p>&quot;Custom Here&quot; mode is back in the Gutenberg block (matching Elementor) \u2014\nbuild a table directly in the block without a saved table, now built on\ntop of all the stability fixes made since it was first removed.<\/p>","1.2.0":"<p>Adds 5 new design presets: Retro, Corporate, Pastel, Monochrome, and\nMaterial \u2014 15 presets in total, all existing ones kept unchanged.<\/p>","1.1.1":"<p>Fixes pricing tables sometimes losing all their styling (appearing as\nplain unstyled HTML) on published pages, most noticeable with Elementor&#039;s\n&quot;Custom&quot; mode.<\/p>","1.1.0":"<p>Major update: duplicate\/import\/export tables, searchable &amp; paginated admin\nlist, drag-and-drop column reordering, WooCommerce product linking, and\nFont Color\/Column Gap controls now also in Elementor.<\/p>","1.0.11":"<p>Security fix: the &quot;delete table&quot; endpoint no longer accepts arbitrary post\nIDs. Also adds proper keyboard\/screen-reader state to the pricing toggle\nand a standard uninstall.php.<\/p>","1.0.10":"<p>Minor UI polish in the Gutenberg Columns &amp; Features editor: nicer &quot;Reset to\ndefault&quot; button, more breathing room around &quot;Add Column&quot; and &quot;Save Now&quot;.<\/p>","1.0.9":"<p>Adds a separate &quot;Font Color (Popular Column)&quot; control in Gutenberg and the\nadmin form builder.<\/p>","1.0.8":"<p>Fixes &quot;Space Between Columns&quot; not working (was hardcoded on the Toggle\nlayout and overridden by the &quot;Ribbon&quot; preset). The &quot;Ribbon&quot; preset has been\nremoved.<\/p>","1.0.7":"<p>Adds Font Color and Space Between Columns controls in the Gutenberg Design\npanel and the admin form builder.<\/p>","1.0.6":"<p>The Monthly\/Yearly toggle switch is now a clickable pill-style segmented\ncontrol instead of a small on\/off switch, across all presets.<\/p>","1.0.5":"<p>Adds a new &quot;Earthy&quot; design preset with warm serif typography, sage\/terracotta\ntones, and circular checkmarks.<\/p>","1.0.4":"<p>Adds a new &quot;Ribbon&quot; design preset with a side price ribbon and\nauto-alternating accent colors per column.<\/p>","1.0.3":"<p>Adds a &quot;Settings&quot; link on the Plugins list page for quicker access to the\nadmin page.<\/p>","1.0.2":"<p>Bumps the plugin version to force browsers to fetch the latest Gutenberg block\nscript (fixes new design presets not showing up in the block editor).<\/p>","1.0.1":"<p>Numerous stability fixes (auto-save, data persistence, responsive layouts) plus a\nfull set of Style controls in Elementor. Upgrading from 1.0.0 is recommended.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3629439,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3629439,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3629439,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3629439,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.4","1.4.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3629502,"resolution":"1","location":"assets","locale":"","width":2879,"height":1361},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3629502,"resolution":"10","location":"assets","locale":"","width":2879,"height":1336},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3629502,"resolution":"11","location":"assets","locale":"","width":2880,"height":1284},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3629502,"resolution":"12","location":"assets","locale":"","width":2875,"height":1373},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3629502,"resolution":"13","location":"assets","locale":"","width":2879,"height":1328},"screenshot-14.png":{"filename":"screenshot-14.png","revision":3629502,"resolution":"14","location":"assets","locale":"","width":2879,"height":1385},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3629502,"resolution":"2","location":"assets","locale":"","width":2880,"height":1344},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3629502,"resolution":"3","location":"assets","locale":"","width":2879,"height":1313},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3629502,"resolution":"4","location":"assets","locale":"","width":2879,"height":1302},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3629502,"resolution":"5","location":"assets","locale":"","width":2879,"height":1324},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3629502,"resolution":"6","location":"assets","locale":"","width":2879,"height":1305},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3629502,"resolution":"7","location":"assets","locale":"","width":2880,"height":1340},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3629502,"resolution":"8","location":"assets","locale":"","width":2879,"height":1331},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3629502,"resolution":"9","location":"assets","locale":"","width":2879,"height":1346}},"screenshots":{"1":"The \"Tabelio Price Table\" admin page \u2014 list of saved pricing tables.","2":"The form builder \u2014 configure plans, pricing, features, and design presets.","3":"The \"Tabelio Price Table\" block in the Gutenberg editor with live preview.","4":"The \"Tabelio Price Table\" widget in the Elementor editor with the full Style tab.","5":"Frontend examples: Simple, Comparison, and Monthly\/Yearly Toggle layouts."}},"plugin_section":[],"plugin_tags":[1220,76538,148076,4394,4391],"plugin_category":[],"plugin_contributors":[272899],"plugin_business_model":[],"class_list":["post-345995","plugin","type-plugin","status-publish","hentry","plugin_tags-block","plugin_tags-elementor","plugin_tags-gutenberg","plugin_tags-pricing","plugin_tags-pricing-table","plugin_contributors-armanbasir","plugin_committers-armanbasir"],"banners":{"banner":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/banner-772x250.png?rev=3629439","banner_2x":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/banner-1544x500.png?rev=3629439","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/icon-128x128.png?rev=3629439","icon_2x":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/icon-256x256.png?rev=3629439","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-1.png?rev=3629502","caption":"The \"Tabelio Price Table\" admin page \u2014 list of saved pricing tables."},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-2.png?rev=3629502","caption":"The form builder \u2014 configure plans, pricing, features, and design presets."},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-3.png?rev=3629502","caption":"The \"Tabelio Price Table\" block in the Gutenberg editor with live preview."},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-4.png?rev=3629502","caption":"The \"Tabelio Price Table\" widget in the Elementor editor with the full Style tab."},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-5.png?rev=3629502","caption":"Frontend examples: Simple, Comparison, and Monthly\/Yearly Toggle layouts."},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-6.png?rev=3629502","caption":""},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-7.png?rev=3629502","caption":""},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-8.png?rev=3629502","caption":""},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-9.png?rev=3629502","caption":""},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-10.png?rev=3629502","caption":""},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-11.png?rev=3629502","caption":""},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-12.png?rev=3629502","caption":""},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-13.png?rev=3629502","caption":""},{"src":"https:\/\/ps.w.org\/tabelio-price-table\/assets\/screenshot-14.png?rev=3629502","caption":""}],"raw_content":"<!--section=description-->\n<p>Tabelio Price Table lets you create a pricing table (simple, comparison, or monthly\/yearly\ntoggle) once, then display it anywhere: the block editor (Gutenberg), Elementor, or the\n    [tblio_table id=\"123\"] shortcode for any other theme or page builder.<\/p>\n\n<p>Key features:\n* Layouts: simple, comparison, monthly\/yearly toggle\n* \"Popular\" badge, custom CTA button, checkmark\/cross feature list\n* Customizable color presets and border radius\n* One shared rendering engine for every integration (always consistent output)\n* Internal REST API for managing table data\n* Edit design and columns\/features directly inside the Gutenberg block panel or the\n  Elementor widget \u2014 no need to leave the editor\n* Elementor widget supports two modes: a shared \"Saved Table\" (reusable across the site)\n  or \"Custom Here\" (content stored directly in that widget instance)\n* Duplicate, export (.json), and import pricing tables from the admin page\n* Searchable, paginated admin table list\n* Drag-and-drop column reordering\n* Optional WooCommerce integration \u2014 link a plan to a product and its price stays in sync\n* Extensive Elementor Style tab: typography, colors, borders, box-shadow, and spacing\n  for the card, title, price, description, feature list, CTA button (normal\/hover), and badge<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>tabelio-price-table<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin from the 'Plugins' menu in WordPress.<\/li>\n<li>Open the 'Tabelio Price Table' menu in the admin sidebar to create your first table.<\/li>\n<li>Add the \"Tabelio Price Table\" block in Gutenberg, or the \"Tabelio Price Table\"\nwidget in Elementor.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20elementor%20to%20be%20installed%3F\"><h3>Does this plugin require Elementor to be installed?<\/h3><\/dt>\n<dd><p>No. Elementor support is optional. The Elementor widget only appears if Elementor\nPage Builder is active on your site. Without Elementor, you can still use the\nGutenberg block or the <code>[tblio_table id=\"123\"]<\/code> shortcode in any theme\nor page builder.<\/p><\/dd>\n<dt id=\"how%20do%20i%20display%20a%20pricing%20table%20outside%20of%20gutenberg%2Felementor%20%28e.g.%20in%20a%20theme%20file%29%3F\"><h3>How do I display a pricing table outside of Gutenberg\/Elementor (e.g. in a theme file)?<\/h3><\/dt>\n<dd><p>Use the shortcode <code>[tblio_table id=\"123\"]<\/code>, or call it directly from PHP:\n    <\/p><\/dd>\n<dt id=\"do%20i%20need%20node.js%20or%20a%20build%20step%20to%20use%20this%20plugin%3F\"><h3>Do I need Node.js or a build step to use this plugin?<\/h3><\/dt>\n<dd><p>No. The Gutenberg block is written as plain JavaScript (no JSX\/build step required),\nso the plugin works immediately once activated.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20%22saved%20table%22%20and%20%22custom%20here%22%20mode%3F\"><h3>What's the difference between \"Saved Table\" and \"Custom Here\" mode?<\/h3><\/dt>\n<dd><p>Available in both the Gutenberg block and the Elementor widget. \"Saved Table\" uses\none table that can be reused across many pages\/blocks\/widgets at once (edit once,\nupdates everywhere). \"Custom Here\" stores the table content directly inside that\nspecific block\/widget instance, for a single placement only.<\/p><\/dd>\n<dt id=\"is%20the%20table%20data%20deleted%20if%20i%20deactivate%20the%20plugin%3F\"><h3>Is the table data deleted if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>No. Table data (stored as a <code>tblio_table<\/code> custom post type) remains in the database\nwhen the plugin is deactivated temporarily. Data is only removed if you delete a\ntable manually from the admin page.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>Fixed (WordPress.org Plugin Check): the CSS used for editor-preview\ncontexts (Gutenberg ServerSideRender, Elementor editor\/preview AJAX) is\nno longer built as a hand-written <code>&lt;style&gt;<\/code> tag string. It's now\nregistered and attached via <code>wp_register_style()<\/code> \/ <code>wp_add_inline_style()<\/code>\n\/ <code>wp_enqueue_style()<\/code> and printed with <code>wp_print_styles()<\/code> \u2014 the actual\nmarkup is generated entirely by WordPress's own APIs. Normal front-end\npage views were already unaffected, since they use a plain enqueued\nstylesheet (added in 1.4.2).<\/li>\n<li>Fixed (WordPress.org Plugin Check): the shortcode was named\n[tabelio_table], which didn't match the plugin's \"tblio\" prefix used\neverywhere else. Renamed to [tblio_table] for consistency.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Updated the display name (plugin header \"Plugin Name\" and the readme.txt\ntitle) to \"Tabelio Price Table \u2013 Pricing Tables for Block Editor &amp; Page\nBuilders\" \u2014 a descriptive tagline without naming specific third-party\nproducts\/trademarks in the title itself (compatibility with Gutenberg,\nElementor, and WooCommerce is still mentioned in the description, where\nthat's standard practice). The slug, text domain, shortcode, and all\ninternal identifiers are unchanged from 1.4.3.<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Renamed the plugin from \"Priceloom\" to \"Tabelio Price Table\" (slug changed\nfrom priceloom to tabelio-price-table). All internal function, class,\nconstant, and CSS prefixes were updated from \"ploom\"\/\"PLOOM_\" to\n\"tblio\"\/\"TBLIO_\" to match. The shortcode changed from [priceloom_table]\nto [tblio_table]. No functional changes \u2014 existing saved tables and\nsettings are unaffected.<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Fixed (WordPress.org Plugin Check): the pricing table CSS is now enqueued\nthrough the standard wp_enqueue_style() API on normal front-end page\nviews, instead of always being output as a raw inline <code>&lt;style&gt;<\/code> tag.\nThe inline <code>&lt;style&gt;<\/code> output is now reserved specifically for the two\ncontexts that have no <code>&lt;head&gt;<\/code> to enqueue into \u2014 the Gutenberg block\neditor's ServerSideRender request and Elementor's editor\/preview AJAX\nrendering \u2014 where it remains necessary.<\/li>\n<li>Fixed (WordPress.org Plugin Check): REST API endpoints for reading,\nupdating, and deleting a specific pricing table now check the\nobject-specific <code>edit_post<\/code>\/<code>delete_post<\/code> capability for that table's ID,\nand creating\/duplicating\/importing a table now checks <code>publish_posts<\/code>,\ninstead of all endpoints sharing one broad <code>edit_posts<\/code> check.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Renamed the plugin from \"Modern Price Table\" to \"Tabelio Price Table\" (slug changed\nfrom modern-price-table to tabelio-price-table), per a WordPress.org naming-review\nrequest asking for a more distinctive name\/slug not easily confused with\nthe many similarly-named \"[word] Pricing Table\" plugins already in the\ndirectory. All internal function, class, constant, and CSS prefixes were\nupdated from \"mptbl\"\/\"MPTBL_\" to \"tblio\"\/\"TBLIO_\" to match. The shortcode\nchanged from [mdrn_price_table] to [tblio_table]. No functional\nchanges \u2014 existing saved tables and settings are unaffected.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added 5 more design presets (all existing presets unchanged):\n\n<ul>\n<li>\"Luxury\" \u2014 black background with gold accents and serif typography<\/li>\n<li>\"Sunset\" \u2014 warm full-card gradient (orange to pink)<\/li>\n<li>\"Editorial\" \u2014 newspaper\/print-style with a serif heading and thin rules<\/li>\n<li>\"Ocean\" \u2014 deep teal\/blue gradient card<\/li>\n<li>\"Frame\" \u2014 ultra-minimal thin outline with generous whitespace<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added: \"Custom Here\" mode is back in the Gutenberg block, matching what\nElementor already had \u2014 build a table's design and columns directly in\nthe block's own attributes, without needing a shared saved table. This\nmode was removed early on due to stability issues; it's been rebuilt on\ntop of the fixes made since (deep-clone-safe column mutation, the\ncollapse-safe Columns &amp; Features panel, drag-and-drop reordering,\nWooCommerce product linking, currency quick-pick, and the always-inline\nCSS fix), so it should be considerably more reliable this time.<\/li>\n<li>Fixed: a couple of leftover non-English default values (currency symbol,\nperiod, and CTA text for newly added columns in Gutenberg) were missed\nduring the earlier full English translation pass.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added 5 new design presets (all existing presets unchanged):\n\n<ul>\n<li>\"Retro\" \u2014 vintage warm palette with a bold offset border<\/li>\n<li>\"Corporate\" \u2014 clean, professional look for B2B\/SaaS<\/li>\n<li>\"Pastel\" \u2014 soft candy colors with extra-rounded corners<\/li>\n<li>\"Monochrome\" \u2014 pure black &amp; white, sharp square corners<\/li>\n<li>\"Material\" \u2014 Google Material-style elevation shadow with hover lift<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed a serious bug: pricing tables would sometimes render with no\nstyling at all (plain unstyled HTML) on the live site. The CSS was only\nbeing inlined once per request as an optimization to avoid duplicates\nwhen multiple tables share a page \u2014 but Elementor (and some SEO\/related\ncontent plugins) can render a widget's content more than once within a\nsingle request for internal purposes, and a discarded earlier render\npass was consuming that \"print once\" opportunity before the real,\nvisible render happened. The CSS is now always printed with each table,\nwhich reliably fixes the issue at the cost of a few extra KB when\nseveral tables appear on the same page.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: \"Duplicate\" action on the admin table list \u2014 creates a full copy\nof an existing table (\"{Title} (Copy)\").<\/li>\n<li>Added: \"Export\" (downloads a table as a <code>.json<\/code> file) and \"Import\"\n(uploads a previously exported <code>.json<\/code> file to create a new table) on\nthe admin page.<\/li>\n<li>Added: search box and pagination on the admin table list \u2014 the list no\nlonger loads every table at once, and can now be filtered by name.<\/li>\n<li>Added: drag-and-drop column reordering (drag the \u283f\/\u2725 handle) in both\nthe admin form builder and the Gutenberg Columns &amp; Features panel.<\/li>\n<li>Added: a currency quick-pick (datalist suggestions: $, \u20ac, \u00a3, \u00a5, \u20b9, Rp,\nand more) on the Currency field, still fully free-text.<\/li>\n<li>Added: WooCommerce product linking. In the admin panel and Gutenberg,\na searchable picker fills in a plan's title\/price from a WooCommerce\nproduct (one-time fill). In Elementor's \"Custom\" mode, a \"Link\nWooCommerce Product\" dropdown pulls the title\/price live from the\nproduct on every page load, so price changes in WooCommerce stay in\nsync automatically. Only shown\/active when WooCommerce is installed.<\/li>\n<li>Added: \"Font Color\", \"Font Color (Popular Column)\", and \"Space Between\nColumns\" controls in the Elementor widget (both \"Saved Table\" and\n\"Custom\" modes), matching what was already available in Gutenberg.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Fixed a security issue: the REST \"delete table\" endpoint did not verify\nthat the given ID was actually a pricing table before deleting it,\nmeaning a crafted request could delete an unrelated post\/page. It now\nchecks the post type first, matching the other endpoints.<\/li>\n<li>Fixed: the Monthly\/Yearly toggle buttons lost their <code>aria-pressed<\/code> state\nwhen the switch was redesigned into a pill control, making the current\nselection unclear to screen readers. Restored and kept in sync via JS.<\/li>\n<li>Added: a standard <code>uninstall.php<\/code> (data is intentionally preserved,\ndocumented inline \u2014 this plugin doesn't use the WordPress Options API).<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Polish: \"Reset to default\" color buttons redesigned as small pill buttons\nwith a hover state, instead of plain text links.<\/li>\n<li>Polish: more spacing around the \"Add Plan\/Column\" button and the\n\"Save Now\" button in the Gutenberg Columns &amp; Features panel, and the\npanel content no longer sits flush against the sidebar edges.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Added: \"Font Color (Popular Column)\" \u2014 a separate font color override that\nonly applies to the column marked \"Popular\"\/featured, in both Gutenberg's\nDesign panel and the admin form builder. Falls back to the general \"Font\nColor\" setting (or the preset default) when left unset.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Removed: the \"Ribbon\" design preset (per request).<\/li>\n<li>Fixed: \"Space Between Columns\" had no effect \u2014 the \"Ribbon\" preset\nhardcoded its own gap value that always overrode the setting, and\nseparately the \"Toggle\" layout's card wrapper had its own hardcoded\n24px gap unrelated to the setting. Both are now fixed to use the\nconfigurable spacing value.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Added: \"Font Color\" and \"Space Between Columns\" controls in the Gutenberg\nblock's Design panel and the admin form builder (Elementor's own Style tab\nalready covers typography per-element in more detail). Font color defaults\nto \"use default\" (no override) so existing tables are unaffected.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Changed: the \"Monthly\/Yearly Toggle\" layout switch is now a clickable\npill-style segmented control (click \"Monthly\" or \"Annual\" directly) instead\nof a small round on\/off switch. Applies to all design presets; the \"Earthy\"\npreset gets a matching cream-toned pill background.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Added: an 11th design preset, \"Earthy\" \u2014 warm serif typography for the title\nand price, a sage-green featured card background, circular checkmark icons\nfor included features, and an arrow (\u2192) appended to CTA buttons.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Added: a 10th design preset, \"Ribbon\" \u2014 a vertical side price ribbon that\noverlaps the card, with the plan title, badge-excluded color, and CTA button\nall tinted to match. Colors automatically alternate (red \/ navy \/ green) per\ncolumn, cycling every 3 columns.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added: a \"Settings\" link next to Activate\/Deactivate on the Plugins list page,\nlinking directly to the \"Tabelio Price Table\" admin page.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: newly added design presets (Glass, Neon, Soft, Outline) were not showing\nup in the Gutenberg block's Design panel because the plugin version number\n(used as a cache-busting query string on the block's JS file) hadn't changed,\nso browsers kept serving a stale cached copy of index.js. The version bump\nforces a fresh fetch.<\/li>\n<li>Also translated all remaining internal code comments (PHP\/JS\/CSS docblocks)\nto English, for WordPress.org submission.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Renamed plugin to \"Tabelio Price Table\" and updated all internal function\/class\/CSS\nprefixes from \"wppt\"\/\"WPPT_\" (4 characters \u2014 too short per WordPress.org guidelines)\nto \"tblio\"\/\"TBLIO_\" (5+ characters) to avoid prefix collisions with other plugins.<\/li>\n<li>Added: \"Saved Table\" vs \"Custom Here\" mode in the Elementor widget. Design\n(layout\/preset\/color\/radius) and content (columns\/features) can now be edited\ndirectly in the editor, without switching to the admin page.<\/li>\n<li>Added: a \"+ Add New Table\" button directly in the Elementor widget (Saved Table\nmode), matching the capability already available in the Gutenberg block \u2014 create\na new table without ever leaving the editor.<\/li>\n<li>Added: expanded Elementor Style tab \u2014 Typography, color, border, box-shadow, and\nspacing controls for the card, title, price, description, feature list, CTA button\n(Normal\/Hover), and badge. The \"Add New Table\" button was also redesigned with an\nicon and gradient.<\/li>\n<li>Fixed: the \"Columns &amp; Features\" panel in Gutenberg would sometimes appear empty\nafter being reopened (the native PanelBody unmounts its contents on collapse) \u2014\nfixed with a callback ref, then replaced entirely with a custom collapsible panel\nso the columns editor container is never lost on show\/hide.<\/li>\n<li>Fixed: \"Saved Table\" mode in Gutenberg now auto-saves (debounced ~900ms) whenever\na column\/feature is edited \u2014 previously changes were only persisted after manually\nclicking a save button, which could leave a published page showing an empty table\nif that click was missed.<\/li>\n<li>Fixed a major bug: the \"Monthly\/Yearly Toggle\" layout was loading the wrong template\nfile (the file name didn't match the layout name), silently falling back without\nany error and making the table appear empty. Replaced with an explicit file mapping.<\/li>\n<li>Added: a \"Verify Saved\" button in Gutenberg \u2014 checks directly against the server\nwhether the table data has actually been persisted, instead of assuming based on\nthe editor's current state.<\/li>\n<li>Fixed a serious bug: the \"Custom Here\" mode mutated the columns array directly from\nthe block attribute (which can share a reference with the block's default object),\nrisking data corruption\/loss and triggering an \"invalid content\" warning in\nGutenberg. Replaced with a deep-clone before editing.<\/li>\n<li>Fixed: added error handling and a loading indicator while fetching table details in\nthe Gutenberg panel, so a failed request no longer silently hides the Design panel.<\/li>\n<li>The \"Add Feature\"\/\"Add Column\"\/\"Remove\" buttons in Gutenberg now use the native\n  components-button classes for visual consistency with the WordPress editor.<\/li>\n<li>Simplified: \"Custom Here\" mode was removed from the Gutenberg block (it was the main\nsource of instability) \u2014 Gutenberg now only has \"Saved Table\" mode, with design and\ncontent still editable directly in the panel without visiting the admin page.\nElementor is unaffected; both modes remain available there.<\/li>\n<li>Fixed: the \"Monthly\/Yearly Toggle\" layout rendered incorrectly (the switch and the\ncards were side by side instead of stacked) because it inherited <code>display: flex<\/code>\nfrom the parent wrapper without a column direction. Fixed with <code>flex-direction: column<\/code>.<\/li>\n<li>Fixed: the \"Comparison\" layout wasn't responsive on narrow\/mobile screens \u2014 columns\nwere forced to shrink until unreadable. It now scrolls horizontally with a sensible\nminimum width, and font size\/padding adjust automatically on mobile.<\/li>\n<li>Fixed a CSS bug: the 2-column grid in the \"Columns &amp; Features\" editor form in\nGutenberg overflowed the sidebar (long values\/placeholders caused grid columns to\nexpand uncontrollably) \u2014 changed to a single column with a <code>min-width: 0<\/code> safeguard.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release (scaffold): table data custom post type, rendering engine, shortcode,\nGutenberg block (dynamic, plain JS with no build step), Elementor widget, basic REST\nAPI, and an admin page with a full form builder (columns, features, design presets).<\/li>\n<\/ul>","raw_excerpt":"Build responsive pricing tables and display them via a Gutenberg block, an Elementor widget, or a shortcode.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/345995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=345995"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/armanbasir"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=345995"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=345995"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=345995"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=345995"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=345995"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=345995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}