This feature is only available in the Pro edition. Upgrade to Pro to access account history.
Pro: Account History
Account History displays a user's free download history on their WooCommerce My Account page. Users can view all their past downloads, see download dates, and re-download files—providing transparency and convenience.
Overview
The Account History feature:
- Displays user's download history on My Account page
- Shows product names, download dates, and file counts
- Provides re-download links for past downloads
- Displays download limits and remaining quota
- Integrates seamlessly with WooCommerce My Account
How It Works
Display Location
Download history appears on:
WooCommerce My Account Page:
- New tab: "Free Downloads"
- Or section within Downloads tab
- Configurable location
Shortcode:
- Display anywhere with
[somdn_user_free_downloads_history] - Custom pages
- Widgets
What Users See
Download History Table:
- Product name
- Download date
- Number of files
- Re-download button
Download Limits:
- Current usage
- Total allowance
- Remaining downloads
- Reset date
Enabling Account History
Settings Location
Go to WP Enhanced > Free Download Woo, then click Tracking in the sidebar
Enable History
- Check "Enable download tracking" (required)
- History automatically appears on My Account page
- No additional configuration needed
Requirements
Account History requires:
- Download Tracking enabled
- User must be logged in
- At least one download logged
My Account Integration
Tab Configuration
Default Behavior:
- Adds "Free Downloads" tab to My Account
- Appears after standard WooCommerce tabs
- Shows download history and limits
Customization:
// Change tab title
add_filter('somdn_account_tab_title', function($title) {
return 'My Free Downloads';
});
// Change tab priority (order)
add_filter('somdn_account_tab_priority', function($priority) {
return 25; // Higher = later in menu
});
Tab Content
The tab displays:
-
Download Limits Section (if limits enabled)
- Current downloads this period
- Total allowance
- Remaining downloads
- Reset date
-
Download History Table
- All user's downloads
- Sorted by date (newest first)
- Pagination for many downloads
Download History Table
Table Columns
Product:
- Product name
- Links to product page
- Variation name (if applicable)
Date:
- Download date and time
- Formatted per WordPress settings
- Sortable
Files:
- Number of files downloaded
- File names (optional)
- File sizes (optional)
Actions:
- Re-download button
- View details link (optional)
Pagination
For users with many downloads:
- 50 downloads per page (default) to reduce load and avoid timeouts on large histories
- Previous/Next navigation
- Page numbers
- Configurable per page count
add_filter('somdn_history_per_page', function($per_page) {
return 25; // Show 25 per page
});
The plugin loads post meta in batches (update_post_meta_cache) and caches product validity, permalink, and title for each page of results. This keeps the My Account downloads section fast even when users have hundreds or thousands of past downloads.
Sorting
Sort downloads by:
- Date (default)
- Product name
- File count
add_filter('somdn_history_orderby', function($orderby) {
return 'product_name'; // Sort by product
});
Re-Download Functionality
How Re-Download Works
When user clicks re-download:
- Validates user owns this download
- Checks download limits (if enabled)
- Retrieves original files
- Initiates download
- Logs new download (optional)
Re-Download Limits
Unlimited Re-Downloads (Default):
- Users can re-download anytime
- No additional limits
- Doesn't count toward download limits
Count Re-Downloads:
add_filter('somdn_count_redownloads', '__return_true');
This makes re-downloads count toward download limits.
Disable Re-Downloads
Prevent re-downloading:
add_filter('somdn_allow_redownload', '__return_false');
Or conditionally:
add_filter('somdn_allow_redownload', function($allow, $download_id) {
// Only allow re-download within 30 days
$download_date = get_post_time('U', false, $download_id);
$days_ago = (time() - $download_date) / DAY_IN_SECONDS;
return $days_ago <= 30;
}, 10, 2);
Download Limits Display
Limits Section
When download limits are enabled, users see:
Current Usage:
- "You have downloaded X files today"
- Real-time count
Allowance:
- "Your limit is Y downloads per day"
- Based on user's applicable limit
Remaining:
- "You have Z downloads remaining"
- Calculated automatically
Reset:
- "Your limit resets in X hours"
- Countdown to reset time
Shortcode
Display limits anywhere:
[download_limits]
Shows same information as account page.
Customization
Customize limits display:
add_filter('somdn_limits_display_text', function($text, $current, $limit, $remaining) {
return "You've used {$current} of {$limit} downloads. {$remaining} left!";
}, 10, 4);
Shortcode Usage
Display History Anywhere
Use shortcode to display history on any page:
[somdn_user_free_downloads_history]
Use Cases:
- Custom account page
- Dashboard widget
- Member portal
- Profile page
Shortcode Attributes
Limit number of downloads:
[somdn_user_free_downloads_history limit="5"]
Show only recent downloads:
[somdn_user_free_downloads_history days="30"]
Hide re-download buttons:
[somdn_user_free_downloads_history show_redownload="false"]
For Non-Logged-In Users
If user is not logged in:
- Shows login prompt
- Or custom message
- No download history displayed
add_filter('somdn_history_login_message', function($message) {
return 'Please <a href="/my-account/">log in</a> to view your download history.';
});
Customizing Display
Template Override
Override the history template:
-
Copy template from plugin:
/plugins/free-downloads-woocommerce-pro/templates/account-history.php -
Paste to theme:
/themes/your-theme/free-downloads-woocommerce/account-history.php -
Customize as needed
Custom Styling
Add custom CSS:
/* History table */
.somdn-account-history-table {
width: 100%;
border-collapse: collapse;
}
/* Table headers */
.somdn-account-history-table th {
background: #f5f5f5;
padding: 10px;
text-align: left;
}
/* Table rows */
.somdn-account-history-table td {
padding: 10px;
border-bottom: 1px solid #eee;
}
/* Re-download button */
.somdn-redownload-button {
background: #0073aa;
color: white;
padding: 8px 16px;
border-radius: 4px;
}
Hide Specific Columns
Remove columns from table:
add_filter('somdn_history_columns', function($columns) {
unset($columns['files']); // Remove files column
return $columns;
});
Add Custom Columns
Add new columns:
add_filter('somdn_history_columns', function($columns) {
$columns['product_price'] = 'Price';
return $columns;
});
add_filter('somdn_history_column_product_price', function($value, $download_id) {
$product_id = get_post_meta($download_id, 'somdn_product_id', true);
$product = wc_get_product($product_id);
return $product ? $product->get_price_html() : '';
}, 10, 2);
Privacy Considerations
User Data
Download history contains:
- Products downloaded
- Download dates
- IP addresses (in logs)
- User information
GDPR Compliance
User Rights:
- View their data (via account page)
- Export their data (via WooCommerce export)
- Delete their data (via WooCommerce erasure)
Data Retention:
- Keep only as long as needed
- Delete on user request
- Anonymize old data
Data Deletion
Delete user's download history:
// On user deletion
add_action('delete_user', function($user_id) {
$downloads = get_posts(array(
'post_type' => 'somdn_tracked',
'meta_key' => 'somdn_user_id',
'meta_value' => $user_id,
'posts_per_page' => -1,
'fields' => 'ids'
));
foreach ($downloads as $download_id) {
wp_delete_post($download_id, true);
}
});
Use Cases
Customer Service
Support Benefits:
- Verify user downloaded product
- Check download dates
- Troubleshoot download issues
- Provide re-download links
User Convenience
User Benefits:
- Access past downloads anytime
- Re-download lost files
- Track download history
- See download limits
Transparency
Trust Building:
- Show users their data
- Provide download records
- Display clear limits
- Enable self-service
Compliance
Legal Requirements:
- Provide data access
- Enable data export
- Support data deletion
- Document data usage
Troubleshooting
History Not Showing
If history doesn't appear:
- ✅ Verify tracking is enabled
- ✅ Check user is logged in
- ✅ Confirm user has downloads
- ✅ Clear all caches
- ✅ Check My Account page is working
Re-Download Not Working
If re-download fails:
- ✅ Check files still exist
- ✅ Verify user permissions
- ✅ Check download limits
- ✅ Look for PHP errors
- ✅ Test with different file
Limits Not Displaying
If limits don't show:
- ✅ Verify limits are enabled
- ✅ Check user has applicable limit
- ✅ Clear caches
- ✅ Check template override
- ✅ Look for JavaScript errors
Wrong Downloads Showing
If wrong downloads appear:
- ✅ Verify user ID is correct
- ✅ Check for user switching plugins
- ✅ Clear object cache
- ✅ Review custom filters
- ✅ Test with different user
Developer Hooks
Filters
somdn_account_tab_title
Change My Account tab title.
add_filter('somdn_account_tab_title', function($title) {
return 'Download History';
});
somdn_history_per_page
Change pagination count.
add_filter('somdn_history_per_page', function($per_page) {
return 20;
});
somdn_allow_redownload
Control re-download permission.
add_filter('somdn_allow_redownload', function($allow, $download_id) {
// Your logic
return $allow;
}, 10, 2);
somdn_history_columns
Modify table columns.
add_filter('somdn_history_columns', function($columns) {
// Add or remove columns
return $columns;
});
Actions
somdn_before_account_history
Before history table.
add_action('somdn_before_account_history', function($user_id) {
echo '<p>Your download history:</p>';
});
somdn_after_account_history
After history table.
add_action('somdn_after_account_history', function($user_id) {
echo '<p>Need help? <a href="/contact/">Contact us</a></p>';
});
somdn_redownload_success
After successful re-download.
add_action('somdn_redownload_success', function($download_id, $user_id) {
// Log re-download
}, 10, 2);
Best Practices
User Experience
- Clear display: Show relevant information
- Easy re-download: Make re-downloading simple
- Helpful limits: Display limits clearly
- Mobile friendly: Ensure mobile compatibility
Performance
- Pagination: Don't load all downloads at once
- Caching: Cache user's download count
- Efficient queries: Optimize database queries
- Lazy loading: Load history on demand
Privacy
- Secure access: Verify user permissions
- Data protection: Protect download history
- Clear policy: Document data usage
- User control: Let users manage their data
Support
- Documentation: Link to help docs
- Contact info: Provide support contact
- FAQs: Answer common questions
- Self-service: Enable user self-service
Related Topics
- Download Tracking - Required for history
- Download Limits - Limits display
- Email Capture - User data collection
- Shortcodes Reference Pro - All Pro shortcodes
- Settings Reference Pro - Complete Pro settings