
Manage chess tournaments from WordPress: players, Swiss pairings, results, standings, and exports. Free plan: up to 10 players per tournament.
Chess Podium helps chess clubs organize tournaments directly from WordPress. Create tournaments, add players, generate Swiss pairings, enter results, and publish standings—all without spreadsheets.
Free plan includes:
* Up to 10 players per tournament
* Swiss pairing
* Round Robin and Double Round Robin
* Results and standings
* Public tournament page
* CSV export
* FIDE ID import
Upgrade to Pro for unlimited players, advanced exports, PGN pages, and more. Get Chess Podium Pro →
Terms of Service and Privacy Policy
This plugin may link to the plugin website’s legal pages. Ensure these URLs are valid and publicly accessible:
* Terms of Service: https://chesspodium.com/terms-of-service/
* Privacy Policy: https://chesspodium.com/privacy-policy/
If your site uses different paths, create the corresponding pages and update the links where the plugin references them.
External services
This plugin relies on the following third-party services to provide core functionality:
-
Chess Podium Pairing API (http://89.167.56.28): Used to calculate tournament pairings (Swiss System and Round Robin). The plugin sends tournament data (player names, ratings, and results) to this server to generate the next round’s pairings.
- Service provided by: Chess Podium.
- Data sent: Tournament IDs, player names, and scores.
-
FIDE Ratings (https://ratings.fide.com): Used to fetch and update player Elo ratings and titles based on their FIDE ID.
- Service provided by: International Chess Federation (FIDE).
- Data sent: FIDE ID (public identifier).
-
Stripe (https://api.stripe.com): Used to process payments for the Pro license.
- Service provided by: Stripe, Inc.
- Terms of Service: https://stripe.com/legal
- Privacy Policy: https://stripe.com/privacy
-
PayPal (https://api-m.paypal.com, https://api-m.sandbox.paypal.com): Used to process payments for the Pro license.
- Service provided by: PayPal Holdings, Inc.
- Terms of Service: https://www.paypal.com/webapps/mpp/ua/useragreement-full
- Privacy Policy: https://www.paypal.com/webapps/mpp/ua/privacy-full
Additional services (optional, depending on configuration):
- Chess Podium License API (chesspodium.com): Validates Pro licenses. Sends: license key, site URL. Ensure Terms and Privacy pages exist on your site (e.g. /terms-of-service/, /privacy-policy/) or use your own policy URLs.
- Lichess (lichess.org): PGN live feed for broadcast games. Fetched server-side; no user data sent.
- Wikimedia (Wikipedia REST API, Wikidata SPARQL — wikipedia.org, wikidata.org): Optional. Used only to resolve player profile thumbnail images when FIDE does not return a usable photo. Sends: player name and/or FIDE ID (public). No account data.
Note on shortcode names: This plugin uses the prefix chess_podium_ for all new shortcodes (e.g. [chess_podium_tournament], [chess_podium_manager_tornei]). Legacy shortcodes checkmate_manager_tornei, storico_tornei, and regina_torneo are kept only for backward compatibility; prefer the chess_podium_* equivalents for new installations.
Third-party software
For third‑party software licenses and external services used by this plugin, see THIRD-PARTY.txt in the plugin root.
FAQ
What is the free player limit?
The free plan allows up to 10 players per tournament. Upgrade to Chess Podium Pro for unlimited players.
How do I display the tournament on my site?
Use the shortcode [chess_podium_tournament] on any page, or visit /torneo/ (or /currenttournament/) for the live tournament view.
Can I import players from FIDE?
Yes. Enter a FIDE ID to auto-import name, rating, and nationality from the official FIDE database.
ChangeLog
1.8.3
Performance & scalability (large tournaments)
* Added versioned caching (object cache + per-request memoization) for heavy reads: players, pairings (all/round/detailed), standings.
* Cache invalidates automatically via a per-tournament cache version bump when results/pairings/rounds change (save results, save pairings, generate/rollback round, swap colors, delete player, Lichess import).
* Public tournament page: standings load asynchronously (AJAX + pagination + nonce) for large tournaments to keep pages responsive.
Routing & multilingual robustness
* Fixed “No content” on multilingual sites when ?lang=... is present by parsing pretty URLs directly (player profile, game SEO URL, round URL) even if rewrite rules were flushed under a different locale.
Published tournaments grid ([chess_podium_tornei])
* Preview image priority restored: gallery photo → event logo → default.
Translations
* Completed missing UI strings (Lichess import, pairing settings labels/options) across IT/DE/FR/ES.
* Standardized “Anti-cheating” to remain in English everywhere (avoid non-standard local translations like “antitrucchi”).
Refactor (codebase maintainability)
* Split bootstrap wiring into dedicated classes: ChessPodium_Admin, ChessPodium_Frontend, ChessPodium_FrontendAjax (keeps behavior, reduces chess-podium.php responsibilities).
1.8.2
Public tournament & player profile
* SEO-friendly URLs for tournament, rounds, games, and player profile (pretty permalinks + rewrite rules; optional slug per tournament/player).
* Current round pairings: white and black names are clickable and open the in-tournament player profile.
* Player profile photo: FIDE page parsing improved (rejects generic og:image); Wikipedia / Wikidata fallback — Wikidata P1440 (FIDE ID) → article title, full-text search on Wikipedia when the stored name does not match the article title, multiple wiki languages; filter chess_podium_player_photo_url for overrides.
* External services note: optional requests to Wikimedia (Wikipedia API, Wikidata SPARQL) for profile thumbnails when FIDE does not expose a usable image.
Build
* CHESS_PODIUM_VERSION 1.8.3, build-zip.ps1 → chess-podium-1.8.3.zip; marketing theme 1.8.3; dev/chess-podium-svn mirror aligned.
1.8.1
Live single game replay: Chessground + engine analysis (client-side)
* New single game page UI with Chessground board (mobile-friendly) and robust live polling without resetting to start position.
* Analysis mode: replay previous moves without live overriding; make your own legal moves as a “variation” from any position.
* Client-side Stockfish (Web Worker) analysis with evaluation bar, best-move arrow and MultiPV lines; explicit Start/Stop evaluation toggle.
* Exported photo galleries: lightbox restored (clicking an image opens it again).
* Live tournament UI: pairings table now scrolls horizontally on mobile instead of overflowing the page.
1.8
FIDE profile import (ratings.fide.com)
* Parsing updated for the current public profile HTML: federation from the flag image under .profile-info-country (e.g. /images/flags/us.svg → ISO-2), FIDE title from .profile-info-title (e.g. “Grandmaster” → GM). Legacy fallbacks kept.
* sanitize_fide_title() now maps full English title names (Grandmaster, International Master, Woman Grandmaster, etc.) to standard abbreviations.
Tournament types & rounds
* New system type: Double round robin (second cycle repeats Berger pairings with colours reversed). Suitable for events such as the FIDE Candidates (8 players, 14 rounds).
* Tournament type can be changed after creation from Chess Podium → tournament → Settings (Swiss / Round Robin / Double Round Robin).
* Maximum rounds increased to 99 (create form, wizard, settings, Excel import); wizard client validation updated.
Players
* Manual add player: optional FIDE ID field (unique per tournament), same validation as FIDE import.
Public & live UI
* Live tournament dashboard (/torneo/livetournament/): shows tournament logo from brochure settings when set.
* Published tournaments grid ([chess_podium_tornei]): card image prefers brochure logo, then first gallery photo, then default.
Exports
* TRF header tournament type: round_robin and double_round_robin both emit RR (two-letter field).
Marketing theme (chess-podium-template)
* Homepage “See it in action”: second example card links to the FIDE Candidates 2026 tournament run on Chess Podium: https://www.chesspodium.com/tournament/?tournament_id=27 (standings, rounds, pairings, live boards), alongside the Cattolica archive and DGT demo.
* Theme version 1.8; download/SEO strings and EN/IT/DE/FR/ES translations for the new block.
Build
* CHESS_PODIUM_VERSION 1.8.1, build-zip.ps1 → chess-podium-1.8.1.zip; dev/chess-podium-svn mirror aligned.
1.7.9
- Fair play & anti-cheating: per-tournament checklist and text (FIDE Handbook §09 themes), optional fair play officer and complaints URL; shown on live page and static HTML export when enabled (Settings tab).
1.7.8
- Emergency hotfix: include missing
includes/class-pdf-badges.php file in release package to prevent fatal errors on some installations.
- Hardening: badge module include is now guarded with
file_exists() to prevent full plugin crash if file is unavailable.
1.7.7
- Tie-break engine aligned with Swiss-Manager/FIDE 2023 rules for unplayed rounds (BYE/withdrawn) in Buchholz, Buchholz Cut 1, and Sonneborn-Berger.
- Direct Encounter (DE) ranking logic fixed with correct mini-league handling inside tied groups.
- New print-ready exports: Badges and Placecards PDF/HTML with robust pagination (no card split across pages).
- Placecards layout optimized for green printing (4 per page).
- FIDE real-time sync: per-player and bulk “Sync with FIDE” action from Players tab.
- Public tournament player profile page (
?cp_player=) with tournament stats and optional FIDE profile photo.
- Badges improved: tournament name on card, nationality flag, per-player QR code linking to live tournament player profile.
- New/updated translations (IT/DE/FR/ES) for the new UI and print features.
1.7.6
- Setup wizard after activation (guided first tournament, optional published page with shortcode)
- Gutenberg block
chess-podium/tournament and Classic Editor shortcode inserter
- Customizer: colors for public tournament tables and chessboard squares
- FIDE norms: omit redundant GM/IM norm badges when the player already holds that title or higher
- Minor copy and translation string updates
1.7.5
- WordPress.org review compliance: All JS/CSS included via wp_enqueue_script, wp_enqueue_style, wp_add_inline_script, wp_add_inline_style (no raw script/style tags on WordPress pages)
- No remote assets: jQuery, chess.js, chessboard bundled in plugin; export uses only local paths (js/jquery.min.js, js/chess.min.js, etc.)
- Paths: plugin_dir_path() and plugins_url() used throughout; removed ABSPATH/WPINC for export (jQuery copied from plugin only)
- Game page: inline CSS/JS moved to wp_register_style + wp_add_inline_style and wp_register_script + wp_add_inline_script
- PDF certificate: comment added clarifying inline style is for dompdf output only
1.7.4
- WordPress.org review compliance: Terms/Privacy URLs updated to /terms-of-service/ and /privacy-policy/ (ensure these pages exist on your site)
- External services: full readme section (Pairing API, FIDE, Stripe, PayPal) with data sent and policy links
- Export: copy_export_vendor_assets uses plugin path only; jQuery fallback to WordPress wp-includes/js/jquery when not in plugin (chessboard always works in static export)
- Scripts: admin tab and config modal moved to wp_enqueue_script (admin-tabs.js, admin-config-modal.js) with wp_localize_script for strings
- Sanitization: HTTP_ACCEPT_LANGUAGE and all file upload type/size use sanitize_text_field and wp_check_filetype (do not trust $_FILES[‘type’])
- Escaping: all echoed variables use esc_attr, esc_html, wp_kses_post; class-grand-prix.php render_player_with_flag output wrapped in wp_kses_post; wrap_html export title escaped
- Transient: cp_pgn_fetch_ renamed to chess_podium_pgn_fetch_ for consistent prefixing
1.7.2
- Plugin header format aligned to WordPress Plugin Handbook (DocBlock, colon alignment)
1.7.1
- Plugin header format fix for WordPress.org Plugin Check (Description, Version, License)
1.7.0
- WordPress.org compliance: replaced inline scripts/styles with wp_enqueue_script, wp_enqueue_style, wp_add_inline_script, wp_add_inline_style
- Local assets: chess.js, chessboard-js, chess piece images, and country flags bundled in plugin (no CDN)
- External services documented in readme (License API, PayPal, bbpPairings, Lichess)
- Plugin paths use plugin_dir_path() and plugin_dir_url() consistently
- Sanitization: $_FILES filenames with sanitize_file_name(), wp_json_encode for JSON output
- Escaping: all echoed variables use esc_attr(), esc_html() where appropriate
- Shortcodes: added chess_podium_manager_tornei, chess_podium_storico_tornei; renamed cpSponsorsAdmin to chessPodiumSponsorsAdmin. Legacy shortcodes (regina_torneo, checkmate_manager_tornei, storico_tornei) kept only for backward compatibility with existing beta/external installs; all new elements use chess_podium_ prefix.
- Static export: vendor JS/CSS and flags copied locally; no remote dependencies
- Live dashboard: local flag images, escaped output (XSS prevention)
1.6.0
- Grand Prix: create series of linked tournaments with points per position, participation points, social ELO, aggregated standings
- Admin: Chess Podium → Grand Prix to create and manage Grand Prix
- Shortcode: [chess_podium_grand_prix id=”X”] to display Grand Prix standings
- Tournament settings: link tournaments to one or more Grand Prix
1.5.0
- chess-results Excel import: create tournament, import players, bulk import round results
- Same pairing engine as Swiss Manager (JaVaFo) and chess-results compatibility
- Improved Excel format support for player list and pairing exports
0.3.0
- Free and Pro tiers: 10 players free, unlimited with Pro license
- License management page
- FIDE player import
- CSV bulk import
- External tournaments support
- PGN upload and display
- Photo gallery
- Export to folder
0.2.0
- Swiss pairing
- Standings and tiebreakers
- Public tournament page
0.1.0