WP Subscriber Manager self-updates
WordPress plugin for subscriber management with double opt-in, CSV import/export, and spam protection
by jkurzner · github.com/jkurzner/wp-subscription-manager · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/jkurzner/wp-subscription-manager/archive/refs/heads/main.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
WP Subscriber Manager v2.1
A complete WordPress plugin for managing newsletter subscribers with double opt-in, CSV import/export, and cookie-based form hiding.
🚀 Features
Admin Interface
- Dashboard Overview: See total, confirmed, and pending subscribers at a glance
- Subscriber Listing: Full table with names, emails, status, and dates
- Bulk Actions: Select multiple subscribers and delete them at once
- Individual Actions: Delete subscribers one at a time
- Export CSV: Download all subscribers as a CSV file
- Import CSV: Upload a CSV file to bulk-add subscribers
- Real-time Updates: AJAX-powered for smooth interactions
Front-end Features
- Double Opt-in: Subscribers must confirm via email
- Cookie Tracking: Form automatically hides for subscribed users
- Duplicate Prevention: Won't allow the same email twice
- Styled Messages: Professional success/error/info messages
- Shortcode Support: Easy placement anywhere on your site
Security
- WordPress nonces for all AJAX requests
- Email validation and sanitization
- Capability checking (only admins can manage subscribers)
- SQL injection protection via prepared statements
- Unique email constraint in database
📦 Installation
- Upload the
wp-subscriber-manager.phpfile to/wp-content/plugins/ - Activate the plugin through the 'Plugins' menu in WordPress
- The database table will be created automatically
🎯 Usage
Adding the Subscription Form
Use the shortcode on any page or post:
[wsm_subscribe_form]
With custom title:
[wsm_subscribe_form title="Join Our Community"]
Always show form (even for subscribers):
[wsm_subscribe_form hide_for_subscribers="no"]
Managing Subscribers
- Go to WordPress Admin → Subscribers
- View your subscriber list with real-time stats
- Use the bulk actions or individual delete buttons
- Export or import as needed
Exporting Subscribers
- Click "Export CSV" button
- Downloads a file named
subscribers-YYYY-MM-DD.csv - Includes: Name, Email, Status (Confirmed/Pending), Date
Importing Subscribers
CSV Format:
Name,Email,Status,Date
John Doe,john@example.com,Confirmed,2024-01-01
Jane Smith,jane@example.com,Confirmed,2024-01-02
Steps:
- Click "Import CSV" button
- Select your CSV file
- Imported subscribers are automatically marked as "Confirmed"
- Duplicates are skipped
- See import results in the alert message
How Cookie Tracking Works
When a user subscribes:
- User fills out the form
- Receives confirmation email
- Clicks confirmation link
- Cookie
wsm_subscribedis set (valid for 10 years) - Form no longer displays for that browser
Cookie Details:
- Name:
wsm_subscribed - Value: MD5 hash of email (privacy-friendly)
- Duration: 10 years
- Path:
/(site-wide)
Benefits:
- Prevents repeat subscriptions
- Improves user experience
- No login required
- Privacy-friendly (hashed email)
🗄️ Database Structure
Table: wp_custom_subscribers
| Column | Type | Description |
|---|---|---|
| id | mediumint(9) | Auto-increment ID |
| name | varchar(200) | Subscriber name |
| varchar(200) | Email (unique) | |
| confirmed | tinyint(1) | 0=pending, 1=confirmed |
| token | varchar(100) | Confirmation token |
| created_at | datetime | Subscription date/time |
🎨 Styling
The plugin includes default styles that work with most themes:
Form Styling:
- Clean, modern input fields
- Blue submit button
- Mobile-responsive
- 500px max width
Message Styling:
- Success: Green background
- Error: Red background
- Info: Blue background
To customize, add CSS to your theme:
/* Override form styles */
.wsm-form {
max-width: 600px;
}
.wsm-form button {
background: #your-color;
}
/* Override message styles */
.wsm-message.success {
background: #your-color;
}
🔧 Advanced Customization
Email Confirmation Message
Edit the wsm_init function (around line 314):
$subject = 'Your Custom Subject';
$message = "Your custom message with confirmation link: " . $confirm_link;
Cookie Duration
Change cookie lifetime (currently 10 years) on line 35 and 304:
// Change to 1 year
time() + (365 * 24 * 60 * 60)
// Change to 30 days
time() + (30 * 24 * 60 * 60)
Auto-confirm Imports
By default, imported subscribers are auto-confirmed. To change this, edit line 253:
'confirmed' => 0 // Instead of 1
🐛 Troubleshooting
Form doesn't hide after subscription:
- Check if cookies are enabled in browser
- Clear browser cache
- Check
hide_for_subscribersshortcode parameter
Email not sending:
- Check WordPress email configuration
- Use an SMTP plugin (recommended)
- Check spam folder
Import not working:
- Ensure CSV is properly formatted
- Check for UTF-8 encoding
- Verify Name and Email are in first two columns
Subscribers not appearing:
- Check database table exists:
wp_custom_subscribers - Verify plugin is activated
- Check for JavaScript errors in browser console
📋 CSV Import Template
Download or create a CSV file with this format:
Name,Email,Status,Date
John Smith,john@example.com,Confirmed,2024-01-15
Sarah Johnson,sarah@example.com,Confirmed,2024-01-16
Mike Williams,mike@example.com,Confirmed,2024-01-17
Notes:
- Header row is required (but skipped during import)
- Status and Date columns are ignored (for export compatibility)
- Only Name and Email are imported
- All imported subscribers are auto-confirmed
🔒 Privacy & GDPR
Cookie Usage:
- Only stores hashed email (not personally identifiable)
- Used solely for form display logic
- Can be cleared by user
- No tracking or analytics
Data Storage:
- All data stored locally in your WordPress database
- No third-party services
- Full control over data
Recommendations:
- Add to privacy policy
- Include unsubscribe option in emails
- Regular data cleanup
- Inform users about cookie usage
📝 Changelog
Version 2.1
- Added complete admin interface with subscriber listing
- Implemented CSV export functionality
- Implemented CSV import functionality
- Added cookie-based subscription tracking
- Added bulk delete actions
- Added individual delete buttons
- Added statistics dashboard
- Improved duplicate email handling
- Added email validation
- Added AJAX for smooth UX
- Enhanced security with nonces
- Added unique email constraint
- Improved error messaging
Version 2.0
- Initial double opt-in implementation
- Basic form handling
🤝 Support
For issues or questions:
- Check the Troubleshooting section
- Review WordPress error logs
- Verify all requirements are met
📄 License
This plugin is provided as-is. Use at your own discretion.
Author: jkurzner
Website: https://mindshaft.com
Version: 2.1