Messenger Polls
A premium, Messenger-style polling plugin. Create polls, vote instantly and watch animated results.
by Minhajul Khan · github.com/mktapphub/wordpress-voting-system-plugin · 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/mktapphub/wordpress-voting-system-plugin/archive/refs/heads/main.zipReadme
=== Messenger Polls === Contributors: Minhajul Khan Tags: polls, voting, ajax, messenger, ui Requires at least: 5.8 Tested up to: 6.6 Requires PHP: 7.4 Stable tag: 1.0.0
A 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.