{"id":207636,"date":"2024-11-02T04:12:57","date_gmt":"2024-11-02T04:12:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ctcl-analytics\/"},"modified":"2026-10-14T09:31:40","modified_gmt":"2026-10-14T09:31:40","slug":"ctcl-analytics","status":"publish","type":"plugin","link":"https:\/\/pirate.wordpress.org\/plugins\/ctcl-analytics\/","author":12121308,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.1.3","requires":"5.5.2","requires_php":"7.4.9","requires_plugins":null,"header_name":"CTCL Analytics","header_author":"Ujwol Bastakoti","header_description":"CT Commerce Lite ecommerce plugin's analytics","assets_banners_color":"c3d4dd","last_updated":"2026-10-14 09:31:40","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.patreon.com\/ujw0l\/membership","header_plugin_uri":"https:\/\/github.com\/ujw0l\/ctcl-analytics","header_author_uri":"https:\/\/ujw0l.github.io\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":1134,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"ujw0l","date":"2026-09-26 03:47:06","revision":3713806},"1.2.0":{"tag":"1.2.0","author":"ujw0l","date":"2026-10-14 09:31:40","revision":3745863}},"upgrade_notice":{"1.2.0":"<p>Adds filtered sales and order reporting. Refunded orders are now excluded, and month-end orders are counted correctly, so totals may differ from earlier versions.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3208132,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3208132,"resolution":"1544x500","location":"assets","locale":"","width":1444,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3208132,"resolution":"772x250","location":"assets","locale":"","width":722,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3745863,"resolution":"1","location":"assets","locale":"","width":1440,"height":1852},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3745863,"resolution":"2","location":"assets","locale":"","width":1440,"height":1496}},"screenshots":{"1":"Twelve-month item-sales overview with summary cards, comparison, line chart, and monthly report. Uses sample orders.","2":"Three-month completed-order report with an order-volume bar chart and matching summary cards. Uses sample orders."}},"plugin_section":[],"plugin_tags":[232,4108,192781,282,138902],"plugin_category":[45],"plugin_contributors":[83923],"plugin_business_model":[],"class_list":["post-207636","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-charts","plugin_tags-ctc-lite","plugin_tags-ecommerce","plugin_tags-sales-reports","plugin_category-ecommerce","plugin_contributors-ujw0l","plugin_committers-ujw0l"],"banners":{"banner":"https:\/\/ps.w.org\/ctcl-analytics\/assets\/banner-772x250.png?rev=3208132","banner_2x":"https:\/\/ps.w.org\/ctcl-analytics\/assets\/banner-1544x500.png?rev=3208132","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ctcl-analytics\/assets\/icon-256x256.png?rev=3208132","icon_2x":"https:\/\/ps.w.org\/ctcl-analytics\/assets\/icon-256x256.png?rev=3208132","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ctcl-analytics\/assets\/screenshot-1.jpg?rev=3745863","caption":"Twelve-month item-sales overview with summary cards, comparison, line chart, and monthly report. Uses sample orders."},{"src":"https:\/\/ps.w.org\/ctcl-analytics\/assets\/screenshot-2.jpg?rev=3745863","caption":"Three-month completed-order report with an order-volume bar chart and matching summary cards. Uses sample orders."}],"raw_content":"<!--section=description-->\n<p>CTCL Analytics adds an Analytics subtab to CT Commerce Lite's Information screen. Explore your store's item sales and order volume without sending order data to an external analytics service.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>View the last 3, 6, or 12 calendar months, including the current month.<\/li>\n<li>Filter pending orders, completed orders, or both.<\/li>\n<li>See item sales, order counts, average order value, and the best sales month.<\/li>\n<li>Compare item sales with the preceding period of the same length.<\/li>\n<li>Switch between sales and order charts, using line or bar views.<\/li>\n<li>Read a monthly report table with totals and weighted average order value.<\/li>\n<li>Export the selected period and status to a UTF-8 CSV file.<\/li>\n<li>Use a responsive layout with labeled controls and a report table accessible to screen readers.<\/li>\n<li>Use month boundaries in your WordPress site's timezone, including orders late on the final day of a month.<\/li>\n<li>Receive a warning when unreadable order details or invalid item totals are skipped.<\/li>\n<\/ul>\n\n<h4>What the report measures<\/h4>\n\n<p>Item sales use the stored <code>items-total<\/code> field from CT Commerce Lite orders, before tax, shipping, and order-level discounts. Average order value is item sales divided by the number of included orders. Free orders count toward the order total. Amounts are rounded to two decimal places.<\/p>\n\n<p>Refunded orders and statuses other than pending or complete are excluded. Pending orders are not proof of collected payment; choose Completed only when you want completed-order reporting. These reports do not calculate net revenue, profit, or payment settlement.<\/p>\n\n<p>The current month is partial. Comparisons use the immediately preceding equal-length period of calendar months; a partial current month may be compared with a full previous month. A comparison is unavailable when the previous period has no item sales.<\/p>\n\n<p>The plugin reads up to 24 months of order history to support a 12-month comparison. It performs one orders query per analytics request and reuses the results for the chart, cards, and table. Changing filters and exporting CSV happen in your browser.<\/p>\n\n<h4>Privacy and bundled libraries<\/h4>\n\n<p>Analytics are available only to administrators with the manage_options capability. Only monthly totals and counts are sent to the dashboard, not customer names, addresses, or individual order details.<\/p>\n\n<p>Chart.js 4.4.4 is bundled locally under the MIT license. No CDN connection or third-party analytics account is required. Chart.js source: https:\/\/github.com\/chartjs\/Chart.js\/tree\/v4.4.4<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate CT Commerce Lite.<\/li>\n<li>Upload the ctcl-analytics folder to \/wp-content\/plugins\/, or install its ZIP through Plugins &gt; Add New Plugin &gt; Upload Plugin.<\/li>\n<li>Activate CTCL Analytics through Plugins.<\/li>\n<li>Open CT Commerce &gt; Information &gt; Analytics.<\/li>\n<li>Choose a period and order status. Use Export CSV to download the selected report.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20without%20ct%20commerce%20lite%3F\"><h3>Does this work without CT Commerce Lite?<\/h3><\/dt>\n<dd><p>No. CTCL Analytics reads CT Commerce Lite's orders table and adds a subtab to its administration screen. If the parent plugin is missing, an administrator notice includes a link to find it.<\/p><\/dd>\n<dt id=\"why%20do%20totals%20differ%20from%20payment%20or%20checkout%20totals%3F\"><h3>Why do totals differ from payment or checkout totals?<\/h3><\/dt>\n<dd><p>Reports use item totals before shipping, tax, and order-level discounts. Pending orders are included by default, and refunded orders are excluded. Select Completed only to limit the report to completed orders.<\/p><\/dd>\n<dt id=\"does%20csv%20export%20follow%20my%20filters%3F\"><h3>Does CSV export follow my filters?<\/h3><\/dt>\n<dd><p>Yes. It contains the selected months and order status, with item sales, order counts, and average order value. The filename includes the period and status. UTF-8 encoding preserves localized month names, and standard CSV quoting handles commas and quotation marks.<\/p><\/dd>\n<dt id=\"can%20i%20view%20months%20with%20no%20orders%3F\"><h3>Can I view months with no orders?<\/h3><\/dt>\n<dd><p>Yes. The chart and report table retain zero-value months. If the whole selected period has no orders, the dashboard displays an empty-state message.<\/p><\/dd>\n<dt id=\"which%20wordpress%20version%20has%20been%20tested%3F\"><h3>Which WordPress version has been tested?<\/h3><\/dt>\n<dd><p>Version 1.2.0 was tested with WordPress 7.1.3, PHP 8.3, and CT Commerce Lite 2.8.3 in a local installation. Automated regression checks cover month boundaries, permissions, order parsing, calculations, and CSV output.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added 3-, 6-, and 12-month reporting, order-status filters, and sales\/order chart controls.<\/li>\n<li>Added summary cards, previous-period comparison, and a monthly report table.<\/li>\n<li>Improved CSV export with selected filters, descriptive filenames, UTF-8, standard escaping, and spreadsheet-formula protection.<\/li>\n<li>Fixed month-end order omissions and aligned month boundaries with the site timezone.<\/li>\n<li>Excluded refunded orders and handled malformed or escaped legacy order details.<\/li>\n<li>Limited analytics data and assets to the authorized store Information screen.<\/li>\n<li>Deferred dependency detection until all plugins are loaded.<\/li>\n<li>Added responsive styles, WordPress.org screenshots, and regression tests.<\/li>\n<li>Tested with WordPress 7.1.3.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Bundled Chart.js locally.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First stable version with a twelve-month sales chart and CSV export.<\/li>\n<\/ul>","raw_excerpt":"Sales and order analytics for CT Commerce Lite, with period filters, monthly charts, summary cards, and CSV reports.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/207636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=207636"}],"author":[{"embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ujw0l"}],"wp:attachment":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=207636"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=207636"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=207636"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=207636"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=207636"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=207636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}