{"id":324394,"date":"2026-06-16T09:15:47","date_gmt":"2026-06-16T09:15:47","guid":{"rendered":"https:\/\/pl.wordpress.org\/plugins\/kung-woo-price-history\/"},"modified":"2026-10-28T19:47:07","modified_gmt":"2026-10-28T19:47:07","slug":"kung-woo-price-history-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ja.wordpress.org\/plugins\/kung-woo-price-history-for-woocommerce\/","author":23505639,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.0.8","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Kung Woo Price History for WooCommerce","header_author":"kungwoopanda","header_description":"Displays price history (Omnibus Directive). WPCS compliant version with strict sanitization and enqueued scripts.","assets_banners_color":"6c747a","last_updated":"2026-10-28 19:47:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":390,"num_ratings":1,"support_threads":3,"support_threads_resolved":2,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.8":{"tag":"1.0.8","author":"kungwoopanda","date":"2026-06-16 09:15:11","revision":3574254},"1.2.0":{"tag":"1.2.0","author":"kungwoopanda","date":"2026-09-28 16:59:29","revision":3717628},"1.3.0":{"tag":"1.3.0","author":"kungwoopanda","date":"2026-09-29 07:08:33","revision":3718430},"1.4.0":{"tag":"1.4.0","author":"kungwoopanda","date":"2026-10-28 19:47:07","revision":3771501}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3574254,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3574254,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3574254,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3574254,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.8","1.2.0","1.3.0","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3574254,"resolution":"1","location":"assets","locale":"","width":907,"height":548},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3574254,"resolution":"2","location":"assets","locale":"","width":1306,"height":578}},"screenshots":{"1":"The \"Lowest price from 30 days\" Omnibus notice on a product page.","2":"The interactive Price History chart modal."}},"plugin_section":[],"plugin_tags":[2510,209978,217117,4394,286],"plugin_category":[45],"plugin_contributors":[264650],"plugin_business_model":[],"class_list":["post-324394","plugin","type-plugin","status-publish","hentry","plugin_tags-chart","plugin_tags-omnibus","plugin_tags-price-history","plugin_tags-pricing","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-kungwoopanda","plugin_committers-kungwoopanda"],"banners":{"banner":"https:\/\/ps.w.org\/kung-woo-price-history-for-woocommerce\/assets\/banner-772x250.png?rev=3574254","banner_2x":"https:\/\/ps.w.org\/kung-woo-price-history-for-woocommerce\/assets\/banner-1544x500.png?rev=3574254","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kung-woo-price-history-for-woocommerce\/assets\/icon-128x128.png?rev=3574254","icon_2x":"https:\/\/ps.w.org\/kung-woo-price-history-for-woocommerce\/assets\/icon-256x256.png?rev=3574254","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kung-woo-price-history-for-woocommerce\/assets\/screenshot-1.png?rev=3574254","caption":"The \"Lowest price from 30 days\" Omnibus notice on a product page."},{"src":"https:\/\/ps.w.org\/kung-woo-price-history-for-woocommerce\/assets\/screenshot-2.png?rev=3574254","caption":"The interactive Price History chart modal."}],"raw_content":"<!--section=description-->\n<p><strong>Kung Woo Price History for WooCommerce<\/strong> is a lightweight WooCommerce extension that automatically tracks price changes and can display the lowest recorded price from the last 30 days when a product is on sale, helping stores present price-history information.<\/p>\n\n<p>Customers can view the full product price history in an interactive modal chart. Store administrators can customize the chart color and price-history icon, and can enable or disable PDF export from <strong>WooCommerce &gt; KW Price History<\/strong>.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li><strong>Variable Product Support:<\/strong> Tracks individual variation price histories and switches the chart when a variation is selected. Before selection, customers are prompted to choose a variation.<\/li>\n<li><strong>30-Day Lowest Price:<\/strong> Automatically calculates and displays the lowest recorded product price from the last 30 days whenever a product is on sale.<\/li>\n<li><strong>Price Tracking:<\/strong> Silently records the product price every time it gets updated or saved in the WooCommerce backend.<\/li>\n<li><strong>Interactive Chart:<\/strong> Adds a sleek \"Price History\" button to single product pages (via hook or shortcode) that opens a modal with a responsive Chart.js line graph.<\/li>\n<li><strong>Optional PDF Export:<\/strong> Allows customers to generate and download a PDF report of the price chart; administrators can disable this feature when it is not needed.<\/li>\n<li><strong>Custom Appearance:<\/strong> Choose a custom chart color and replace the default price-history icon with an image from the WordPress Media Library or a PNG\/SVG URL.<\/li>\n<li><strong>Multi-Currency Support:<\/strong> Native compatibility with FOX \u2013 Currency Switcher Professional. Historical prices are stored once and converted dynamically to the currency selected by the customer.<\/li>\n<li><strong>Page Builder Friendly:<\/strong> Works flawlessly with Elementor and other page builders thanks to robust event delegation and global script enqueuing.<\/li>\n<li><strong>Security &amp; Performance:<\/strong> Uses local assets, sanitizes stored settings and output, and enqueues scripts through WordPress APIs.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the entire plugin folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install it directly via the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>The plugin will immediately start tracking price changes for your products.<\/li>\n<li>When a product is put on sale, the \"Lowest price in 30 days\" notice will automatically appear.<\/li>\n<li>A \"Price History\" button will be added to your single product pages. You can also use the plugin's shortcode <code>[kwph_price_history]<\/code> to place the button anywhere on the product page or within your Elementor templates.<\/li>\n<li>Optional display and PDF settings are available under <strong>WooCommerce &gt; KW Price History<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"when%20does%20the%20plugin%20record%20a%20new%20price%3F\"><h3>When does the plugin record a new price?<\/h3><\/dt>\n<dd><p>The plugin hooks into the WooCommerce product save action. Whenever you update a product and the price differs from the last recorded entry, it logs the new price along with today's date.<\/p><\/dd>\n<dt id=\"can%20i%20import%20historical%20data%3F\"><h3>Can I import historical data?<\/h3><\/dt>\n<dd><p>Currently, the plugin begins tracking prices from the moment it is installed and activated. It does not look back at past WooCommerce logs.<\/p><\/dd>\n<dt id=\"where%20is%20the%2030-day%20lowest-price%20notice%20displayed%3F\"><h3>Where is the 30-day lowest-price notice displayed?<\/h3><\/dt>\n<dd><p>The lowest price from the last 30 days is automatically displayed right under the product price summary, but only when the product is currently \"on sale\".<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added independent price history tracking and chart display for WooCommerce product variations.<\/li>\n<li>Added variation selection prompt and dynamic chart switching.<\/li>\n<li>Preserved the existing optional PDF export, appearance settings and currency compatibility.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Settings: Added an option to enable or disable PDF export. The PDF library is not loaded when export is disabled.<\/li>\n<li>Customization: Added a custom price-history icon selector using the WordPress Media Library, with PNG\/SVG URL support and fallback to the existing custom\/default SVG icon.<\/li>\n<li>Customization: Added a configurable chart color with the WordPress color picker. The selected color is also used in PDF exports.<\/li>\n<li>Backward compatibility: Existing installations keep PDF export enabled, the current default icon, and the existing red chart color until settings are changed.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Compatibility: Added native support for FOX \u2013 Currency Switcher Professional for WooCommerce.<\/li>\n<li>Multi-currency: Price history chart values are dynamically converted to the currency selected by the customer.<\/li>\n<li>Multi-currency: The 30-day lowest-price notice is converted consistently with the selected FOX currency.<\/li>\n<li>Architecture: Historical prices and transient chart cache remain stored in the shop base currency, preventing duplicated history and cross-currency cache contamination.<\/li>\n<li>Backward compatibility: Existing price-history records require no migration and remain fully usable after updating.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Refactor: Standardized all database keys, options, and variables to English (e.g., <code>_kwph_price_history<\/code>) to meet WordPress.org global standards.<\/li>\n<li>Compatibility: Added full support for Elementor and other Page Builders by implementing global script enqueuing and JavaScript Event Delegation.<\/li>\n<li>Architecture: Shortcode buttons now securely carry specific product data via <code>data-chart<\/code> attributes, enabling multiple distinct charts to work flawlessly on the same page.<\/li>\n<li>Fix: Resolved a major Chart.js rendering issue (blank chart modal) by enforcing explicit canvas wrapper heights and applying rendering cycle delays.<\/li>\n<li>Fix: Added visual fallback error messages to gracefully handle missing core JavaScript assets.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security: Implemented strict SVG sanitization using <code>wp_kses()<\/code> with an explicit allowlist for the settings page.<\/li>\n<li>Security: Improved late escaping across all plugin outputs.<\/li>\n<li>Architecture: Moved all inline JavaScript from footer directly to correctly enqueued external JS files using <code>wp_enqueue_script<\/code> and <code>wp_localize_script<\/code>.<\/li>\n<li>Architecture: Prefixed shortcodes (<code>[kwph_price_history]<\/code>) and global declarations to avoid naming collisions.<\/li>\n<li>Update: Updated Chart.js to the newest stable version.<\/li>\n<li>Fix: Removed remote CDN calls from the html2pdf library to ensure all assets are loaded locally.<\/li>\n<li>Compliance: Renamed plugin to respect third-party trademarks (\"for WooCommerce\").<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Track and display WooCommerce product price history with an interactive chart, customizable appearance, optional PDF export, and 30-day lowest-price i \u2026","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/324394","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=324394"}],"author":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kungwoopanda"}],"wp:attachment":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=324394"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=324394"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=324394"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=324394"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=324394"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=324394"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}