5 Minute Setup
Install, import matches with timezone, paste 4 shortcodes — done.
8 Languages Built In
es · en_US · pt_BR · pt_PT · it_IT · de_DE · fr_FR · nl_NL — switches with site language.
Works With Any Theme
Theme Shield isolates plugin styles inside .polla-laooz-root.
Table of contents
Installation
Method 1: WordPress Admin (Recommended)
Download the Plugin
After purchasing, download the laooz-world-cup-predictor.zip file from your purchase confirmation email or your account downloads page.
Upload via WordPress
Go to your WordPress admin panel and:
- Navigate to Plugins → Add New
- Click "Upload Plugin"
- Select the downloaded zip file
- Click "Install Now" → "Activate"
You're Done
A new Polla Mundial menu appears in the admin sidebar with Dashboard, Matches, Predictions, Importer, Settings and the new Shortcodes guide.
Server Requirements
- • WordPress 5.0+ — WordPress 6.5+ recommended for the fastest .l10n.php translation format
- • PHP 7.4+
- • MySQL 5.6+
Recommended Setup Updated 1.6
For a typical pool, create these four pages and paste the matching shortcode in each one:
| Page | Shortcode | Purpose |
|---|---|---|
| Predictions | [polla_partidos_pendientes] |
Where users submit scores for upcoming matches. |
| My Predictions | [polla_mis_pronosticos] |
User's pending and finished predictions, sorted by date. |
| Ranking | [polla_ranking] |
Public leaderboard, paginated 100 per page by default. |
| My Profile | [polla_perfil_usuario] |
User profile (assign this page in Polla Mundial → Settings). |
Pro tip
After creating the four pages, go to Polla Mundial → Settings and assign the "Profile Page" so usernames in the ranking link to the right profile URL.
Shortcodes Reference
Four shortcodes power every front-end view. All parameters accept aliases — use whichever feels natural.
Pending Matches
[polla_partidos_pendientes]
Description: Lists matches available for predictions with the new pill-style score widget (+/− buttons, single-line layout, animated icon-only save button).
Parameters:
| Param | Type | Default | Description |
|---|---|---|---|
cantidad aliases: limite, limit |
int | -1 |
How many matches to display. -1 means all available. |
fase |
string | — | Filter by phase: fase-grupos, octavos, cuartos, semifinales, tercer-lugar, final |
Examples:
[polla_partidos_pendientes]
[polla_partidos_pendientes cantidad="5"]
[polla_partidos_pendientes fase="octavos"]
[polla_partidos_pendientes cantidad="10" fase="fase-grupos"]
Screenshot placeholder — pill score widget on a single line with Home | Scores | Away | Save.
My Predictions Improved
[polla_partidos_pronosticados]
// alias:
[polla_mis_pronosticos]
Description: Shows all predictions made by the logged-in user — both pending and finished, sorted by date. The alias [polla_mis_pronosticos] is now fully functional.
Parameters:
| Param | Type | Default | Description |
|---|---|---|---|
cantidad aliases: limite, limit |
int | -1 |
Maximum number of predictions to render. |
Examples:
[polla_mis_pronosticos]
[polla_partidos_pronosticados cantidad="20"]
[polla_partidos_pronosticados limite="10"]
Ranking Updated 1.6
[polla_ranking]
Description: Public leaderboard. With no parameters it lists every participant paginated 100 per page (perfect for big leagues). With limite="N" it switches to a Top N view with podium for the first three. Usernames link to their profile page.
Parameters:
| Param | Type | Default | Description |
|---|---|---|---|
limite aliases: cantidad, limit |
int | — | When set: Top N with podium. When omitted: full list paginated 100/page. |
Examples:
[polla_ranking] // every participant, paginated 100/page
[polla_ranking limite="10"] // Top 10 with podium
[polla_ranking limite="3"] // podium-only
Removed in 1.6: The "View Full Ranking" button is gone — the new pagination replaces it.
User Profile Improved
[polla_perfil_usuario]
Description: Full profile for a user — stats, accuracy, prediction history. With no parameters it falls back to the logged-in user (no more errors). It also reads ?polla_usuario=ID from the URL automatically (this is what ranking links use).
Parameters:
| Param | Type | Default | Description |
|---|---|---|---|
usuario_id |
int | Logged-in user | WordPress user ID. URL param ?polla_usuario=ID takes precedence. |
Examples:
[polla_perfil_usuario] // current logged-in user
[polla_perfil_usuario usuario_id="5"] // specific user
Users with no predictions yet are handled gracefully — they see an empty state instead of a fatal error.
Use in PHP templates
<?php echo do_shortcode('[polla_ranking limite="10"]'); ?>
Tip: from the WordPress admin, go to Polla Mundial → Shortcodes for a built-in copy-paste guide with the same examples and a "Copy to clipboard" button.
Configuration Page New in 1.6
A dedicated Settings screen at Polla Mundial → Settings (built on the WordPress Settings API).
Profile Page assignment
Pick which page hosts [polla_perfil_usuario] from a dropdown. The plugin uses this value to build the profile URLs that the ranking links to. Behaviour:
- If a page is explicitly assigned → that one wins.
- If not → the plugin auto-detects via cache + slug/title fallbacks (legacy: "perfil", "mi-perfil", "profile").
- You can override entirely from code with the
polla_laooz_perfil_page_urlfilter (see "For Developers").
Closing time before kickoff
Configure how many minutes before kickoff predictions lock automatically.
- Default: 15 minutes
- Range: 0 – 120 minutes
- Recommended: 10 – 30 minutes
Importer with Timezone Conversion New in 1.6
The importer ships with the official 2026 World Cup JSON and a full IANA timezone dropdown. Pick the source timezone of the JSON and the plugin auto-converts kickoff times to your site's timezone.
Open the importer
Go to Polla Mundial → Import Matches.
Pick the source timezone
Use the IANA dropdown (e.g. America/Mexico_City, Europe/Madrid, America/Sao_Paulo). The plugin remembers your last choice for next time.
Run the import
Click "Import Matches from JSON". Re-importing is safe: existing matches are updated by ID — never duplicated — and user predictions are preserved.
Match data included
- • Home & Away teams (with flag emojis)
- • Date & time (auto-converted to your TZ)
- • Stadium & city
- • Phase (Group, R16, QF, SF, 3rd, Final)
- • Source TZ kept in metadata for audit
Tournament coverage
- • 48 Group Stage matches
- • 16 Round of 16 matches
- • 8 Quarter-finals
- • 4 Semi-finals
- • 2 3rd place + Final
Re-importing is safe
The importer matches by unique ID. Existing matches are updated, new ones are created, and predictions are never touched.
Multi-language New in 1.6
The plugin is 100% translatable — 231 source strings, professionally translated into 8 languages out of the box (1,848 translations total).
Languages included +4 NEW
es (source)
en_US
pt_BR
pt_PT
it_IT
de_DE
fr_FR
nl_NL
How language switching works
The plugin reads WordPress' active language and loads the matching translation file automatically:
- Go to Settings → General → Site Language
- Pick a language WordPress supports (e.g. Português do Brasil)
- Save — done. Plugin strings switch on the next page load.
Performance: On WordPress 6.5+ the plugin loads the modern .l10n.php format, which is opcache-friendly and significantly faster than .mo. On older WordPress versions it falls back to .mo automatically.
Adding a new language
Roughly a 15-minute process:
-
Translate the .pot file (
/languages/laooz-world-cup-predictor.pot) using Poedit, Loco Translate or Crowdin. -
Save the result as
laooz-world-cup-predictor-{LOCALE}.po(e.g.laooz-world-cup-predictor-fr_FR.po). -
Generate the binaries:
This creates the .mo and the modern .l10n.php files.wp i18n make-mo /path/to/languages/ wp i18n make-php /path/to/languages/ -
Drop the files into
/wp-content/plugins/laooz-world-cup-predictor/languages/and select the matching language in Settings → General.
Tip:
Drop your translations in /wp-content/languages/plugins/ instead of the plugin folder if you want them to survive plugin updates.
Theme Shield & CSS Namespace New in 1.6
Every plugin module renders inside the .polla-laooz-root namespace and is bulletproofed against theme styles:
- Links: no underline leak from the theme
- Lists: no inherited bullets / numbering
- Tables: clean reset (borders, padding, hover)
- Headings: normalized sizes and weights
- FontAwesome icons: immune to theme overrides
The shield is fully scoped — it never leaks styles to the rest of your site. To customize plugin styles from your theme, just scope your CSS:
/* In your theme's stylesheet */
.polla-laooz-root .polla-ranking-card {
background: #yourbrand;
border-radius: 12px;
}
.polla-laooz-root .polla-score-pill button {
background: #yourbrand-accent;
}
Tested with
Astra, Hello Elementor, Twenty Twenty-Four, Kadence, GeneratePress, Avada and many block themes. Works with any theme — old or new.
Managing Match Results
After each match finishes, enter the final score so the plugin can calculate points and update the ranking.
Open the match
Go to Polla Mundial → Matches and click "Edit" on the finished match.
Enter the final score
In the "Match Information" meta box: check "Match Completed", fill in Home Goals and Away Goals, and click Update.
Points calculate automatically
The plugin recalculates points for every prediction, updates the ranking and refreshes user profiles.
Knockout stages: Use only the regular-time score (90 minutes). Extra time and penalties are not counted.
Points System
A multi-level scoring system that rewards both accuracy and smart predictions.
Exact Score
10Highest reward. You predict the exact final score.
Example: 2-1 / 2-1 → 10 pts
Correct Winner
5Good prediction. You correctly predict who wins (or a draw).
Example: 3-1 / 2-0 → 5 pts
Correct Goals
3Partial credit. Correct goal count for one team.
Example: 2-0 / 2-1 → 3 pts
Draw Bonus
+4Special reward. Extra points for nailing a draw.
Example: 1-1 / 1-1 → 10 + 4 = 14 pts
Calculation table
| Your Prediction | Actual Result | Points Breakdown | Total |
|---|---|---|---|
2-1 | 2-1 |
Exact Score (10) | 10 |
3-1 | 2-0 |
Correct Winner (5) | 5 |
2-0 | 2-1 |
Correct Goals Home (3) + Correct Winner (5) | 8 |
1-1 | 1-1 |
Exact Score (10) + Draw Bonus (4) | 14 |
3-0 | 0-2 |
Wrong winner — no points | 0 |
For Developers New in 1.6
Public constants
Available everywhere after the plugin loads:
| Constant | Returns |
|---|---|
POLLA_LAOOZ_VERSION | Current plugin version (e.g. '1.6.0') |
POLLA_LAOOZ_PLUGIN_DIR | Absolute filesystem path to the plugin directory (with trailing slash) |
POLLA_LAOOZ_PLUGIN_URL | Public URL to the plugin directory (with trailing slash) |
Filters
polla_laooz_perfil_page_url
Override the absolute URL of the Profile Page used for ranking links and programmatic integrations.
// In your theme's functions.php or a mu-plugin
add_filter( 'polla_laooz_perfil_page_url', function( $url, $user_id ) {
// Send everyone to a custom profile area
return home_url( '/users/' . $user_id . '/' );
}, 10, 2 );
CSS namespace for customization
Every plugin module renders inside .polla-laooz-root. Use it as a scope when overriding styles from your theme:
.polla-laooz-root .polla-ranking-card { ... }
.polla-laooz-root .polla-score-pill { ... }
.polla-laooz-root .polla-prediction { ... }
Text domain
Use this text domain to add or override translations:
// Translate a plugin string
__( 'Ranking', 'laooz-world-cup-predictor' );
Frequently Asked Questions
Will it work on my theme?
Yes. v1.6 ships with Theme Shield, a CSS namespace that protects every module from theme styles. Tested with Astra, Hello Elementor, Twenty Twenty-Four, Kadence, GeneratePress, Avada and most block themes.
How do I switch the plugin language?
Change Settings → General → Site Language in WordPress. The plugin reads that value and switches automatically. Eight languages are bundled: Spanish, English, Portuguese (Brazil & Portugal), Italian, German, French and Dutch.
Do users need to register?
Yes. Users must be logged in to WordPress to predict, so each participant has a unique identity. Use any registration plugin you like (Ultimate Member, User Registration, etc.) or core WordPress registration.
Can users edit their predictions?
Yes — until the configurable closing time before kickoff. After that, predictions lock automatically.
What happens if I delete a match?
All predictions for that match are deleted with it and the ranking recalculates. This cannot be undone — to hide a match without deleting it, switch its status to draft.
Is it mobile-friendly?
Fully responsive — including the new pill-style score widget which keeps everything on a single line, with graceful name wrapping for long team names.
Can I reuse it for other tournaments?
Yes. Import a custom JSON of matches (the importer accepts any source timezone) and the points/ranking system works for any football tournament.
Is the plugin secure?
Yes. Nonces on every AJAX endpoint, sanitization on every input, capability checks on admin actions, and all DB queries use prepared statements.
How many users can participate?
No hard limit — the new ranking is paginated 100 per page specifically to handle large competitions. For 1000+ participants, use a caching plugin (LiteSpeed, WP Rocket, etc.) on the ranking page.
Changelog
1.6.0
Latest May 2026Multi-language (NEW)
- 100% translatable plugin — 231 source strings, 1,848 translations across 8 languages
- Languages bundled: 🇪🇸 es (source), 🇺🇸 en_US, 🇧🇷 pt_BR, 🇵🇹 pt_PT
- +4 NEW: 🇮🇹 it_IT (Italiano), 🇩🇪 de_DE (Deutsch), 🇫🇷 fr_FR (Français), 🇳🇱 nl_NL (Nederlands)
- Loads modern .l10n.php on WordPress 6.5+ (opcache fast); .mo fallback on older versions
- Documented 15-minute process to add new languages
Theme Shield (NEW)
- All modules scoped under .polla-laooz-root
- Bulletproof against theme styles: links, lists, tables, headings, FontAwesome
- Tested across popular themes; never leaks styles to the rest of your site
Importer with timezone conversion (NEW)
- Full IANA timezone dropdown when importing
- Auto-converts JSON kickoff times to your site's timezone
- Source TZ kept in metadata for audit
- Remembers the last timezone used
Configuration page (NEW)
- Settings API screen with explicit Profile Page assignment
- Cached auto-detection + slug/title legacy fallbacks
- New filter polla_laooz_perfil_page_url for programmatic integrations
In-admin Shortcodes guide (NEW)
- Dedicated submenu: Polla Mundial → Shortcodes
- Cards per shortcode with description, copy-paste examples, parameter tables and "Copy to clipboard" button
- Featured card on the plugin Dashboard with CTA to the guide
Match module UX (refined)
- Unified pill-style score widget with +/− buttons, input and inline separators
- Save button reduced to icon-only (animated loading and success states)
- Single-line layout: Home | Scores | Away | Actions
- Long names wrap gracefully without overflow
- Visible separator between matches
- Help message only on the first item with a prediction (the rest are visually identified by the blue background)
Improved ranking
- Without parameters: lists every participant paginated 100/page
- With limite="N": Top N with podium for the first three
- "View Full Ranking" button removed (replaced by pagination)
- Usernames link to the profile page correctly
Robust user profile
- Without parameters: falls back to the logged-in user (previously errored out)
- Reads ?polla_usuario=ID from the URL (used by ranking links)
- Gracefully handles users with no predictions
Other
- Alias [polla_mis_pronosticos] is now fully functional
- [polla_partidos_pronosticados] now shows pending AND finished predictions sorted by date
- Parameter aliases: cantidad, limite, limit are interchangeable
1.0.0
Initial release- World Cup match predictions with multi-level points system
- User profiles, ranking and prediction history
- JSON importer with all 80 World Cup 2026 matches
- Initial set of 4 shortcodes
Support
Get support
Issues, questions or customization requests — we reply within 24 hours on business days.
- 6 months free support (Regular)
- 12 months free support (Extended)
- Extended support available on demand
Need customization?
We offer custom development services to adapt the plugin to your specific needs.
Contact Laooz Studios