Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/mktapphub/wordpress-voting-system-plugin/archive/refs/heads/main.zipA premium, Messenger-style polling plugin. Create polls, vote instantly. just clean, secure, prepared-statement SQL against custom tables.
Description
Messenger Polls lets you drop beautiful, chat-app-style voting cards anywhere on your WordPress site with a single shortcode.
Features
- Create polls with 2+ options, single- or multi-select
- Instant AJAX voting — zero page reloads (uses
admin-ajax.php, not the REST API) - Animated, Messenger-inspired results bars
- Toast notifications, loading spinners, smooth transitions
- One vote per person, enforced at the database level (unique constraint), plus rate limiting
- Fully responsive, mobile-first, rounded-card UI
- Optional poll expiry / auto-close
- Optional "view results before voting"
- Simple, dependency-free admin screen for creating and managing polls
- Custom database tables — no bloating
wp_postmeta
Shortcode
Security
- All SQL uses
$wpdb->prepare()/insert()/update()with explicit format specifiers — no string-concatenated queries - Every AJAX request is nonce-verified, scoped to the specific poll ID
- Option IDs are re-validated server-side against the poll they're submitted for (prevents cross-poll vote injection)
- Duplicate votes are blocked by a database UNIQUE constraint (race-condition safe), not just client-side checks
- Guest voters are identified by a salted, one-way hash — raw IP addresses are never stored
- All admin actions require
manage_options(filterable) plus a scoped nonce - All output is escaped with
esc_html()/esc_attr()/esc_url()
Installation
- Upload the
messenger-pollsfolder to/wp-content/plugins/. - Activate the plugin through the "Plugins" menu in WordPress.
- Go to the new "Polls" menu item to create your first poll.
- Copy the generated shortcode into any post, page, or widget.
Frequently Asked Questions
Does this call any external APIs?
No. Everything runs through WordPress's own admin-ajax.php endpoint against your own database.
Can a user vote twice?
No — voting is enforced by a unique database constraint per poll + voter fingerprint (logged-in user ID, or a salted hash for guests), so it holds up even under concurrent requests.
What happens to poll data if I delete the plugin?
By default, poll data is preserved even if you delete the plugin, to prevent accidental data loss. Define MP_REMOVE_DATA_ON_UNINSTALL as true in wp-config.php if you want full cleanup on uninstall.
Changelog
1.0.0
- Initial release.