Title: WPHostee Competitions for WooCommerce
Author: WPHostee
Published: <strong>September 5, 2026</strong>
Last modified: September 5, 2026

---

Search plugins

![](https://ps.w.org/wphostee-competitions-for-woocommerce/assets/icon.svg?rev=3682481)

# WPHostee Competitions for WooCommerce

 By [WPHostee](https://profiles.wordpress.org/baicu4design/)

[Download](https://downloads.wordpress.org/plugin/wphostee-competitions-for-woocommerce.1.9.17.zip)

 * [Details](https://wordpress.org/plugins/wphostee-competitions-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/wphostee-competitions-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/wphostee-competitions-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/wphostee-competitions-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/wphostee-competitions-for-woocommerce/)

## Description

WPHostee Competitions turns any WooCommerce store into a prize competition platform.
Customers buy tickets like a normal product; you run a fair, provably random draw
whenever a competition closes.

Built with three things in mind: **no overselling**, **no unfair draws**, and **
a full audit trail** of everything that happens.

#### Core features (free)

 * A dedicated Competition product type – sells and checks out exactly like any 
   other WooCommerce product
 * Race-condition-safe ticket allocation – two customers can never be issued the
   same ticket number, even buying the last few tickets at the exact same moment
 * Sequential ticket numbering, formatted with configurable leading zeros
 * A cryptographically random draw (never a predictable `rand()`), with the exact
   eligible-entry list hashed and logged for later verification
 * Built-in support for the skill-question requirement UK prize competitions need
   to stay legally distinct from a lottery
 * Full admin toolkit: Dashboard, All Competitions, Entries, Ticket Reservations,
   Draws, and Winners (claim status, tracking number, notes, and a fully-audited
   Void & Redraw)
 * Customer-facing “My Competitions” tab in My Account, plus countdown, progress-
   bar, and competition-facts shortcodes
 * Run as many competitions at once as you like, all sequential-numbered – the free
   tier is genuinely usable on its own, not a crippled trial
 * Compatible with WooCommerce High-Performance Order Storage (HPOS)

#### WPHostee Competitions Pro

A separate, paid companion plugin unlocks: Random (Lucky Dip) ticket assignment 
and manual ticket selection, a Free Postal Entry route, per-customer/order/day entry
limits, Reports with CSV export, a full Audit Log viewer, a REST API, Elementor 
widgets, and a winner publicity/consent workflow with automatic emails. Free works
completely on its own without it – Pro is entirely optional.

## Installation

 1. Upload the plugin files to `/wp-content/plugins/wphostee-competitions`, or install
    directly through the WordPress Plugins screen.
 2. Make sure WooCommerce is installed and active – this plugin requires it.
 3. Activate the plugin through the “Plugins” screen in WordPress.
 4. Go to Competitions  Settings to set your ticket reservation timeout and default
    numbering options.
 5. Create a competition: add a new WooCommerce product, set its Product type to “Competition,”
    and fill in the Competition tab.

## FAQ

### Do I need WooCommerce for this to work?

Yes. Competitions are a WooCommerce product type, so they use your existing cart,
checkout, payment gateways, and order emails.

### Can two customers ever be sold the same ticket number?

No. Ticket allocation is protected by a database row lock plus a unique constraint
at the database level, so even the very last ticket in a competition can’t be double-
sold under simultaneous purchases.

### How is the draw kept fair?

The draw uses PHP’s cryptographically secure random number generator, never a predictable
function. The exact list of eligible tickets is hashed and recorded in the Audit
Log at the moment of the draw, so the result can be independently checked afterwards.

### Can I run more than one competition at a time?

Yes, the free version has no limit on how many competitions can be active at once.

### Does this delete customer data if I uninstall the plugin?

No, not by default. Competition, entry, and winner data is kept even if you remove
the plugin, unless you explicitly opt in to full deletion under Competitions  Settings
Privacy.

### Is this compatible with High-Performance Order Storage (HPOS)?

Yes, the plugin declares and works correctly with HPOS.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“WPHostee Competitions for WooCommerce” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ WPHostee ](https://profiles.wordpress.org/baicu4design/)

[Translate “WPHostee Competitions for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/wphostee-competitions-for-woocommerce)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/wphostee-competitions-for-woocommerce/),
check out the [SVN repository](https://plugins.svn.wordpress.org/wphostee-competitions-for-woocommerce/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/wphostee-competitions-for-woocommerce/)
by [RSS](https://plugins.trac.wordpress.org/log/wphostee-competitions-for-woocommerce/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.9.17

 * Addressed WordPress.org plugin review feedback: every place this plugin echoes
   HTML built by its own helper functions, or reached through a public filter (e.
   g. wphc_winner_photo_html, wphc_free_entry_tab_html), is now run through wp_kses()
   right at the point it’s echoed, rather than only trusting that the function/filter
   producing it was already safe. Also removed a small admin tooltip’s inline onmouseover/
   onfocus JavaScript attributes (replaced with plain CSS hover/focus) since escaping
   can’t legitimately allow those through.
 * Removed the “pob_” shortcode aliases ([pob_competitions] etc., kept since 1.7.0
   for backward compatibility with this plugin’s original naming) – WordPress.org
   review does not allow a generic, non-unique prefix anywhere, including a legacy
   alias. No page on wphostee.co.uk currently uses them; if you have an old page
   that does, replace [pob_competitions] with [wphc_competitions] (and similarly
   for any other pob_ shortcode) – the current tag names are unaffected.

#### 1.9.16

 * Added a couple of small extensibility hooks around competition closing, used 
   by the Pro add-on’s new “Minimum tickets” feature (automatically extending a 
   competition past its closing date until enough tickets have sold, rather than
   closing early with too few entries). No behaviour change without Pro – “Minimum
   tickets” remains purely informational on its own.

#### 1.9.15

 * Fixed: on the [wphc_competitions] grid, the countdown/entries-sold/Enter Competition
   block inside each card could render off to one side instead of matching the card’s
   normal centred layout. Root cause was our own content rendering while the theme’s
   title/image link was technically still open (invalid nested markup, since our
   block also includes its own link) – moved it to render after that link properly
   closes, and gave it the same “stretch to the card’s full width” treatment WooCommerce’s
   own price/title elements already get, rather than inventing any alignment of 
   our own.

#### 1.9.14

 * Fixed: on a block theme, the [wphc_competitions] product grid could render noticeably
   narrower than the Shop page – it now stretches to the same wide content width
   Shop itself uses. If you already have the shortcode on a page from an earlier
   version, re-selecting that page in Settings > “Competitions page” and saving 
   won’t reapply this (the shortcode’s already there) – wrap it yourself in a Group
   block set to “Wide width” in the page editor, or remove it and let Settings add
   it again.

#### 1.9.13

 * Choosing a page in Settings > “Competitions page” now automatically adds the [
   wphc_competitions] shortcode to that page if it isn’t already there, every time
   Settings is saved – no need to add it yourself. It’s only ever added, never removed
   automatically (removing it is a manual step in the page editor, same as switching
   back to “None” only stops excluding competitions from the Shop page and doesn’t
   touch the page’s content).

#### 1.9.12

 * Fixed: clicking “Save Changes” on the Settings screen could silently do nothing
   at all. The “Payment Sync” section’s own small form was nested inside the main
   settings form – invalid HTML that browsers handle by closing the outer form early,
   leaving everything below it (including the real Save Changes button) outside 
   any form and unable to submit. Moved that section to its own space outside the
   main form.

#### 1.9.11

 * The [wphc_competitions] shortcode now renders a full product grid matching the
   Shop page – the same card styling, a working sorting dropdown (Default/popularity/
   rating/latest/price), results count, and pagination, all built in. No extra setup
   needed: just place the shortcode on any page.
 * Settings has a “Competitions page” option again – pick the page carrying your[
   wphc_competitions] shortcode to keep competitions off the main Shop page (for
   stores that also sell ordinary products there).

#### 1.9.10

 * (Superseded by 1.9.11 – the “Competitions” category approach below was replaced
   with the simpler shortcode-based one above.)

#### 1.9.8

 * Fixed: the product photo on the Basket page (a ticket entry sitting alongside
   an ordinary product) could look blurred, since it was being shown much larger
   than the underlying image file – it’s now shown at a fixed, sharp 100x100px.
 * Fixed: a basket containing both a competition ticket and an ordinary product 
   incorrectly labelled every row’s photo as a ticket and relabelled the whole “
   Product” column – both now only apply to the competition ticket row(s).

#### 1.9.5

 * Fixed: when choosing specific ticket numbers (Pro), picking a second or third
   ticket did nothing unless the quantity box had already been increased to match
   first. The quantity (and running total) now updates automatically to match however
   many tickets are picked, up to the competition’s own per-order limit.

#### 1.9.4

 * The competition’s short description (set on the product’s “short description”
   field, same as any other WooCommerce product) now shows directly under the title,
   instead of further down the page below the price and ticket details.
 * The upgrade link shown in the free plugin now points straight to this plugin’s
   own Pro store page.

#### 1.9.3

 * The price shown on a competition now makes clear it’s the price per ticket, and
   the running total while choosing quantity now makes clear it’s the total for 
   the tickets selected.
 * Added explanatory tooltips to the “minimum tickets”, “maximum tickets” and “one
   winner” facts shown on a competition page.
 * Removed the standalone “This is the price for 1 ticket” note, now covered by 
   the price label above.
 * Fixed: WooCommerce’s own default “Add to basket”-style button could appear a 
   second time underneath this plugin’s own “Enter Competition” button on the Shop
   page grid, depending on the active theme. Suppressed at the WooCommerce level
   so it can’t reappear regardless of theme.
 * Fixed: on themes that build the Shop page out of separate WooCommerce blocks (
   e.g. Twenty Twenty-Five), the price could be shown out of place below the “Enter
   Competition” button instead of above it like every other product.

#### 1.9.1

 * WordPress.org Plugin Check compliance pass: fixed every flagged error and warning,
   including proper escaping in a handful of admin/shortcode outputs, a missing 
   translators comment, corrected escaping in the plain-text email templates, normalised
   corrupted line endings in several files, and removed a now-unnecessary load_plugin_textdomain()
   call (WordPress.org loads translations for hosted plugins automatically). No 
   functional changes.

#### 1.9.0

 * Removed the “one active competition at a time” limit – run as many simultaneous
   competitions as you like, free of charge.
 * Random (Lucky Dip) ticket assignment is now implemented entirely by the separate
   Pro companion plugin rather than being built into this plugin and merely gated–
   this plugin only ever assigns tickets sequentially on its own.

#### 1.8.0

 * WordPress.org review housekeeping: bumped Tested up to, renamed the text domain
   to match the assigned plugin slug, replaced a disabled admin checkbox with a 
   plain-text note, escaped a shortcode’s filter-provided output, made the Winners
   claim-status labels genuinely translatable, added a missing nonce check on the
   ticket-reservation add-to-cart flow, sanitized data passed into two extensibility
   filters, and moved two remaining inline admin scripts/styles to proper wp_enqueue_*
   calls.

#### 1.7.1

 * The author credit shown on the Plugins screen now reads “Catalin Baicu @ WPHostee”,
   with only “WPHostee” linked.

#### 1.7.0

 * Renamed the plugin’s internal database tables and settings keys from the too-
   short “pob_” prefix (a leftover from this plugin’s earlier life as a single-client
   build) to “wphc_”, per WordPress.org plugin review requirements. Existing data
   migrates automatically and safely on update – no action needed. Old shortcode
   names ([pob_competitions] etc.) keep working indefinitely as aliases, so no existing
   page content needs to change. (The “pob_” shortcode aliases mentioned here were
   themselves removed in a later version below – they were still a generic, non-
   unique prefix, which WordPress.org review does not allow even as a backwards-
   compatible alias.)

#### 1.6.1

 * Fixed: the maximum-tickets-per-order limit was only enforced on the product page–
   the Basket page’s own quantity control had no idea it existed, letting a customer
   increase quantity past it after adding to basket. Now enforced by WooCommerce
   itself everywhere a quantity can be changed.

#### 1.6.0

 * Fixed: entries could stay stuck showing “pending” forever for manual payment 
   methods (Bank Transfer/BACS, Cheque), even after the order was correctly marked
   Processing/Completed – WooCommerce doesn’t fire the hook we relied on for a manual
   admin status change, only for gateways that confirm payment automatically.
 * Added a “Payment Sync” tool on Settings that safely re-checks and fixes any entries
   left behind by the above, for existing orders.

#### 1.5.1

 * Fixed: the “Live”/”Closed” countdown badge could show both at once on themes 
   that don’t reset the HTML `hidden` attribute, since our own CSS wasn’t respecting
   it.

#### 1.5.0

 * Each winner card on the admin Winners screen now shows a 115×115 round profile
   photo, always visible regardless of collapsed/expanded state – the customer’s
   account avatar by default (WPHostee Competitions Pro can substitute a photo uploaded
   specifically for the public winners list).

#### 1.4.0

 * The admin Winners screen now shows collapsible cards (each starts collapsed, 
   click to expand/collapse, plus “Expand all”/”Collapse all”), filters by competition,
   month, year, and city, and paginates at 10 winners per page – built for stores
   with large numbers of winners.

#### 1.3.0

 * Fixed: a mandatory competition question now actually requires the _correct_ answer
   to proceed to checkout – previously any selected answer was accepted, only a 
   blank answer was blocked.
 * Added help tooltips explaining “Maximum tickets,” “Minimum tickets,” and every
   field in the Competition Question section.

#### 1.2.0

 * Added help tooltips explaining “When sold out,” “Starting ticket number,” “Ticket
   assignment,” and “Manual ticket selection” on the Competition tab.

#### 1.1.0

 * New “Competition Rules” tab on the product page – per-competition, supports plain
   text, HTML, or shortcodes, only shown when rules text is entered.
 * The “Enter Competition” button, quantity selector, and total price now sit inline
   on the same row.
 * Relabelled “Related products” to “Other Related Competitions” on competition 
   product pages.

#### 1.0.3

 * Fixed the admin menu icon rendering oversized in the sidebar.

#### 1.0.2

 * New custom admin menu icon.

#### 1.0.1

 * Updated the “Upgrade to Pro” link destination.

#### 1.0.0

 * Initial public release.

## Meta

 *  Version **1.9.17**
 *  Last updated **9 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [competitions](https://wordpress.org/plugins/tags/competitions/)[giveaways](https://wordpress.org/plugins/tags/giveaways/)
   [prize draw](https://wordpress.org/plugins/tags/prize-draw/)[raffle](https://wordpress.org/plugins/tags/raffle/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/wphostee-competitions-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/wphostee-competitions-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/wphostee-competitions-for-woocommerce/reviews/)

## Contributors

 *   [ WPHostee ](https://profiles.wordpress.org/baicu4design/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/wphostee-competitions-for-woocommerce/)