{"id":335334,"date":"2026-07-05T11:12:41","date_gmt":"2026-07-05T11:12:41","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/advanced-shop-manager\/"},"modified":"2026-07-05T17:53:39","modified_gmt":"2026-07-05T17:53:39","slug":"pfh-shop-manager","status":"publish","type":"plugin","link":"https:\/\/snd.wordpress.org\/plugins\/pfh-shop-manager\/","author":15276056,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.37","stable_tag":"0.4.37","tested":"7.0","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"PFH Shop Manager","header_author":"Paul Howe","header_description":"A simplified, permission-controlled WooCommerce management portal for products, customers, shipping, sales and sales forecasting.","assets_banners_color":"96b4af","last_updated":"2026-07-05 17:53:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"0.4.35":{"tag":"0.4.35","author":"pfhowe","date":"2026-07-05 11:12:18"},"0.4.36":{"tag":"0.4.36","author":"pfhowe","date":"2026-07-05 12:30:54"},"0.4.37":{"tag":"0.4.37","author":"pfhowe","date":"2026-07-05 17:53:39"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3596738,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3596738,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3596738,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3596738,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.4.35","0.4.36","0.4.37"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3596738,"resolution":"1","location":"assets","locale":"","width":1200,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3596738,"resolution":"2","location":"assets","locale":"","width":1200,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3596738,"resolution":"3","location":"assets","locale":"","width":1200,"height":900}},"screenshots":{"1":"Manage WooCommerce products, reports and customers without opening the WordPress dashboard.","2":"Control staff groups and inactivity logout from the portal.","3":"Edit shipping zones, shipping classes and checkout display settings."}},"plugin_section":[],"plugin_tags":[702,332,3546,12448,286],"plugin_category":[45],"plugin_contributors":[270178],"plugin_business_model":[],"class_list":["post-335334","plugin","type-plugin","status-publish","hentry","plugin_tags-products","plugin_tags-sales","plugin_tags-shipping","plugin_tags-stock","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-pfhowe","plugin_committers-pfhowe"],"banners":{"banner":"https:\/\/ps.w.org\/pfh-shop-manager\/assets\/banner-772x250.png?rev=3596738","banner_2x":"https:\/\/ps.w.org\/pfh-shop-manager\/assets\/banner-1544x500.png?rev=3596738","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pfh-shop-manager\/assets\/icon-128x128.png?rev=3596738","icon_2x":"https:\/\/ps.w.org\/pfh-shop-manager\/assets\/icon-256x256.png?rev=3596738","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pfh-shop-manager\/assets\/screenshot-1.png?rev=3596738","caption":"Manage WooCommerce products, reports and customers without opening the WordPress dashboard."},{"src":"https:\/\/ps.w.org\/pfh-shop-manager\/assets\/screenshot-2.png?rev=3596738","caption":"Control staff groups and inactivity logout from the portal."},{"src":"https:\/\/ps.w.org\/pfh-shop-manager\/assets\/screenshot-3.png?rev=3596738","caption":"Edit shipping zones, shipping classes and checkout display settings."}],"raw_content":"<!--section=description-->\n<p>PFH Shop Manager provides a branded portal at \/pfh-shop-manager\/ for managing one WooCommerce shop.<\/p>\n\n<p>Version 0.4.37 includes:<\/p>\n\n<ul>\n<li>Product creation and editing, including prices, descriptions, stock and dimensions.<\/li>\n<li>Local product image upload to the WordPress media library.<\/li>\n<li>Optional, manually entered product SKUs with duplicate protection.<\/li>\n<li>Product categories and shipping classes.<\/li>\n<li>Shipping zones and common shipping display settings.<\/li>\n<li>WooCommerce-compatible product CSV templates, imports and exports.<\/li>\n<li>Sales reports showing gross, tax, net and refunds, with CSV export.<\/li>\n<li>Customer value rankings with purchase categories, search, filtering and CSV export.<\/li>\n<li>Best Seller rankings by accumulated product sales value or quantity sold.<\/li>\n<li>Sales forecasts for standard orders and YITH deposit\/balance orders, including a monthly Net\/VAT\/Gross line graph.<\/li>\n<li>Potential-sales reporting, CSV\/PDF exports and scheduled sales forecast emails.<\/li>\n<li>COGS entry management for WooCommerce stores with Cost of Goods Sold enabled.<\/li>\n<li>COGS profitability on the COGS screen, showing accumulated net revenue, total COGS, profit and margin.<\/li>\n<li>Shop Manager, Shop Assistant and Accountant user roles.<\/li>\n<li>Permission-protected login and explicit logout activity for portal users, retained for 90 days.<\/li>\n<li>Configurable inactivity timeouts with a pre-logout warning and stay-signed-in action.<\/li>\n<li>A built-in help library.<\/li>\n<li>High-Performance Order Storage compatibility.<\/li>\n<\/ul>\n\n<p>PFH Shop Manager accounts are standard WordPress accounts. Passwords remain protected by WordPress authentication, while non-administrator PFH Shop Manager users are redirected away from the normal WordPress dashboard.<\/p>\n\n<h4>Development and source<\/h4>\n\n<p>The human-readable source used to build this plugin is included in the plugin package. The frontend source is <code>assets\/app.js<\/code>; the versioned <code>assets\/app-0.4.37.js<\/code> file is a release copy of the same source used for cache busting. No npm, webpack or minification step is required. Release packages are built from this repository with <code>scripts\/build-release.ps1<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In WordPress, open Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Select the PFH Shop Manager ZIP file and activate it.<\/li>\n<li>Create users under the PFH Shop Manager Users screen, or assign one of the PFH Shop Manager roles to an existing WordPress user.<\/li>\n<li>Open https:\/\/your-shop.example\/pfh-shop-manager\/.<\/li>\n<\/ol>\n\n<p>Administrators automatically receive access to every PFH Shop Manager screen. Administrators retain normal WordPress dashboard access.<\/p>\n\n<!--section=changelog-->\n<h4>0.4.37<\/h4>\n\n<ul>\n<li>Shows legacy Woo Shop Manager role assignments on the PFH Shop Manager Users screen.<\/li>\n<li>Maps legacy built-in staff roles to the current PFH Shop Manager groups for safe display and editing.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.37 release.<\/li>\n<\/ul>\n\n<h4>0.4.36<\/h4>\n\n<ul>\n<li>Reflects PFH Shop Manager role assignments made in WordPress Admin on the portal Users screen.<\/li>\n<li>Adds a Users refresh action for pulling in WP Admin role changes without leaving the portal.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.36 release.<\/li>\n<\/ul>\n\n<h4>0.4.35<\/h4>\n\n<ul>\n<li>Adds a COGS product status filter for published products, draft products, or both.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.35 release.<\/li>\n<\/ul>\n\n<h4>0.4.34<\/h4>\n\n<ul>\n<li>Orders COGS tours by the date prefix in the SKU, earliest tour first.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.34 release.<\/li>\n<\/ul>\n\n<h4>0.4.33<\/h4>\n\n<ul>\n<li>Renames the COGS profitability summary labels to Profit and Margin.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.33 release.<\/li>\n<\/ul>\n\n<h4>0.4.32<\/h4>\n\n<ul>\n<li>Clarifies COGS profitability as accumulated net revenue from net sales minus total COGS net per tour.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.32 release.<\/li>\n<\/ul>\n\n<h4>0.4.31<\/h4>\n\n<ul>\n<li>Shows the latest products first in the COGS product dropdown.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.31 release.<\/li>\n<\/ul>\n\n<h4>0.4.30<\/h4>\n\n<ul>\n<li>Adds selected-product COGS profitability with net revenue, profit and margin percentage.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.30 release.<\/li>\n<\/ul>\n\n<h4>0.4.29<\/h4>\n\n<ul>\n<li>Allows the sidebar menu to scroll without clipping the footer links.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.29 release.<\/li>\n<\/ul>\n\n<h4>0.4.28<\/h4>\n\n<ul>\n<li>Changes the COGS product picker to a dropdown of available products.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.28 release.<\/li>\n<\/ul>\n\n<h4>0.4.27<\/h4>\n\n<ul>\n<li>Adds a COGS portal screen for WooCommerce stores with Cost of Goods Sold enabled.<\/li>\n<li>Allows dated product COGS rows with reference, description, net, tax and gross values.<\/li>\n<li>Syncs WooCommerce's native product COGS value from the saved net COGS total.<\/li>\n<\/ul>\n\n<h4>0.4.26<\/h4>\n\n<ul>\n<li>Updates the public plugin branding to PFH Shop Manager.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.26 release.<\/li>\n<\/ul>\n\n<h4>0.4.25<\/h4>\n\n<ul>\n<li>Adds a WordPress admin menu shortcut that opens the PFH Shop Manager portal.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.25 release.<\/li>\n<\/ul>\n\n<h4>0.4.24<\/h4>\n\n<ul>\n<li>Rebrands the plugin, package slug, text domain and portal URL to PFH Shop Manager.<\/li>\n<li>Keeps the former \/shop-manager-for-woocommerce\/, \/wc-shop-manager\/ and \/woo-shop-manager\/ portal routes available as compatibility routes.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.24 release.<\/li>\n<\/ul>\n\n<h4>0.4.23<\/h4>\n\n<ul>\n<li>Hardens product image uploads and report error messages before WordPress.org submission.<\/li>\n<li>Adds Import \/ Export options for product custom fields using Meta: CSV columns.<\/li>\n<li>Adds a monthly Sales Forecast graph with separate Net, VAT and Gross lines by payment due month.<\/li>\n<li>Ships PFH Shop Manager as a single full-featured loss-leader plugin without edition package branding.<\/li>\n<li>Sends WordPress dashboard logins for PFH Shop Manager users back to the portal.<\/li>\n<li>Updates the cache-busting portal script filename for the 0.4.23 release.<\/li>\n<\/ul>\n\n<h4>0.4.22<\/h4>\n\n<ul>\n<li>Packages PFH Shop Manager 0.4.22 with the full current feature set.<\/li>\n<li>Enables reports and import\/export features in the full-featured build.<\/li>\n<\/ul>\n\n<h4>0.4.21<\/h4>\n\n<ul>\n<li>Adds customer account creation from the Customers screen.<\/li>\n<li>Sends new customers an account setup email with a secure password link.<\/li>\n<li>Adds REST and frontend regression coverage for customer account creation.<\/li>\n<\/ul>\n\n<h4>0.4.20<\/h4>\n\n<ul>\n<li>Adds configurable inactivity-based session timeouts under Users and groups.<\/li>\n<li>Warns users before automatic logout and requires Stay signed in to extend the session.<\/li>\n<li>Enforces expiry server-side for portal loads and REST requests, with regression coverage.<\/li>\n<\/ul>\n\n<h4>0.4.19<\/h4>\n\n<ul>\n<li>Prevents store theme table and form-control borders from leaking into PFH Shop Manager.<\/li>\n<li>Keeps portal table dividers and search\/form focus states neutral, using the PFH Shop Manager green accent.<\/li>\n<li>Adds frontend regression coverage for inherited table and form-control border resets.<\/li>\n<\/ul>\n\n<h4>0.4.18<\/h4>\n\n<ul>\n<li>Keeps the sidebar Sign out action readable on hover and keyboard focus.<\/li>\n<li>Styles Sign out as a compact high-contrast sidebar action.<\/li>\n<li>Adds frontend regression coverage for the sign-out hover and focus state.<\/li>\n<\/ul>\n\n<h4>0.4.17<\/h4>\n\n<ul>\n<li>Sends new PFH Shop Manager users directly to a branded, one-time password setup page.<\/li>\n<li>Adds branded password request, reset, expired-link and completion states to the portal.<\/li>\n<li>Keeps password key validation and password changes delegated to WordPress core.<\/li>\n<\/ul>\n\n<h4>0.4.16<\/h4>\n\n<ul>\n<li>Adds permanent deletion for PFH Shop Manager users from the Users screen.<\/li>\n<li>Preserves authored content and prevents deletion of administrators, mixed-role accounts and the signed-in user.<\/li>\n<li>Adds frontend and PHP regression coverage for the deletion flow and authorization boundaries.<\/li>\n<\/ul>\n\n<h4>0.4.15<\/h4>\n\n<ul>\n<li>Adds successful login and explicit logout activity to the Users screen.<\/li>\n<li>Restricts activity access to user managers and retains events for 90 days without storing IP addresses.<\/li>\n<li>Adds pagination, event filtering, user search and regression coverage for activity logging.<\/li>\n<\/ul>\n\n<h4>0.4.14<\/h4>\n\n<ul>\n<li>Prevents YITH balance orders from duplicating Best Sellers quantities and booking counts.<\/li>\n<li>Preserves deposit and completed balance payments in accumulated sales value.<\/li>\n<li>Adds regression coverage for current and legacy YITH balance-order markers.<\/li>\n<\/ul>\n\n<h4>0.4.13<\/h4>\n\n<ul>\n<li>Removes an admin-only WordPress helper from the frontend portal template.<\/li>\n<li>Prevents sales forecast schedule markup from terminating portal rendering before scripts load.<\/li>\n<li>Adds a regression check for admin-only template helpers on the frontend route.<\/li>\n<\/ul>\n\n<h4>0.4.12<\/h4>\n\n<ul>\n<li>Enforces the portal request deadline with a promise race, even when the browser does not reject an aborted fetch.<\/li>\n<li>Adds an executable regression using a request that deliberately never resolves.<\/li>\n<li>Uses a fresh script filename to bypass stale intermediary caches.<\/li>\n<\/ul>\n\n<h4>0.4.11<\/h4>\n\n<ul>\n<li>Gives portal API requests a deadline instead of leaving Products permanently loading.<\/li>\n<li>Shows an immediate product-table loading state and an actionable retry control after failures.<\/li>\n<li>Uses a new script filename to bypass stale intermediary caches.<\/li>\n<\/ul>\n\n<h4>0.4.10<\/h4>\n\n<ul>\n<li>Starts from authenticated portal markup rather than the cache-sensitive localized login flag.<\/li>\n<li>Uses a new script filename with WP Rocket and Cloudflare bypass attributes.<\/li>\n<li>Server-renders the signed-in user and keeps initialization failures visible for diagnosis.<\/li>\n<\/ul>\n\n<h4>0.4.9<\/h4>\n\n<ul>\n<li>Rebuilt directly from the proven 0.4.3 frontend plus the 0.4.4 security fixes.<\/li>\n<li>Kept startup compatible with cached 0.4.3 portal markup so Products always begins loading.<\/li>\n<\/ul>\n\n<h4>0.4.4<\/h4>\n\n<ul>\n<li>Prevented delegated user managers from creating or modifying WordPress administrators.<\/li>\n<li>Separated sales forecast schedule management from report-view permission.<\/li>\n<li>Moved generated report attachments out of public uploads and strengthened cleanup.<\/li>\n<li>Neutralized spreadsheet formulas in every CSV export.<\/li>\n<li>Added bounded CSV import, remote-image, catalog-export and report-generation workloads.<\/li>\n<li>Added anti-framing headers to the management portal.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Recalculated customer value, orders, items, ranking and last purchase for the selected purchase category.<\/li>\n<li>Updated customer CSV exports to use the selected category totals.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Added an all-time Best Sellers report ranked by accumulated value or net quantity sold.<\/li>\n<li>Added SKU, order count, average item value, categories, search and category filtering.<\/li>\n<li>Accounted for product-level refunds and added CSV export and a dedicated group permission.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added an all-time purchasing-customer report ranked by accumulated net order value.<\/li>\n<li>Added customer names, email addresses, order\/item counts, last purchase and product categories.<\/li>\n<li>Added customer search, category filtering, CSV export and a dedicated group permission.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Added editable user groups backed by native WordPress roles and capabilities.<\/li>\n<li>Added custom group creation, permission selection and safe deletion.<\/li>\n<li>Added safeguards for assigned groups, built-in groups and self-lockout.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Integrated Sales Forecast into the permission-controlled portal.<\/li>\n<li>Added received, expected and overdue summaries, detailed payment rows and potential sales by product.<\/li>\n<li>Added CSV\/PDF exports and daily, weekly or monthly scheduled email reports.<\/li>\n<li>Added Sales Forecast access for Shop Managers, Accountants and administrators.<\/li>\n<\/ul>\n\n<h4>0.1.15<\/h4>\n\n<ul>\n<li>Removed automatic SKU generation so SKUs are entered manually or left blank.<\/li>\n<\/ul>\n\n<h4>0.1.14<\/h4>\n\n<ul>\n<li>Added editable category slugs with a warning that changing a slug changes the category URL.<\/li>\n<\/ul>\n\n<h4>0.1.13<\/h4>\n\n<ul>\n<li>Deducted refunds from reported Gross sales.<\/li>\n<li>Deducted refunded VAT from Tax before calculating Net sales.<\/li>\n<\/ul>\n\n<h4>0.1.12<\/h4>\n\n<ul>\n<li>Corrected PDF invoice nonce URLs so WordPress no longer reports fresh links as expired.<\/li>\n<\/ul>\n\n<h4>0.1.11<\/h4>\n\n<ul>\n<li>Linked sales report order numbers to permission-protected PDF invoices.<\/li>\n<li>Added a responsive in-app PDF invoice popup viewer.<\/li>\n<\/ul>\n\n<h4>0.1.10<\/h4>\n\n<ul>\n<li>Displayed decoded ampersands and other HTML entities correctly in product names.<\/li>\n<\/ul>\n\n<h4>0.1.9<\/h4>\n\n<ul>\n<li>Formatted all monetary values in sales CSV exports to exactly two decimal places.<\/li>\n<\/ul>\n\n<h4>0.1.8<\/h4>\n\n<ul>\n<li>Prevented site theme hover styles from hiding shipping tab labels.<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Replaced product pagination text glyphs with reliable SVG chevrons.<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Added optional welcome emails for newly created PFH Shop Manager users.<\/li>\n<li>Welcome emails include the username, access level, portal URL and secure password-reset link.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Split sales reports into small browser-managed requests to prevent hosting timeouts.<\/li>\n<li>Isolated malformed historical orders so they cannot abort an entire report.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Restored efficient indexed WooCommerce date filtering and paged large sales reports.<\/li>\n<li>Added the server HTTP status to unexpected request errors.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Reworked sales date filtering to use paged WooCommerce order data consistently across HPOS and legacy stores.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Corrected preset sales report date ranges across site time zones and WooCommerce order storage modes.<\/li>\n<li>Prevented site theme hover styles from hiding button labels.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Prevented the WordPress admin toolbar from covering the portal sidebar.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial plugin release.<\/li>\n<\/ul>","raw_excerpt":"A focused WooCommerce management portal for shop staff who do not need access to the WordPress dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/335334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=335334"}],"author":[{"embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pfhowe"}],"wp:attachment":[{"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=335334"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=335334"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=335334"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=335334"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=335334"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/snd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=335334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}