{"id":333499,"date":"2026-07-01T22:11:53","date_gmt":"2026-07-01T22:11:53","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/unstoppable-voting-polls-elections\/"},"modified":"2026-06-29T11:03:55","modified_gmt":"2026-06-29T11:03:55","slug":"unstoppable-voting-polls-elections","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/unstoppable-voting-polls-elections\/","author":13116230,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.7","stable_tag":"2.0.7","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Unstoppable Voting, Polls & Elections","header_author":"Unstoppable Solutions","header_description":"Run secure polls and formal elections in WordPress \u2014 board votes, officer elections, member surveys, tournament brackets, captain voting, and more. Five ballot templates, seven sort modes, and powerful duplicate-vote prevention. Built for organizations that take voting seriously.","assets_banners_color":"012e65","last_updated":"2026-06-29 11:03:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/unstoppablesolutions.app\/plugins\/unstoppable-voting-polls-elections","header_author_uri":"https:\/\/unstoppablesolutions.app","rating":0,"author_block_rating":0,"active_installs":0,"downloads":29,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.7":{"tag":"2.0.7","author":"paramedic192","date":"2026-06-30 21:39:17"}},"upgrade_notice":{"2.0.7":"<p>Added a Privacy section to the readme. No code changes.<\/p>","2.0.6":"<p>Refactored admin-menu styling to use the WordPress enqueue API and removed admin-dashboard notices. Safe to upgrade.<\/p>","2.0.5":"<p>Final cleanup pass for Plugin Check. No functional changes. Safe to upgrade.<\/p>","2.0.4":"<p>Cleanup pass for Plugin Check warnings. No functional changes. Safe to upgrade.<\/p>","2.0.3":"<p>Internal code-quality fixes for WordPress.org Plugin Check. No functional changes. Safe to upgrade.<\/p>","2.0.2":"<p>Compatibility metadata update for WordPress 7.0. Safe to upgrade.<\/p>","2.0.1":"<p>Internal hardening and submission-readiness fixes. Safe to upgrade \u2014 all polls, votes, and settings are preserved.<\/p>","2.0.0":"<p>First WordPress.org release. If you previously installed an earlier build from Unstoppable Solutions directly, upgrading to 2.0.0 will preserve all your existing polls and votes \u2014 only the update mechanism changes.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3593223,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3593223,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3593223,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3593223,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.7"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The polls list with status pills and stat cards.","2":"The Official Ballot template \u2014 clean, formal look for elections.","3":"The Candidate Cards template \u2014 photo grid for nominees, teams, or items.","4":"The Tournament template \u2014 head-to-head matchup voting.","5":"Poll edit screen with drag-to-reorder options and per-poll settings.","6":"Admin results view with ranked options and vote distribution bars."}},"plugin_section":[],"plugin_tags":[269650,13437,3502,3503,11300],"plugin_category":[53],"plugin_contributors":[253147],"plugin_business_model":[],"class_list":["post-333499","plugin","type-plugin","status-publish","hentry","plugin_tags-ballot","plugin_tags-elections","plugin_tags-polls","plugin_tags-surveys","plugin_tags-voting","plugin_category-ratings-and-reviews","plugin_contributors-paramedic192","plugin_committers-paramedic192"],"banners":{"banner":"https:\/\/ps.w.org\/unstoppable-voting-polls-elections\/assets\/banner-772x250.png?rev=3593223","banner_2x":"https:\/\/ps.w.org\/unstoppable-voting-polls-elections\/assets\/banner-1544x500.png?rev=3593223","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/unstoppable-voting-polls-elections\/assets\/icon-128x128.png?rev=3593223","icon_2x":"https:\/\/ps.w.org\/unstoppable-voting-polls-elections\/assets\/icon-256x256.png?rev=3593223","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Unstoppable Voting, Polls &amp; Elections<\/strong> is a standalone, no-nonsense voting plugin built for the way organizations actually run elections and polls. Whether you're a non-profit electing trustees, an HOA voting on board members, a school running student government elections, a church choosing deacons, a club picking captains, or a sports league selecting tournament participants \u2014 this plugin handles it cleanly. No upsells, no \"Pro\" lock-in, no third-party services.<\/p>\n\n<h4>Who this plugin is for<\/h4>\n\n<ul>\n<li><strong>Non-profits, clubs, and associations<\/strong> running officer or board elections<\/li>\n<li><strong>HOAs and condo boards<\/strong> voting on rules, budgets, and trustees<\/li>\n<li><strong>Schools and student groups<\/strong> for student government, class polls, MVP voting<\/li>\n<li><strong>Churches and religious organizations<\/strong> electing deacons, council members, or leaders<\/li>\n<li><strong>Sports leagues<\/strong> for officer elections and tournament selections<\/li>\n<li><strong>Businesses and teams<\/strong> running internal polls or decisions<\/li>\n<li><strong>Anyone<\/strong> running a casual or formal vote on a WordPress site<\/li>\n<\/ul>\n\n<h4>Five Templates Included (all free)<\/h4>\n\n<ul>\n<li><strong>Classic Bars<\/strong> \u2014 Familiar horizontal bar chart, works on any layout<\/li>\n<li><strong>Official Ballot<\/strong> \u2014 Formal numbered-option look for elections<\/li>\n<li><strong>Candidate Cards<\/strong> \u2014 Photo + name grid, ideal for headshots, team logos, or product images<\/li>\n<li><strong>Compact List<\/strong> \u2014 Sidebar-friendly minimal style<\/li>\n<li><strong>Tournament<\/strong> \u2014 Head-to-head matchups for bracket-style voting<\/li>\n<\/ul>\n\n<h4>Seven Sort Orders (all free)<\/h4>\n\n<p>Sort options however you need: manual drag-to-reorder, alphabetical (A\u2192Z or Z\u2192A), most votes first, least votes first, random, or by date added. Most competitors paywall these \u2014 here they're standard.<\/p>\n\n<h4>Built-In Vote Integrity<\/h4>\n\n<ul>\n<li>Block duplicate voting by cookie, IP, both, or none \u2014 per poll<\/li>\n<li>Registered users are always blocked from voting twice<\/li>\n<li>Toggle guest voting on or off per poll<\/li>\n<li>Single-choice or multiple-choice with configurable max selections<\/li>\n<li>Schedule polls with optional start and end dates<\/li>\n<\/ul>\n\n<h4>Display Control<\/h4>\n\n<ul>\n<li>Show results: before voting, after voting, only when closed, or admin-only<\/li>\n<li>Format results as percent, vote count, or both<\/li>\n<li>Draft polls hidden from the public automatically<\/li>\n<\/ul>\n\n<h4>Easy to Use<\/h4>\n\n<p>Drop a poll anywhere with one shortcode: <code>[uvpe_poll id=\"123\"]<\/code> \u2014 works in posts, pages, widgets, page builders (Elementor, Gutenberg, etc.), or anywhere WordPress accepts shortcodes.<\/p>\n\n<h4>Standalone &amp; Self-Contained<\/h4>\n\n<p>No WooCommerce required. No external services. No license activation. No phone-home. Free, GPL, and self-contained.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin runs entirely on your own WordPress site. It makes no outbound HTTP requests and contacts no external services.<\/p>\n\n<p>When a visitor casts a vote, the following data is stored in your WordPress database:<\/p>\n\n<ul>\n<li>The chosen answer ID(s) and the poll ID.<\/li>\n<li>The timestamp of the vote.<\/li>\n<li>The WordPress user ID, if the visitor is logged in.<\/li>\n<li>The visitor's IP address, <strong>only if<\/strong> you have enabled the IP-based duplicate-vote prevention option on that specific poll. Polls that use cookie-only or \"no checks\" duplicate prevention do not store IPs.<\/li>\n<li>A short-lived cookie on the visitor's browser, only if you have enabled cookie-based duplicate-vote prevention on that poll.<\/li>\n<\/ul>\n\n<p>No data ever leaves your site. Deleting the plugin from the Plugins screen removes all stored poll and vote data along with the plugin's database tables and options.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via the WordPress plugin directory.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>Voting \u2192 Add New<\/strong> to create your first poll.<\/li>\n<li>Copy the shortcode from the poll edit screen and paste it into any page, post, or widget.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20require%20woocommerce%20or%20any%20other%20plugin%3F\"><h3>Does this require WooCommerce or any other plugin?<\/h3><\/dt>\n<dd><p>No. Unstoppable Voting, Polls &amp; Elections is fully standalone. It works on any WordPress site running 5.8 or newer with PHP 7.4 or newer.<\/p><\/dd>\n<dt id=\"can%20i%20let%20people%20vote%20without%20logging%20in%3F\"><h3>Can I let people vote without logging in?<\/h3><\/dt>\n<dd><p>Yes. Each poll has an <strong>Allow guest voters<\/strong> toggle. When enabled, anyone can vote (subject to your duplicate-vote settings).<\/p><\/dd>\n<dt id=\"how%20do%20you%20prevent%20duplicate%20voting%3F\"><h3>How do you prevent duplicate voting?<\/h3><\/dt>\n<dd><p>You can choose per poll: cookie-based blocking (basic, works for most sites), IP-based blocking (stricter), both combined, or no blocking at all. Logged-in users are always blocked from voting twice regardless of the setting.<\/p><\/dd>\n<dt id=\"can%20i%20see%20who%20voted%20for%20what%3F\"><h3>Can I see who voted for what?<\/h3><\/dt>\n<dd><p>The plugin stores user IDs alongside votes (for logged-in voters) so you have a record. The admin Results page shows aggregate vote counts and rankings. Detailed per-vote audit views are planned for a future release.<\/p><\/dd>\n<dt id=\"can%20i%20schedule%20polls%20to%20open%20and%20close%20automatically%3F\"><h3>Can I schedule polls to open and close automatically?<\/h3><\/dt>\n<dd><p>Yes. Each poll has optional start and end date fields. Outside that window the poll won't accept new votes.<\/p><\/dd>\n<dt id=\"is%20this%20suitable%20for%20binding%20elections%3F\"><h3>Is this suitable for binding elections?<\/h3><\/dt>\n<dd><p>The plugin gives you strong duplicate-vote prevention, scheduling, and audit-friendly result tracking \u2014 but whether a digital vote is binding depends on your organization's bylaws and applicable law. We recommend treating online voting as a recommendation tool unless your governing documents explicitly authorize it.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data if I delete the plugin?<\/h3><\/dt>\n<dd><p>Deactivating the plugin keeps all your polls and votes intact. Deleting the plugin from the Plugins screen removes all tables and options. There is no soft-delete \u2014 back up first if you want to keep your data.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20template%20styles%3F\"><h3>Can I customize the template styles?<\/h3><\/dt>\n<dd><p>Yes. All CSS uses CSS custom properties for easy overriding from your theme. The main accent color can also be changed in <strong>Voting \u2192 Settings<\/strong>.<\/p><\/dd>\n<dt id=\"can%20voters%20change%20their%20vote%20after%20submitting%3F\"><h3>Can voters change their vote after submitting?<\/h3><\/dt>\n<dd><p>Not yet. Once a vote is cast, it's locked in. A future release may add a vote-revision window for organizations that need it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.7<\/h4>\n\n<ul>\n<li>Added a \"Privacy\" section to the readme describing exactly what data the plugin stores locally (vote records, optional IPs\/cookies for duplicate-vote prevention) and confirming no data leaves the site.<\/li>\n<li>No code changes.<\/li>\n<\/ul>\n\n<h4>2.0.6<\/h4>\n\n<ul>\n<li>Replaced the admin-menu colour styles with a proper <code>wp_register_style()<\/code> + <code>wp_add_inline_style()<\/code> enqueue (no more raw <code>&lt;style&gt;<\/code> block in the admin head).<\/li>\n<li>Removed the welcome banner and review-request notice for the initial release to keep the admin dashboard fully uncluttered. Future versions may reintroduce a small, dismissible welcome notice restricted to the plugin's own settings page.<\/li>\n<li>No functional changes to polls, votes, or the shortcode.<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>Extended the schema drop-tables <code>phpcs:ignore<\/code> to also cover the <code>WordPress.DB.DirectDatabaseQuery.SchemaChange<\/code> sub-rule (schema changes are intentional in the uninstall path).<\/li>\n<li>No functional changes.<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>Second-pass Plugin Check remediation.<\/li>\n<li>Refactored vote-submission AJAX to sanitize the array inline with the <code>$_POST<\/code> access.<\/li>\n<li>Consolidated multi-line <code>$wpdb-&gt;query()<\/code> and <code>$wpdb-&gt;get_var()<\/code> calls onto single lines so the existing <code>phpcs:ignore<\/code> directives correctly cover the interpolated SQL on the same line.<\/li>\n<li>Extended the schema drop-tables <code>phpcs:ignore<\/code> to include <code>InterpolatedNotPrepared<\/code>.<\/li>\n<li>No functional changes.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Plugin Check remediation pass for WordPress.org submission.<\/li>\n<li>Inlined output escaping in the answer-row editor for scanner compatibility.<\/li>\n<li>Added explicit array sanitization on the vote-submission AJAX endpoint before integer casting.<\/li>\n<li>Added <code>wp_unslash()<\/code> to admin GET reads for poll IDs.<\/li>\n<li>Extended phpcs ignore directives on safe table-name interpolations (all values still bound via <code>$wpdb-&gt;prepare()<\/code>).<\/li>\n<li>Suppressed false-positive prefix warnings on local view\/template variables.<\/li>\n<li>No functional changes.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Updated \"Tested up to\" header to WordPress 7.0 for compatibility with the current major release.<\/li>\n<li>No functional changes.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Submission-readiness fixes for WordPress.org.<\/li>\n<li>Corrected license header in readme to the exact <code>GPL-2.0-or-later<\/code> SPDX identifier.<\/li>\n<li>Added <code>wp_unslash()<\/code> to one missed superglobal access in the admin delete handler.<\/li>\n<li>Added direct-access guards to silence-index files in every subdirectory.<\/li>\n<li>No functional changes \u2014 polls, votes, and settings are preserved.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>First release on WordPress.org. Updates are now delivered through WordPress's standard update mechanism.<\/li>\n<li>Five frontend templates: Classic Bars, Official Ballot, Candidate Cards, Compact List, Tournament.<\/li>\n<li>Seven option-sort orders: manual, alphabetical (asc\/desc), most votes, least votes, random, by date added.<\/li>\n<li>Single-choice or multiple-choice voting with configurable max selections.<\/li>\n<li>Optional poll scheduling with start and end dates.<\/li>\n<li>Duplicate-vote prevention by cookie, IP, both, or none \u2014 configurable per poll.<\/li>\n<li>Guest voting toggle per poll.<\/li>\n<li>Four result-display modes (before vote, after vote, when closed, admin-only).<\/li>\n<li>Admin Results page with rankings and vote distribution bars.<\/li>\n<li>Shortcode: <code>[uvpe_poll id=\"N\"]<\/code>.<\/li>\n<\/ul>","raw_excerpt":"Secure polls and formal elections for WordPress. Five ballot templates, powerful sorting, duplicate-vote prevention \u2014 all free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/333499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=333499"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/paramedic192"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=333499"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=333499"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=333499"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=333499"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=333499"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=333499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}