{"id":383388,"date":"2026-10-09T11:55:19","date_gmt":"2026-10-09T11:55:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kairii-sale-calendar\/"},"modified":"2026-10-09T11:54:59","modified_gmt":"2026-10-09T11:54:59","slug":"kairii-sale-calendar","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/kairii-sale-calendar\/","author":14135334,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.1","stable_tag":"0.2.1","tested":"7.1.3","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"Kairii Sale Calendar","header_author":"robword","header_description":"Plan WooCommerce sales on a calendar \u2014 name an occasion, pick the dates, set a discount off the price or off your margin, and choose the products or categories. Prices change on the day and change back on their own.","assets_banners_color":"1d283a","last_updated":"2026-10-09 11:54:59","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/robart-illustration.eu\/plugins-wordpress-development\/kairii-sale-calendar\/","header_author_uri":"https:\/\/robart-illustration.eu","rating":0,"author_block_rating":0,"active_installs":0,"downloads":71,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.1":{"tag":"0.2.1","author":"RobWord","date":"2026-10-09 11:54:59","revision":3736556}},"upgrade_notice":{"0.2.0":"<p>Provider boxes fill the row and (with Pro) grow as you fill the last one; the &quot;Days Either Side&quot; date shortcut; and fixes for dark admin colour schemes and lingering &quot;saved&quot; messages.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3736556,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3736556,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3736556,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3736556,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3736556,"resolution":"1","location":"assets","locale":"","width":3528,"height":2412},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3736556,"resolution":"2","location":"assets","locale":"","width":3530,"height":2412},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3736556,"resolution":"3","location":"assets","locale":"","width":3528,"height":2412},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3736556,"resolution":"4","location":"assets","locale":"","width":3528,"height":2412},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3736556,"resolution":"5","location":"assets","locale":"","width":3532,"height":2414},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3736556,"resolution":"6","location":"assets","locale":"","width":2224,"height":1034}},"screenshots":{"1":"The Calendar \u2014 occasions and your planned sales, month by month. Click a day to plan a sale under the calendar.","2":"The sale panel \u2014 pick the products, set a discount off the price or off your margin, and choose the dates with one-click shortcuts.","3":"Occasions \u2014 the library of dated days to add to your calendar, plus your own occasions and birthdays.","4":"Margins \u2014 name who fulfils your products, set a margin per category, and keep a cost price list that writes into WooCommerce's own Cost field.","5":"The Dashboard \u2014 what each sale sold, and the occasions coming up.","6":"The sale price bar on the shop \u2014 a line under the price saying why a product is on sale and when it ends."}},"plugin_section":[262246],"plugin_tags":[416,331,5447,4062,286],"plugin_category":[40,45],"plugin_contributors":[267814],"plugin_business_model":[],"class_list":["post-383388","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-calendar","plugin_tags-discount","plugin_tags-sale","plugin_tags-schedule","plugin_tags-woocommerce","plugin_category-calendar-and-events","plugin_category-ecommerce","plugin_contributors-robword","plugin_committers-robword"],"banners":{"banner":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/banner-772x250.png?rev=3736556","banner_2x":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/banner-1544x500.png?rev=3736556","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/icon-128x128.png?rev=3736556","icon_2x":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/icon-256x256.png?rev=3736556","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/screenshot-1.png?rev=3736556","caption":"The Calendar \u2014 occasions and your planned sales, month by month. Click a day to plan a sale under the calendar."},{"src":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/screenshot-2.png?rev=3736556","caption":"The sale panel \u2014 pick the products, set a discount off the price or off your margin, and choose the dates with one-click shortcuts."},{"src":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/screenshot-3.png?rev=3736556","caption":"Occasions \u2014 the library of dated days to add to your calendar, plus your own occasions and birthdays."},{"src":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/screenshot-4.png?rev=3736556","caption":"Margins \u2014 name who fulfils your products, set a margin per category, and keep a cost price list that writes into WooCommerce's own Cost field."},{"src":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/screenshot-5.png?rev=3736556","caption":"The Dashboard \u2014 what each sale sold, and the occasions coming up."},{"src":"https:\/\/ps.w.org\/kairii-sale-calendar\/assets\/screenshot-6.png?rev=3736556","caption":"The sale price bar on the shop \u2014 a line under the price saying why a product is on sale and when it ends."}],"raw_content":"<!--section=description-->\n<p>Kairii is a sale calendar for WooCommerce. Pick an occasion \u2014 World Animal Day, Black Friday, your shop's birthday \u2014 set a discount off the price or off your margin, choose the products, and Kairii does the rest: prices change at midnight on the first day and change back when the sale ends. Nothing is written to your products, so there is nothing to undo.<\/p>\n\n<p><strong>A calendar of occasions<\/strong><\/p>\n\n<ul>\n<li>A library of about 1,500 dated occasions: United Nations days, awareness and animal days, national days and holidays across Europe, the Americas, Asia, Africa and Oceania, retail days and famous birthdays. Moving dates (Easter, \"4th Thursday of November\", festivals that follow the moon) are worked out for every year. The dates are compiled and checked from public sources.<\/li>\n<li>Add the ones you want to your calendar with one click, and add your own occasions \u2014 on a date, on a pattern such as \"2nd Wednesday of October\", or someone's birthday.<\/li>\n<\/ul>\n\n<p><strong>Plan a sale in one place<\/strong><\/p>\n\n<ul>\n<li>Click a day, then plan the sale under the calendar: dates (or drag across days), discount, products and categories, price endings, and the sale badge.<\/li>\n<li>A live price table shows every product's sale price, what you keep, and why a product is left out.<\/li>\n<li>Tweak single products: their own percentage, a fixed price, or leave them out.<\/li>\n<li>Yearly sales follow their occasion when its date moves.<\/li>\n<\/ul>\n\n<p><strong>Never sell at a loss<\/strong><\/p>\n\n<ul>\n<li>Your minimum profit always wins: when a discount would go below cost plus your minimum profit, the price stops there and the product is marked \"capped\".<\/li>\n<li>Costs come from WooCommerce's own cost field or from a margin you set per category, labelled with your fulfilment provider.<\/li>\n<li>Products with no known cost are left out of sales, coupons skip items already on a Kairii sale, and products whose sizes share one cost are flagged.<\/li>\n<li>A product already on a WooCommerce sale keeps its own price, and discounts never stack.<\/li>\n<\/ul>\n\n<p><strong>Stay ahead<\/strong><\/p>\n\n<ul>\n<li>A \"Coming up\" notice and an optional morning email remind you before each occasion, with a promo checklist.<\/li>\n<li>The Dashboard shows what each sale sold, from paid orders.<\/li>\n<\/ul>\n\n<h3>Uninstall<\/h3>\n\n<p>Deactivating Kairii stops its sales at once and removes nothing.<\/p>\n\n<p>Deleting Kairii keeps your data by default, so reinstalling picks up where you left off. To remove everything, switch on Settings \u2192 Data \u2192 \"Remove all Kairii data when the plugin is deleted\" before you delete the plugin. Kairii then removes its occasions and sales, all of its settings (including the price list and its rules), the reminder settings kept for each user, the price-list links on products, and the sale notes it adds to order lines.<\/p>\n\n<p>Your products and prices are never changed by Kairii, so there is nothing to undo. Costs in WooCommerce's own Cost field stay, as they are your WooCommerce data, and your orders and their totals are untouched.<\/p>\n\n<h3>External services<\/h3>\n\n<p><strong>Occasion date updates (optional).<\/strong> Festivals that follow the moon ship with checked dates for a few years at a time. When you press \"Check for updates\" in Kairii \u2192 Settings, or switch on the monthly check, Kairii downloads one signed file of occasion dates from robart-illustration.eu (https:\/\/robart-illustration.eu\/wp-json\/wprobarts\/v1\/kairii-occasions). Nothing about your site or shop is sent \u2014 it is a plain download. Kairii never contacts the server unless you press the button or switch on the monthly check. Privacy policy: https:\/\/robart-illustration.eu\/privacy-policy-rob-art-illustration\/<\/p>\n\n<h3>Support<\/h3>\n\n<p>Questions, bug reports and feature requests are welcome on the plugin's support forum: https:\/\/wordpress.org\/support\/plugin\/kairii-sale-calendar\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Upload the <code>kairii-sale-calendar<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen, and activate it.<\/li>\n<li>Open <strong>Kairii \u2192 Margins<\/strong> and set what you make per product category (or switch on WooCommerce's cost of goods).<\/li>\n<li>Open <strong>Kairii \u2192 Occasions<\/strong> and add the occasions you sell around, then plan your first sale from <strong>Kairii \u2192 Calendar<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20kairii%20change%20my%20product%20prices%3F\"><h3>Does Kairii change my product prices?<\/h3><\/dt>\n<dd><p>No. Kairii adjusts the price as WooCommerce reads it, only while a sale runs, and returns it as the sale price \u2014 so your shop shows its usual crossed-out price and sale badge. When the sale ends the normal price is simply back.<\/p><\/dd>\n<dt id=\"what%20if%20a%20product%20is%20already%20on%20a%20woocommerce%20sale%3F\"><h3>What if a product is already on a WooCommerce sale?<\/h3><\/dt>\n<dd><p>WooCommerce's sale wins and Kairii leaves that product alone.<\/p><\/dd>\n<dt id=\"can%20a%20sale%20go%20below%20what%20a%20product%20costs%20me%3F\"><h3>Can a sale go below what a product costs me?<\/h3><\/dt>\n<dd><p>Not when Kairii knows the cost. Set your minimum profit to at least cover payment fees and shipping you absorb.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Security: internal hardening.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>New: provider boxes continue along the row and fill the width before wrapping; with Kairii Pro a fresh box appears as you fill the last one, so you can list as many providers as you run. Without Pro you get four and a note about adding more.<\/li>\n<li>Changed: the \"Weekend around it\" date shortcut is now \"Days Either Side\" and sets one day before and one day after, whatever the weekday.<\/li>\n<li>Changed: when a sale is set to repeat every year, the \"Remember these products\" tick is replaced by a note \u2014 a repeating sale already keeps its products.<\/li>\n<li>Fixed: dropdowns and text boxes on the Margins and Settings screens were hard to read under a dark admin colour scheme; they now stay readable whatever the scheme.<\/li>\n<li>Fixed: the \"saved\" confirmation messages now fade away after a few seconds instead of staying on screen.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Fixed: products whose size attribute had a different name, such as \"Size\" on a print made by Printful beside \"Size (inches)\" on one made by hand, were kept apart in the cost list, so the new product's sizes never showed under the size you picked. Size, Sizes and Size (inches) now form one list, and every rule reaches them all.<\/li>\n<li>Fixed: sizes written with inch marks, such as 16\u2033\u00d724\u2033, did not match the same size written 16x24. Inch marks are now ignored when sizes are compared. Rules you already saved keep working.<\/li>\n<li>Improved: the Dashboard's Sales list shows 15 sales a page, in the order they will happen: running now, then the next one coming up, with finished one-off sales last. A sale that repeats every year shows its next dates, and a one-off sale that is over says Ended.<\/li>\n<li>Improved: on the Catalogue, \"By product\" now shows only the product view; the list of all occasions belongs to \"By occasion\".<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>New: linking products or categories to an occasion in the Catalogue also adds them to that occasion's existing sales, and Save says which sales changed. Kairii only adds, never removes, and a sale for all products is left as it is.<\/li>\n<li>New: the Dashboard's Sales list has a Products column showing what each sale covers: all products, its categories, or how many single products.<\/li>\n<li>Improved: Kairii's own icons in the header bar, the Settings cards and the Licence card.<\/li>\n<li>Improved: the manual covers editing an occasion's date, sales linked from the Catalogue and the new Products column.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Changed: Kairii now comes with ten days every shop knows: New Year's Day, Valentine's Day, International Women's Day, Easter Sunday, Halloween, Singles' Day, Black Friday, Cyber Monday, Christmas Day and Boxing Day. The full library of more than 1,500 awareness days, national days, festivals and birthdays, with its date updates, is part of Kairii Pro.<\/li>\n<li>Changed: a sale runs once, on the dates you set. Repeating a sale every year is part of Kairii Pro, and the sale panel says so where the option sits.<\/li>\n<li>New: change an occasion's date and how it repeats from its Edit form on the Occasions screen.<\/li>\n<li>New: mark a new occasion as someone's birthday straight from the calendar, as well as on the Occasions screen.<\/li>\n<li>New: a bar under the product price says why it is on sale, for example \"World Animal Day sale \u00b7 up to 20% off \u00b7 ends Monday 5 October\". Switch it off in Settings.<\/li>\n<li>New: a \u2715 on the calendar's day panel removes an occasion added by mistake.<\/li>\n<li>Changed: a new occasion starts with no sale. Sales show as amber lines on the calendar, and as a white line on today's square.<\/li>\n<li>Changed: one row of the cost list or price list can match several values, for example ePub, PDF and MOBI together.<\/li>\n<li>Improved: the Upgrade page shows the dashboard and the calendar, the upgrade window shows its whole picture, and Kairii has its own menu icon and logos.<\/li>\n<li>Fixed: the \"Add your own occasion\" form filled in today's date, so an occasion saved without picking one landed on today. The date now starts empty.<\/li>\n<li>Fixed: occasions whose sale covers all products showed \"Nothing linked\" on the Occasions and Catalogue screens, and were flagged as gaps. They now say \"All products\".<\/li>\n<li>Fixed: the calendar's weekday headings could start on the wrong day.<\/li>\n<li>Fixed: occasion names with an apostrophe could show as \u2019.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>New: cost price list \u2014 one row per size with the provider, the categories that sell it and what it costs; written into WooCommerce's own Cost field and kept in step whenever a product is saved.<\/li>\n<li>New: one row can cover several categories, or every product in a category (\"Any product\"), such as ePubs.<\/li>\n<li>New: one switch per product, \"Kairii list\" or \"Set by hand\", above the variations list, with a note under each size.<\/li>\n<li>New: price list in Kairii Pro \u2014 standard selling prices per size, fixed or worked out from cost, written into the Regular price.<\/li>\n<li>New: WordPress Dashboard card showing what is celebrated today, sales running now and what is next on your calendar.<\/li>\n<li>New: User Manual, Read Me and Licence viewer, plus fuller sidebars with how-to text and running totals on every screen.<\/li>\n<li>New: Upgrade page and pop-up overview of Kairii Pro.<\/li>\n<li>New: Data card in Settings, and a clean uninstall that removes Kairii's data only when you ask it to.<\/li>\n<li>New: Support and Debug Information sections in the Settings sidebar.<\/li>\n<li>Improved: the \"Coming up\" notice can be snoozed per occasion or as a whole, coming back after half the time left.<\/li>\n<li>Fixed: the calendar no longer suggests a sale for an occasion that already has one.<\/li>\n<li>Fixed: \"Copied!\" showed before anything was copied.<\/li>\n<li>Fixed: running sales and results now refresh straight after a sale is saved or deleted.<\/li>\n<li>Security: every request handler checks its nonce and permission itself, and all input is sanitised and output escaped.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>New: sale calendar with a planning workbench under it \u2014 dates, discount off price or off margin, products and categories, price endings, sale badge, live price table and per-product tweaks.<\/li>\n<li>New: occasion library of about 1,500 dated days in sections (International, Europe, Americas, Asia, Africa, Oceania, Birthdays, Retail), plus your own occasions; add any to your calendar with one click.<\/li>\n<li>New: Catalogue screen to link products to occasions, by occasion or by product, with name-based suggestions and copying.<\/li>\n<li>New: money safeguards \u2014 minimum profit always wins, no discount without a known cost, coupons skip sale items, and a warning when sizes share one cost.<\/li>\n<li>New: Margins screen with category margins, sale defaults and fulfilment providers.<\/li>\n<li>New: \"Coming up\" reminders on the Dashboard and an optional email digest.<\/li>\n<li>New: optional signed occasion-date updates.<\/li>\n<li>New: Dashboard with live sale status and what each sale sold.<\/li>\n<li>New: Settings screen with system status.<\/li>\n<\/ul>","raw_excerpt":"Plan WooCommerce sales on a calendar of occasions. Prices change on the day, change back on their own, and never go below your cost.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/383388","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=383388"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/robword"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=383388"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=383388"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=383388"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=383388"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=383388"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=383388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}