{"id":354524,"date":"2026-08-16T21:57:48","date_gmt":"2026-08-16T21:57:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pa-automatic-product-sorting-for-woocommerce\/"},"modified":"2026-10-02T09:53:55","modified_gmt":"2026-10-02T09:53:55","slug":"atelier-product-sorting-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/atelier-product-sorting-for-woocommerce\/","author":23544006,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.2","requires":"6.9","requires_php":"8.3","requires_plugins":null,"header_name":"Atelier - Automatic Product Sorting for WooCommerce","header_author":"Plugins Atelier","header_description":"Essential automatic product sorting by category: ranks products using observed net units, catalog availability, and new arrivals, with Preview, Apply, and a safe return to the native baseline.","assets_banners_color":"bfc3b2","last_updated":"2026-10-02 09:53:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":216,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"pluginsatelier","date":"2026-08-16 21:57:21","revision":3650211},"1.1.0":{"tag":"1.1.0","author":"pluginsatelier","date":"2026-10-02 09:53:55","revision":3724508}},"upgrade_notice":{"1.1.0":"<p>Adds the Spanish translation and lets this plugin share its data safely with\nanother edition.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3650211,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3650211,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3650211,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3650211,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3650211,"resolution":"1","location":"assets","locale":"","width":1280,"height":688},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3650211,"resolution":"2","location":"assets","locale":"","width":1280,"height":688},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3650211,"resolution":"3","location":"assets","locale":"","width":1280,"height":688}},"screenshots":{"1":"The Fleetboard shows every category's sorting status and its next action.","2":"Preview explains the proposed order and every movement before the first Apply.","3":"History previews a safe Rollback before serving a previous published order again."}},"plugin_section":[],"plugin_tags":[2777,610,43294,37973,286],"plugin_category":[45,57],"plugin_contributors":[276027],"plugin_business_model":[],"class_list":["post-354524","plugin","type-plugin","status-publish","hentry","plugin_tags-catalog","plugin_tags-categories","plugin_tags-merchandising","plugin_tags-product-sorting","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-taxonomy","plugin_contributors-pluginsatelier","plugin_committers-pluginsatelier"],"banners":{"banner":"https:\/\/ps.w.org\/atelier-product-sorting-for-woocommerce\/assets\/banner-772x250.png?rev=3650211","banner_2x":"https:\/\/ps.w.org\/atelier-product-sorting-for-woocommerce\/assets\/banner-1544x500.png?rev=3650211","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/atelier-product-sorting-for-woocommerce\/assets\/icon-128x128.png?rev=3650211","icon_2x":"https:\/\/ps.w.org\/atelier-product-sorting-for-woocommerce\/assets\/icon-256x256.png?rev=3650211","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/atelier-product-sorting-for-woocommerce\/assets\/screenshot-1.png?rev=3650211","caption":"The Fleetboard shows every category's sorting status and its next action."},{"src":"https:\/\/ps.w.org\/atelier-product-sorting-for-woocommerce\/assets\/screenshot-2.png?rev=3650211","caption":"Preview explains the proposed order and every movement before the first Apply."},{"src":"https:\/\/ps.w.org\/atelier-product-sorting-for-woocommerce\/assets\/screenshot-3.png?rev=3650211","caption":"History previews a safe Rollback before serving a previous published order again."}],"raw_content":"<!--section=description-->\n<p>Automatic product sorting ranks category archives using observed net units\nsold, catalog availability, and which products are new arrivals.<\/p>\n\n<p>Before the first change, the plugin shows what would move. The first Apply for\na category approves the formula and policy and publishes the reviewed order.<\/p>\n\n<p>Later candidates may publish automatically when only data changes under that\napproval. A formula or policy change returns to Preview. Pause stops\npublications; Restore returns to the native order; Rollback serves a selected\nearlier order until you publish again. The dashboard attributes and timestamps\neach change.<\/p>\n\n<h4>What it measures exactly<\/h4>\n\n<ul>\n<li><strong>Observed net units over 30 days<\/strong>, adjusted for refunds with an\nattributable quantity. It counts every order that WooCommerce exposes as\npaid and in an eligible status and does not automatically exclude test\norders. Each run takes a complete U30 snapshot, and the population, coverage,\nand cutoff are visible.<\/li>\n<li><strong>Catalog availability observed during the latest calculation.<\/strong> This is\nwhat the catalog reported at that moment, not a checkout reservation or a\nreal-time promise.<\/li>\n<li><strong>New arrivals<\/strong>, with a window configurable per category.<\/li>\n<\/ul>\n\n<h4>What it does not do<\/h4>\n\n<ul>\n<li>It does not promise to increase sales or improve conversion. It sorts by an\nobserved signal; what happens afterwards depends on your store.<\/li>\n<li>There is no \"smart score,\" AI, per-visitor personalization, or random\nexploration.<\/li>\n<li>It does not know real-time stock or the units actually free at checkout.<\/li>\n<li>It does not collect impressions, clicks, or sessions.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>All calculations run on your server. The plugin sends no telemetry or store\ndata, depends on no external service, and makes no network request to sort\nproducts. WordPress itself may still check WordPress.org for updates.<\/p>\n\n<h4>Where it sorts and where it does not<\/h4>\n\n<p>The plugin sorts only when it can identify one category unambiguously.<\/p>\n\n<p>It serves the ranking in:<\/p>\n\n<ul>\n<li>The main category archive of a classic theme when WooCommerce uses its\ndefault or manual order.<\/li>\n<li>The Product Collection block in Default\/inherit mode inside the category\ntemplate.<\/li>\n<li>The Product Collection block in Custom+Manual mode when the category is\nunambiguous and no other ordering criterion exists, including editor preview.<\/li>\n<\/ul>\n\n<p>It keeps the native order for: an explicit order selected by the visitor,\nsearch, the main shop archive, queries spanning several categories, the Store\nAPI, external search engines, and custom SQL queries from other plugins.<\/p>\n\n<p>Not claimed as supported: shortcodes, page builders, headless setups,\nWPML\/Polylang, and page or CDN caches. The dashboard is available in English\nand Spanish, is ready for translation, and supports RTL; multilingual catalog\nsorting has not been verified.<\/p>\n\n<p><strong>WordPress Multisite is not supported.<\/strong> The plugin detects it, explains the\nlimitation, and does nothing else: no tables, no scheduled work, and no\nstorefront intervention on any site in the network.<\/p>\n\n<h3>Development<\/h3>\n\n<p>Human-readable admin source is included in <code>admin-ui\/src\/<\/code>; WordPress runs the\ncompiled files in <code>assets\/admin\/<\/code>. With Node 20+ and npm 10+, rebuild them with\n    npm ci &amp;&amp; npm run build:assets. <code>package-lock.json<\/code> pins the JavaScript\ntoolchain. <code>composer install --no-dev --classmap-authoritative<\/code> rebuilds a\nfunctional PHP autoloader from <code>composer.lock<\/code>. The plugin already includes its\nproduction assets and autoloader, so merchants do not run either build tool.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce, which is a required dependency.<\/li>\n<li>Install and activate Atelier - Automatic Product Sorting for WooCommerce.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Product sorting<\/strong> and follow the guided first run.<\/li>\n<\/ol>\n\n<p>Requirements: WordPress 6.9 or later, PHP 8.3 or later, WooCommerce 10.8 or\nlater, MySQL or MariaDB with InnoDB, and a single-site installation.<\/p>\n\n<p>Administrators and shop managers can view the dashboard. Publishing,\nrestoring, or changing settings also requires permission to manage\nWooCommerce.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20activating%20it%20change%20anything%20in%20my%20store%3F\"><h3>Does activating it change anything in my store?<\/h3><\/dt>\n<dd><p>No. Activation prepares the plugin's tables; the native order remains until\nyou publish. Calculation is read-only for WooCommerce orders and products.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20confirm%20every%20update%3F\"><h3>Do I have to confirm every update?<\/h3><\/dt>\n<dd><p>No. The first Apply approves the reviewed formula and policy. A complete\ncandidate caused only by later data changes may publish under that contract.<\/p>\n\n<p>Formula or policy changes return to Preview. Pause keeps the served order;\nRestore reveals the native baseline; Rollback keeps a selected earlier order.\nStatus and history show what changed, how, and when.<\/p><\/dd>\n<dt id=\"what%20does%20each%20category%20status%20mean%2C%20and%20what%20should%20i%20do%3F\"><h3>What does each category status mean, and what should I do?<\/h3><\/dt>\n<dd><p>The dashboard explains every status and its next action. <strong>Not calculated<\/strong>,\n<strong>Calculating<\/strong>, and <strong>Ready for review<\/strong> cover the first publication;\n<strong>Published<\/strong> is serving an order; <strong>Outdated<\/strong>, <strong>Degraded coverage<\/strong>, and\n<strong>Blocked<\/strong> require a new run or diagnostic review; <strong>Paused<\/strong> keeps the\ncurrent order; <strong>Restored<\/strong> serves WooCommerce's native order.<\/p><\/dd>\n<dt id=\"how%20do%20i%20go%20back%20if%20i%20do%20not%20like%20the%20order%3F\"><h3>How do I go back if I do not like the order?<\/h3><\/dt>\n<dd><p>Restore immediately returns the category to WooCommerce's native order. It\ndeletes nothing; history remains available.<\/p>\n\n<p>Rollback restores an earlier retained order after showing its diff. An order\ncontaining a product that no longer exists is rejected rather than partially\npublished. It remains fixed until you publish again.<\/p>\n\n<p>If calculation is failing, <em>Run now<\/em> resumes blocked or outdated work instead.<\/p><\/dd>\n<dt id=\"what%20is%20stored%2C%20and%20for%20how%20long%3F\"><h3>What is stored, and for how long?<\/h3><\/dt>\n<dd><p>In its own tables, the plugin keeps calculated generations, positions,\nexplanations, pending work, and command log. Per category it retains the served\ngeneration, latest candidate, and five previous published generations; other\ngenerations are pruned after seven days. It neither modifies nor copies orders\nor products and stores no per-order demand contribution.<\/p>\n\n<p>Diagnostics are calculated from live state and have no history in Free.<\/p><\/dd>\n<dt id=\"what%20happens%20with%20custom%20order%20statuses%3F\"><h3>What happens with custom order statuses?<\/h3><\/dt>\n<dd><p>The plugin uses WooCommerce's public APIs. Diagnostics report correctly\nregistered custom statuses as unclassified, with their observed order count.<\/p>\n\n<p>An incompletely registered status may be invisible, especially under HPOS.\nThe plugin cannot count or report orders WooCommerce does not return and does\nnot invent a zero; the dashboard and export declare this limitation.<\/p>\n\n<p>Fix that integration and recalculate. The plugin does not read internal order\ntables as a workaround.<\/p><\/dd>\n<dt id=\"what%20is%20removed%20on%20uninstall%3F\"><h3>What is removed on uninstall?<\/h3><\/dt>\n<dd><p>Its tables, options, caches, scheduled tasks, and capability. WooCommerce data\nis not touched. While another edition of this plugin is still installed,\nuninstalling keeps that shared data, because the other edition uses it.<\/p>\n\n<p>Deactivation removes storefront ordering and scheduled work but keeps\nconfiguration and history. Reactivation starts in native order until another\nreview and publication.<\/p><\/dd>\n<dt id=\"what%20information%20can%20i%20send%20to%20support%3F\"><h3>What information can I send to support?<\/h3><\/dt>\n<dd><p>The downloadable JSON diagnostic contains allowlisted versions, statuses,\ncounts, and category identifiers\u2014not secrets, personal data, order content,\ncategory names, or store URL.<\/p>\n\n<p>It is generated only on request and never sent automatically.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20help%3F\"><h3>How do I get help?<\/h3><\/dt>\n<dd><p>Email support@pluginsatelier.com and attach the exportable diagnostic.<\/p>\n\n<p>The WordPress.org forum is not a promised support channel. Email is.<\/p>\n\n<p>Phone, chat, store access, consulting, and custom development are outside Free.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: the Spanish translation is included in the plugin and uses\nWooCommerce's own Spanish terms. Stores set to Spanish see the dashboard in\nSpanish.<\/li>\n<li>Prepared for a Pro edition: only one edition sorts at a time. While another\nedition is active and sorting, this one stays inactive and says so on the\nPlugins screen.<\/li>\n<li>Prepared for a Pro edition: an inactive edition still declares that it is\ncompatible with WooCommerce's order storage (HPOS), so WooCommerce does not\nflag it.<\/li>\n<li>Prepared for a Pro edition: uninstalling keeps the shared data while another\nedition is still installed.<\/li>\n<li>Fix: explanations written by another edition display without errors.<\/li>\n<li>Fix: movement explanations use the correct singular or plural (\"1 net\nunit\").<\/li>\n<li>Fix: dates follow your admin language, and the search and movement filters\nline up on desktop and mobile.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Sorts products within WooCommerce categories by net units, availability, and new arrivals, with initial approval and safe Restore.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/354524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=354524"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pluginsatelier"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=354524"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=354524"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=354524"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=354524"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=354524"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=354524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}