{"id":339291,"date":"2026-07-11T07:49:36","date_gmt":"2026-07-11T07:49:36","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wundergoal\/"},"modified":"2026-09-01T19:06:33","modified_gmt":"2026-09-01T19:06:33","slug":"wundergoal","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/wundergoal\/","author":23509366,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.5.0","stable_tag":"0.5.0","tested":"6.9.7","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"WunderGoal \u2014 Football Picks & Pools","header_author":"SkipSeek","header_description":"Live football win probabilities for your site \u2014 every match priced by the market, margin removed, totals 100%.","assets_banners_color":"021018","last_updated":"2026-09-01 19:06:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wundergoal.com\/pool","header_author_uri":"https:\/\/skipseek.ai\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":80,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"0.2.0":{"tag":"0.2.0","author":"skipseek","date":"2026-07-12 00:01:27","revision":3604374},"0.3.0":{"tag":"0.3.0","author":"skipseek","date":"2026-07-27 08:14:03","revision":3624181},"0.4.0":{"tag":"0.4.0","author":"skipseek","date":"2026-08-26 23:10:35","revision":3667892},"0.4.1":{"tag":"0.4.1","author":"skipseek","date":"2026-08-30 17:13:14","revision":3672893},"0.5.0":{"tag":"0.5.0","author":"skipseek","date":"2026-09-01 19:06:33","revision":3676718}},"upgrade_notice":{"0.5.0":"<p>Adds a real pick form: readers pick winners on your page, with no account and no redirect. Existing pool placements are unchanged.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3604374,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3604374,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3604374,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3604374,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"wundergoal-pools\/picks":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"wundergoal-pools\/picks","title":"Football Picks","category":"widgets","icon":"sports","description":"The upcoming fixtures, with a pick link on every match. No pool and no setup required.","keywords":["picks","pick em","predictions","football","soccer","fixtures","game"],"textdomain":"wundergoal","attributes":{"competition":{"type":"string","default":""},"count":{"type":"number","default":6},"theme":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"]},"editorScript":"file:.\/editor.js"},"wundergoal-pools\/board":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"wundergoal-pools\/board","title":"Pool Standings Board","category":"widgets","icon":"list-view","description":"Your WunderGoal prediction pool's live standings, rendered natively in the post. Readers can join with one click.","keywords":["pool","predictions","football","soccer","standings"],"textdomain":"wundergoal","attributes":{"code":{"type":"string","default":""},"theme":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"]},"editorScript":"file:.\/editor.js"}},"tagged_versions":["0.2.0","0.3.0","0.4.0","0.4.1","0.5.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The pick form \u2014 three buttons on every upcoming match, rendered natively in a post","2":"A pool's live standings board below the picks","3":"The Football Picks block in the editor, with its inspector controls","4":"Settings \u2014 a default theme, and your pool's invite code"}},"plugin_section":[],"plugin_tags":[1238,278706,271141,43296,1239],"plugin_category":[37],"plugin_contributors":[268912],"plugin_business_model":[],"class_list":["post-339291","plugin","type-plugin","status-publish","hentry","plugin_tags-football","plugin_tags-pick-em","plugin_tags-prediction-pool","plugin_tags-predictions","plugin_tags-soccer","plugin_category-arts-and-entertainment","plugin_contributors-skipseek","plugin_committers-skipseek"],"banners":{"banner":"https:\/\/ps.w.org\/wundergoal\/assets\/banner-772x250.png?rev=3604374","banner_2x":"https:\/\/ps.w.org\/wundergoal\/assets\/banner-1544x500.png?rev=3604374","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wundergoal\/assets\/icon-128x128.png?rev=3604374","icon_2x":"https:\/\/ps.w.org\/wundergoal\/assets\/icon-256x256.png?rev=3604374","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Give your readers something to do.<\/strong><\/p>\n\n<p>Drop the next fixtures onto any post or page. Each one gets three buttons \u2014 home, draw, away \u2014 and your readers pick right there. No redirect, no pop-up, no account, no setup.<\/p>\n\n<pre><code>[wundergoal_picks]\n<\/code><\/pre>\n\n<p>That is the whole installation. The fixtures come from every competition WunderGoal covers, or point it at one:<\/p>\n\n<pre><code>[wundergoal_picks competition=\"premier-league-2026\" count=\"10\"]\n<\/code><\/pre>\n\n<h4>Running a pool as well?<\/h4>\n\n<p>Create a free pool at <a href=\"https:\/\/wundergoal.com\/pool\">wundergoal.com\/pool<\/a> \u2014 there are eight ways to play (Predictions, Survivor, Bracket, Confidence, Outrights, Props, Joker and Auto-pick) \u2014 then publish its live standings next to your picks:<\/p>\n\n<pre><code>[wundergoal_pool]\n<\/code><\/pre>\n\n<p>Weekly, monthly and all-time leaderboards run alongside every pool and they reset, so it never matters when someone joined.<\/p>\n\n<h4>How the picking works<\/h4>\n\n<p>The fixtures are fetched server-side, cached in a WordPress transient, and printed as plain markup that inherits your theme. Nothing is embedded and no third-party script runs in a visitor's browser.<\/p>\n\n<p>A pick is a normal WordPress form post, so <strong>it works with JavaScript disabled<\/strong>. With JavaScript on, the same pick is saved without a page reload. Either way the pick goes to WordPress, and WordPress forwards it to WunderGoal \u2014 the reader's browser never talks to us directly, so nothing depends on third-party cookies, which most browsers now block.<\/p>\n\n<p>Readers are identified only by a random token this plugin stores in a first-party cookie on <strong>your<\/strong> domain. When somebody wants their picks scored, a link appears offering to save them to a free WunderGoal account.<\/p>\n\n<h4>Works with page caching<\/h4>\n\n<p>The HTML is identical for every visitor. Which buttons a given reader has lit is applied in their own browser from their own cookie, so a cached page can never show one reader's picks to another.<\/p>\n\n<h4>Blocks and shortcodes<\/h4>\n\n<ul>\n<li><strong>Football Picks<\/strong> block, or <code>[wundergoal_picks]<\/code> \u2014 the upcoming fixtures with a pick form on each. Attributes: <code>competition<\/code>, <code>count<\/code> (1\u201320), <code>theme<\/code>.<\/li>\n<li><strong>Pool Standings Board<\/strong> block, or <code>[wundergoal_pool]<\/code> \u2014 your pool's live table. Attributes: <code>code<\/code>, <code>theme<\/code>.<\/li>\n<\/ul>\n\n<p>Set your pool code and a default theme under <strong>Settings \u2192 WunderGoal Pools<\/strong>, or override either per placement.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The picks board sets two first-party cookies on your own domain, and only once a reader actually picks something: a random token that identifies nothing but that bag of picks, and the picks themselves so the page can show them back. No name, no email, no account, no tracking, and nothing readable by any other site.<\/p>\n\n<p>The standings board sets no cookies at all and renders nothing without a pool invite code \u2014 possession of the code is what grants access to that pool's table.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin talks to <strong>WunderGoal<\/strong> (https:\/\/wundergoal.com), a football prediction service run by SkipSeek.<\/p>\n\n<ul>\n<li><strong>Fixtures<\/strong> \u2014 the plugin requests the upcoming fixture list from <code>https:\/\/wundergoal.com\/embed\/picks\/data<\/code> when a picks board is rendered. No visitor information is sent.<\/li>\n<li><strong>Pool standings<\/strong> \u2014 when you have set a pool invite code, the plugin requests that pool's standings from <code>https:\/\/wundergoal.com\/embed\/pool\/{code}\/data<\/code>. Only the code you configured is sent.<\/li>\n<li><strong>Picks<\/strong> \u2014 when a reader presses a pick button, your server sends WunderGoal the match, the choice, the random visitor token described above, and your site's address. No personal data is sent, and the reader's browser never contacts WunderGoal.<\/li>\n<\/ul>\n\n<p>Terms: https:\/\/wundergoal.com\/terms \u2014 Privacy: https:\/\/wundergoal.com\/privacy<\/p>\n\n<p>WunderGoal is an independent product of SkipSeek and is not affiliated with, endorsed by, or connected to FIFA or any national federation.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20my%20readers%20need%20an%20account%3F\"><h3>Do my readers need an account?<\/h3><\/dt>\n<dd><p>No. Anyone can pick straight away, and their picks are remembered on your site. An account is only needed if they want those picks scored and counted on WunderGoal's leaderboards \u2014 a link offering that appears once they have picked something.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20pool%20to%20use%20this%3F\"><h3>Do I need a pool to use this?<\/h3><\/dt>\n<dd><p>No. <code>[wundergoal_picks]<\/code> works on its own and needs no setup at all. The pool board is for publishers who want to run a league with their readers.<\/p><\/dd>\n<dt id=\"where%20do%20i%20find%20my%20pool%20invite%20code%3F\"><h3>Where do I find my pool invite code?<\/h3><\/dt>\n<dd><p>On your pool page at wundergoal.com, under \"Embed your pool\".<\/p><\/dd>\n<dt id=\"does%20this%20load%20an%20iframe%20or%20any%20third-party%20scripts%3F\"><h3>Does this load an iframe or any third-party scripts?<\/h3><\/dt>\n<dd><p>No. Everything is fetched server-side and rendered as native HTML in your theme.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20my%20site%20down%3F\"><h3>Will this slow my site down?<\/h3><\/dt>\n<dd><p>No. Responses are cached in a transient for a few minutes, so a busy page makes at most one outbound request every few minutes rather than one per visitor.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>New: the <strong>Football Picks<\/strong> block and <code>[wundergoal_picks]<\/code> \u2014 a real pick form on every upcoming match. Readers pick without leaving your page, with no account and no setup.<\/li>\n<li>Works without JavaScript (a plain form post) and safely behind a page cache: the picked state is applied per-reader in their own browser, never rendered into cached HTML.<\/li>\n<li>Readers can save their picks to a free WunderGoal account afterwards and keep them.<\/li>\n<li>Repositioned around the picking game. The plugin published standings and nothing else, so the only thing a reader could do on a publisher's page was look at other people's scores.<\/li>\n<li>Renamed to \"WunderGoal \u2014 Football Picks &amp; Pools\". Existing <code>[wundergoal_pool]<\/code> placements, blocks and settings are unchanged.<\/li>\n<li>Documented the pick submission in the readme's external services section: what your server sends to WunderGoal when a reader picks, and what it does not.<\/li>\n<li>Hardened the pick endpoint: picks from one visitor IP are capped per hour before your server makes any outbound request, so a flood of forged pick posts cannot be turned into outbound traffic from your site.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Corrected the pool-format list in the description: WunderGoal now has six formats (Predictions, Survivor, Bracket, Confidence, Outrights, Props). Joker and Auto-pick are no longer formats of their own \u2014 doubling your Big Call and auto-picking are options you can switch on for any format. No functional change to the board.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Removed the \"Powered by WunderGoal\" credit link from the front end entirely. The plugin now adds no attribution of any kind to public pages.<\/li>\n<li>Documented the external service in the readme: what the WunderGoal pool data API is used for, exactly what is sent and when, and links to its Terms of Service and Privacy Policy.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Native rebuild: standings are now fetched server-side and rendered as theme-inheriting HTML \u2014 no iframe, no external scripts in the visitor's browser.<\/li>\n<li>Short server-side transient cache with a long-lived backup, so an API blip never blanks the board.<\/li>\n<li>Format-aware columns (classic, survivor, bracket, confidence).<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Rebuild around prediction pools (superseded by the native 0.3.0 renderer).<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial submission (superseded).<\/li>\n<\/ul>","raw_excerpt":"Turn your site into a football picking game \u2014 your readers pick winners without leaving your page, and your pool&#039;s live standings sit alongside.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/339291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=339291"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/skipseek"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=339291"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=339291"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=339291"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=339291"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=339291"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=339291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}