{"id":361853,"date":"2026-09-25T09:24:48","date_gmt":"2026-09-25T09:24:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/presale-waitlist-for-woocommerce\/"},"modified":"2026-09-25T09:24:29","modified_gmt":"2026-09-25T09:24:29","slug":"tymok-presale-waitlist-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tymok-presale-waitlist-for-woocommerce\/","author":14087179,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.1.2","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"tymok Presale Waitlist for WooCommerce","header_author":"Ralf Fangmeier","header_description":"Replaces the add-to-cart button on selected products with a waitlist: quota of places, customer registration and single-use invitation links for a priority purchase.","assets_banners_color":"1f2a4e","last_updated":"2026-09-25 09:24:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/fangmeier.net\/presale-waitlist\/en\/","header_author_uri":"https:\/\/fangmeier.net\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":31,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"rudi52001","date":"2026-09-25 09:24:29","revision":3712754}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3712754,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3712754,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3712754,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3712754,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3712754,"resolution":"1","location":"assets","locale":"","width":1280,"height":915}},"screenshots":{"1":"The waitlist form replaces the add-to-cart button on the product page."}},"plugin_section":[],"plugin_tags":[9777,224949,269338,4422,286],"plugin_category":[45],"plugin_contributors":[282686],"plugin_business_model":[],"class_list":["post-361853","plugin","type-plugin","status-publish","hentry","plugin_tags-invitation","plugin_tags-presale","plugin_tags-product-launch","plugin_tags-waitlist","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-rudi52001","plugin_committers-rudi52001"],"banners":{"banner":"https:\/\/ps.w.org\/tymok-presale-waitlist-for-woocommerce\/assets\/banner-772x250.png?rev=3712754","banner_2x":"https:\/\/ps.w.org\/tymok-presale-waitlist-for-woocommerce\/assets\/banner-1544x500.png?rev=3712754","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tymok-presale-waitlist-for-woocommerce\/assets\/icon-128x128.png?rev=3712754","icon_2x":"https:\/\/ps.w.org\/tymok-presale-waitlist-for-woocommerce\/assets\/icon-256x256.png?rev=3712754","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tymok-presale-waitlist-for-woocommerce\/assets\/screenshot-1.png?rev=3712754","caption":"The waitlist form replaces the add-to-cart button on the product page."}],"raw_content":"<!--section=description-->\n<p>Some products should not simply go to whoever refreshes the page fastest: a limited\ndrop, a hand-made batch, an advent calendar. This plugin turns those products into a\nmanaged queue.<\/p>\n\n<p>Switch the waitlist on for a product and nobody can order it any more. The add-to-cart\nbutton is replaced by a sign-up form. When you are ready, you invite people from the\nlist, one by one or in batches. Each invitation unlocks the product for exactly one\ncustomer account, for a limited quantity and a limited time. After the purchase, or\nafter the deadline, the right to buy is gone and the next person can move up.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Blocks the product for everyone while the waitlist is running<\/li>\n<li>Quota of places per product; the list closes itself when it is full<\/li>\n<li>Shows the remaining places, the full ratio, or nothing at all<\/li>\n<li>Customers sign up with their shop account (created on the spot if your shop allows registration)<\/li>\n<li>Single-use invitation links: one account, a limited quantity, a deadline<\/li>\n<li>Expired invitations are released automatically by a scheduled task<\/li>\n<li>Admin overview with bulk invitations and CSV export<\/li>\n<li>A \"My waitlists\" section in the customer account<\/li>\n<li>Templates and hooks for your own adjustments<\/li>\n<\/ul>\n\n<p><strong>Templates and hooks<\/strong><\/p>\n\n<p>Copy the templates into your theme under <code>yourtheme\/tymok-presale-waitlist-for-woocommerce\/<\/code>\nto change the markup. Among the available hooks are <code>wcwl_is_waitlist_product<\/code>,\n    wcwl_validate_signup, <code>wcwl_after_signup<\/code>, <code>wcwl_form_extra_fields<\/code>,\n    wcwl_invite_sent, <code>wcwl_invite_redeemed<\/code>, <code>wcwl_invites_expired<\/code> and\n    wcwl_settings_fields.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not contact any external service. No data leaves your site.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin stores waitlist entries: name, email address, IP address and timestamp.\nThe IP address serves as proof of the sign-up. Deleting the plugin only removes this\ndata if you enable the corresponding setting.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the ZIP under Plugins &gt; Add New &gt; Upload Plugin, then activate it.<\/li>\n<li>Go through WooCommerce &gt; Settings &gt; Waitlist (deadlines, quantity, texts).<\/li>\n<li>Open a product, switch to the Waitlist tab, enable it and set the quota.<\/li>\n<li>Invite customers under WooCommerce &gt; Waitlist.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20customers%20join%20without%20an%20account%3F\"><h3>Can customers join without an account?<\/h3><\/dt>\n<dd><p>No. Without a customer account the later purchase cannot be limited to one person.\nIf your shop allows customers to create an account on the My account page\n(WooCommerce &gt; Settings &gt; Accounts &amp; Privacy), the account is created straight from\nthe sign-up form. Otherwise customers log in first and then join the waitlist.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20a%20page%20cache%3F\"><h3>Does this work with a page cache?<\/h3><\/dt>\n<dd><p>Waitlist product pages set DONOTCACHEPAGE and send no-cache headers. If your cache\nplugin ignores that, exclude those URLs there by hand. Otherwise a stale form with an\nexpired nonce may be served.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20block-based%20cart%20and%20checkout%3F\"><h3>Does it work with the block-based cart and checkout?<\/h3><\/dt>\n<dd><p>Yes. The purchase block hooks into <code>woocommerce_is_purchasable<\/code>, the add-to-cart\nvalidation and the cart check, so the Store API is covered as well.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20an%20invitation%20that%20is%20not%20used%3F\"><h3>What happens to an invitation that is not used?<\/h3><\/dt>\n<dd><p>An hourly scheduled task marks it as expired, which frees the place again.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Declares WooCommerce as a required plugin (Requires Plugins header, WordPress 6.5+).<\/li>\n<li>Removed the option to log customers in through the invitation link. Invited customers\nalways log in through the regular WooCommerce login.<\/li>\n<li>The sign-up form reads and sanitizes each field individually; extension hooks only\nreceive the sanitized form fields, never the nonce or the password.<\/li>\n<li>Removed the unused AJAX sign-up endpoint.<\/li>\n<li>Guests only get a customer account through the waitlist form if the shop allows\naccount creation on the My account page (WooCommerce setting). Otherwise the form\nasks them to log in first. Filter: wcwl_guests_can_register.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed the plugin to tymok Presale Waitlist for WooCommerce.<\/li>\n<li>The shortcode is now [tymok_waitlist].<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Sign-ups are now matched against the normalised mailbox, so plus tags and Gmail dots\ncount as one and the same address.<\/li>\n<li>Removed helper methods that were not called anywhere in this plugin.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Waitlist instead of add-to-cart for scarce products: a quota of places, customer registration and single-use invitation links for a priority purchase.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361853","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=361853"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rudi52001"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361853"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361853"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361853"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361853"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361853"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}