{"id":347629,"date":"2026-08-04T02:33:48","date_gmt":"2026-08-04T02:33:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/a1-woocog\/"},"modified":"2026-08-04T14:05:55","modified_gmt":"2026-08-04T14:05:55","slug":"a1-profit-reports-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/a1-profit-reports-for-woocommerce\/","author":23539502,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.8","stable_tag":"1.2.8","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"A1 Profit Reports for WooCommerce","header_author":"A1 Plugins","header_description":"Profit tracking for WooCommerce, built on WooCommerce's native Cost of Goods Sold field \u2014 profit columns, order margins, and a date-range report.","assets_banners_color":"","last_updated":"2026-08-04 14:05:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/a1plugins.com\/a1-profit-reports-for-woocommerce\/","header_author_uri":"https:\/\/a1plugins.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":30,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.8":{"tag":"1.2.8","author":"a1plugins","date":"2026-08-04 14:05:55"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3634246,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3634246,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3634246,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.8"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[132181,11938,6882,3652,286],"plugin_category":[45],"plugin_contributors":[274392],"plugin_business_model":[],"class_list":["post-347629","plugin","type-plugin","status-publish","hentry","plugin_tags-cost-of-goods","plugin_tags-margin","plugin_tags-profit","plugin_tags-reporting","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-a1plugins","plugin_committers-a1plugins"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/a1-profit-reports-for-woocommerce\/assets\/icon.svg?rev=3634246","icon":"https:\/\/ps.w.org\/a1-profit-reports-for-woocommerce\/assets\/icon.svg?rev=3634246","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>A1 Profit Reports for WooCommerce adds the reporting layer WooCommerce's own Cost of Goods Sold feature doesn't provide:<\/p>\n\n<ul>\n<li>Sortable Profit and Margin columns on the product list.<\/li>\n<li>A Profit row on every order, and a Profit column on the orders list \u2014 refund-aware.<\/li>\n<li>A date-range Cost of Goods report: summary cards, a per-product profit breakdown, and CSV export.<\/li>\n<li>Quick-select date presets (Last 30 Days, This Month, This Quarter, Last Quarter, This Year, Last Year).<\/li>\n<li>A tool to recalculate historical cost for orders that predate Cost of Goods tracking.<\/li>\n<li>Configurable order statuses for what counts as a sale in reports.<\/li>\n<\/ul>\n\n<p>This plugin reads and writes cost data through WooCommerce's own Cost of Goods Sold field (<code>WC_Product::get_cogs_value()<\/code> \/ <code>get_cogs_total_value()<\/code>), so cost entry, Quick Edit, and Bulk Edit all work the way they already do in WooCommerce \u2014 this plugin doesn't duplicate that, it reports on top of it.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WooCommerce 9.5 or newer (this plugin reports on top of WooCommerce's own native Cost of Goods Sold field, which isn't available on older versions).<\/li>\n<li>WooCommerce's Cost of Goods Sold feature must be enabled (WooCommerce \u2192 Settings \u2192 Advanced \u2192 Features). The plugin turns this on automatically on activation.<\/li>\n<\/ul>\n\n<h4>Scale<\/h4>\n\n<p>Not recommended for stores exceeding roughly 10,000 sales\/month, particularly when using wide date ranges like \"This Year\" \u2014 report data is cached, but a first-time computation over a very large order volume can still be slow.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/a1-profit-reports-for-woocommerce<\/code>, or install through the WordPress admin's Plugins screen.<\/li>\n<li>Activate the plugin. This automatically enables WooCommerce's Cost of Goods Sold feature if it isn't already on.<\/li>\n<li>Set a cost on your products (Product data \u2192 Pricing, or via Quick Edit \/ Bulk Edit).<\/li>\n<li>Find your report under WooCommerce \u2192 Cost of Goods.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20don%27t%20i%20see%20cost%20data%20on%20old%20orders%3F\"><h3>Why don't I see cost data on old orders?<\/h3><\/dt>\n<dd><p>Orders placed before the Cost of Goods feature was enabled never had a cost snapshotted. Use the \"Recalculate Historical Cost for This Range\" button on the report page \u2014 it applies each product's <em>current<\/em> cost retroactively. This is an approximation, not a historical record: if a product's cost has changed since the sale, the recalculated value won't match what it actually cost at the time.<\/p><\/dd>\n<dt id=\"why%20is%20the%20report%20missing%20cost%20for%20some%20products%3F\"><h3>Why is the report missing cost for some products?<\/h3><\/dt>\n<dd><p>The report flags products sold in the period that currently have no Cost of Goods value set. They're counted at $0 cost until you add one.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Fix: <code>Plugin URI<\/code> in the plugin header still pointed at the pre-rename <code>\/a1-woocog\/<\/code> URL (404, flagged in wp.org review round 2) \u2014 now points to <code>\/a1-profit-reports-for-woocommerce\/<\/code>.<\/li>\n<li>Add: <code>Requires Plugins: woocommerce<\/code> header, per the reviewer's optional suggestion.<\/li>\n<li>Fix: the (Pro-only) report page's date-preset <code>&lt;select&gt;<\/code> had its JS in a hardcoded <code>&lt;script&gt;<\/code> tag instead of being enqueued. This file is excluded from the free\/wp.org build by Freemius's <code>__premium_only<\/code> code-stripping (confirmed empirically against the built free zip \u2014 the file, and every <code>&lt;script&gt;<\/code> tag, is absent), but it does ship in the premium build, so fixed it the same way as the earlier product-list CSS finding: registered\/enqueued via <code>wp_enqueue_script()<\/code>\/<code>wp_add_inline_script()<\/code>.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Packaging: added <code>premium_slug<\/code> and <code>wp_org_gatekeeper<\/code> to the Freemius <code>fs_dynamic_init()<\/code> config, per Freemius's dashboard after the plugin rename. No functional change.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Rename the Freemius-provided \"Account\" submenu item (WooCommerce \u2192 Account) to \"A1 Profit\" so it's identifiable as belonging to this plugin instead of reading as a generic, unrelated menu item.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Rename: renamed from \"A1-WooCOG\" to \"A1 Profit Reports for WooCommerce\" (wp.org review round 2) \u2014 the reviewer flagged the old name for fusing WooCommerce's \"Woo\" trademark into the plugin name in a way that implies affiliation. Text domain changed to <code>a1-profit-reports-for-woocommerce<\/code> to match. Internal constants, function\/class prefixes, database meta keys, and the Freemius product slug (tied to existing license records) are unchanged.<\/li>\n<li>Fix: the product list's column-width CSS (<code>admin_head-edit.php<\/code> printing a raw <code>&lt;style&gt;<\/code> tag) is now registered and enqueued via <code>wp_enqueue_style()<\/code>\/<code>wp_add_inline_style()<\/code>, per WordPress.org's Plugin Check.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Fix: WordPress.org's automated submission scan hard-blocked on the bundled Freemius SDK's update-checking code (<code>plugin_updater_detected<\/code>). Per Freemius support, this check is waived for SDKs placed under a <code>vendor\/<\/code> folder \u2014 moved the SDK from <code>freemius\/<\/code> to <code>vendor\/freemius\/<\/code> (matching A1-WooBay's existing structure) and updated the bootstrap require path accordingly. No functional change.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fix: <code>Plugin URI<\/code> and <code>Author URI<\/code> in the plugin header were identical, which WordPress.org's submission check rejects. <code>Plugin URI<\/code> now points to the plugin's own product page (https:\/\/a1plugins.com\/a1-woocog\/) instead of duplicating the author\/company URL.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>No functional\/behavior changes. Adds a checked-in release build script (bin\/build-release.sh, excluded from the shipped zip itself) replacing an ad-hoc manual process \u2014 version bump needed only so Freemius has a distinct build to stage after 1.2.1 was already uploaded.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix: plugin header was missing the required <code>License<\/code>\/<code>License URI<\/code> lines (found by WordPress.org's Plugin Check tool).<\/li>\n<li>Fix: <code>wc_price()<\/code> output (which returns HTML) was echoed unescaped in several places \u2014 the report page, the order detail Profit row, the orders list Profit column, and the product list Profit column. All wrapped in <code>wp_kses_post()<\/code>.<\/li>\n<li>Packaging: release zips now also exclude <code>.gitignore<\/code> (in addition to the dev-only files already excluded).<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>WordPress.org submission compliance (Guideline 5, no trialware): the Cost of Goods Report is now removed entirely from the free build via Freemius's code-stripping (<code>__premium_only<\/code>), not just gated behind a license check. <code>has_premium_version<\/code> is now true \u2014 Freemius generates a separate free zip (for wp.org) and premium zip (for paying\/trial customers). Existing customers who unlocked Pro in-place under the old model now need to download and install the separate premium zip from their Freemius account instead.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Add a \"Profit by Product\" bar chart to the report page (top 10 products by profit), rendered with plain CSS \u2014 no charting library added, to keep the plugin lightweight. CSV export is unchanged.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix: license activation had no visible entry point. Freemius silently defaulted <code>has_premium_version<\/code> to match <code>has_paid_plans<\/code> (true) since it was never set, so the plugin was treated as a dual-zip product requiring a separate premium download instead of unlocking Pro in place. Set <code>has_premium_version<\/code> to false and added a proper Account menu (nested under WooCommerce) so \"Activate License\" now appears on the Plugins page as expected.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Connect the real Freemius product (id 35412, slug a1-woocog) - license activation and updates now work.<\/li>\n<li>Add free\/Pro gating: the Cost of Goods Report page (summary, per-product breakdown, CSV export, historical recalculation, and settings) is now a Pro feature. Profit and Margin columns stay free on every plan.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Add Freemius SDK integration scaffolding (licensing\/updates), pending the real Plugin ID and Public Key.<\/li>\n<li>Add this readme.txt with a proper changelog.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Fix: Profit\/Margin columns silently failed to render on the product list, due to a WooCommerce filter-priority conflict.<\/li>\n<li>Removed the redundant Cost column\/row now duplicated by WooCommerce's own native Cost of Goods Sold display.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Add a tool to recalculate historical cost for orders that predate Cost of Goods tracking.<\/li>\n<li>Add configurable order statuses for what counts as a sale in reports.<\/li>\n<\/ul>\n\n<h4>0.2.4<\/h4>\n\n<ul>\n<li>Cache report data for performance, invalidated automatically on order status changes and refunds.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>Add quick-select date range presets to the report page.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Fix: cost\/profit\/margin cache now syncs when a product is created, not just when it's updated.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Add uninstall cleanup for the plugin's own cached data.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Migrate to WooCommerce's native Cost of Goods Sold field instead of a custom cost field. Adds refund-aware profit calculations and native Quick Edit \/ Bulk Edit support for cost.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Add CSV export to the Cost of Goods report.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fix sortable Cost\/Profit\/Margin product columns.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: cost tracking, profit columns, and a date-range report.<\/li>\n<\/ul>","raw_excerpt":"Profit tracking for WooCommerce, built on WooCommerce&#039;s native Cost of Goods Sold field \u2014 profit columns, order margins, and a date-range report.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347629","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=347629"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/a1plugins"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347629"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347629"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347629"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347629"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347629"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}