Title: AnWP Tennis Leagues
Author: Andrei Strekozov
Published: <strong>November 13, 2026</strong>
Last modified: November 13, 2026

---

Search plugins

![](https://ps.w.org/anwp-tennis-leagues/assets/banner-772x250.png?rev=3800500)

![](https://ps.w.org/anwp-tennis-leagues/assets/icon.svg?rev=3800500)

# AnWP Tennis Leagues

 By [Andrei Strekozov](https://profiles.wordpress.org/anwppro/)

[Download](https://downloads.wordpress.org/plugin/anwp-tennis-leagues.0.8.2.zip)

[Live Preview](https://wordpress.org/plugins/anwp-tennis-leagues/?preview=1)

 * [Details](https://wordpress.org/plugins/anwp-tennis-leagues/#description)
 * [Reviews](https://wordpress.org/plugins/anwp-tennis-leagues/#reviews)
 *  [Installation](https://wordpress.org/plugins/anwp-tennis-leagues/#installation)
 * [Development](https://wordpress.org/plugins/anwp-tennis-leagues/#developers)

 [Support](https://wordpress.org/support/plugin/anwp-tennis-leagues/)

## Description

AnWP Tennis Leagues is for clubs, academies, federations and amateur leagues that
run their own racket-sport competitions. You enter the players and the results. 
The plugin keeps the draws, tables and player records, and puts them on your site.

#### 6 sports, scored properly

 * Tennis and padel score in sets of games, with tiebreaks, no-ad, golden point,
   a 10-point final-set tiebreak or a match tiebreak as the decider.
 * Squash, table tennis, pickleball and badminton score in games to 11, 15 or 21,
   won by 2, with badminton capped at 30.
 * A score that couldn’t happen under the match’s rules is refused, and the message
   names the set it’s in. 8-6 in a set with a tiebreak won’t save.
 * Six match statuses: Scheduled, Finished, Retired, Walkover, Default and Cancelled.
   The winner of a finished match is worked out from the score.
 * Team ties, for club leagues played over 1 to 9 rubbers.
 * Each match keeps a copy of the rules it was created under, so changing a competition
   later doesn’t rewrite matches that already exist.

#### Competitions and draws

 * Players, doubles pairs, clubs and their courts, with surfaces and indoor courts.
 * Competitions with seasons. A new competition comes with this year’s season and
   a draw, ready to use.
 * A setup wizard: your sport, one club or several, and a first competition with
   its draw. Sample data for tennis, padel and pickleball shows the pages filled
   in, and comes off again from the Dashboard.
 * Knockout draws: one click generates the bracket, with seeds on the ITF placement
   lines and byes to the top seeds, up to 128 lines. Winners move on by themselves.
   Add a 3rd place match if you want one.
 * Round robin and group draws: one click writes every fixture, round by round. 
   A box of 6 gets 15 matches in 5 rounds.
 * League tables that rebuild themselves when a result changes. Set the points, 
   and put the tiebreakers (wins, head-to-head, % sets won, % games won) in your
   own order.
 * A Dashboard that shows what needs you first: tables out of date, draws waiting
   for a bracket, matches overdue.
 * Single-club mode for a club running its own site.

#### On your site

 * Match pages with the score set by set, and a preview before and during the match:
   last 5 results, head-to-head, recent workload.
 * Player and pair pages with the last 10 results, match and set profiles, year 
   by year by surface, and rivalries, all counted from your own matches.
 * Competition pages with season pills and a tab per draw. A knockout shows as a
   bracket that fits narrow screens, a round robin as its league table.
 * Printable sheets for the club noticeboard: the draw, the round-robin grid and
   the day’s order of play.
 * A match list with a 7-day strip, a date picker and All / Live / Finished / Upcoming
   pills. It swaps content in place with JavaScript on, and every control is a plain
   link with it off.
 * 4 shortcodes and 4 blocks: draw, match list, standings table and player card.
   A Shortcodes page builds them from pickers and previews them in your theme.
 * Built from div grids, so your theme’s table and list styles don’t leak in. Copy
   any template into your theme to change it.
 * Change 39 of the words your public pages print under Settings > Text.
 * Search engines: bye matches and empty bracket slots stay out of the index and
   the sitemap, and filtered views point to the plain page. Works with Yoast SEO
   and Rank Math.
 * Page cache clearing: when a match changes, its page and the pages around it are
   cleared. Works with W3 Total Cache, LiteSpeed Cache, SpinupWP, SiteGround Optimizer,
   FlyingPress, Hummingbird, WP Rocket, WP Fastest Cache and WP Super Cache.
 * A read-only public REST API under `anwptl/v1` for matches, competitions, players,
   pairs, clubs and standings.

#### Source code

Every minified file ships next to its unminified build: `admin/js/admin-core.js`
beside `admin-core.min.js`, `public/js/tl-public.js` beside `tl-public.min.js`, `
gutenberg/blocks.js` beside `blocks.min.js`, and the same for every stylesheet. 
The admin screens are Vue 3 single-file components built with Vite, the public scripts
are plain JavaScript modules bundled with Vite, the blocks are built with @wordpress/
scripts, and the stylesheets are compiled from SCSS.

#### Third-party code

All of it is bundled locally, and nothing is loaded from a CDN.

 * Vue 3.5.42 (MIT), https://github.com/vuejs/core – admin screens, in `admin/js/
   admin-core.js`.
 * Pinia 3.0.4 (MIT), https://github.com/vuejs/pinia – admin screens.
 * vue-multiselect 3.5.0 (MIT), https://github.com/shentao/vue-multiselect – admin
   pickers.
 * vue-draggable-plus 0.6.1 (MIT), https://github.com/Alfred-Skyblue/vue-draggable-
   plus, with SortableJS 1.15.2 (MIT), https://github.com/SortableJS/Sortable – 
   drag-to-order rows in the admin.
 * Country flags: HatScripts/circle-flags (https://github.com/HatScripts/circle-
   flags), MIT licence – `public/img/flags.svg`.

#### Privacy

The plugin makes no remote requests and sends no data anywhere: no tracking, no 
telemetry, no cookies. Everything you enter stays in your own database. A player’s
date of birth is never printed on a public page or returned by the public REST API–
player and match pages show the age in years. When a match changes, the plugin asks
the page cache plugin you already run to clear the pages around it. What that plugin
does next is up to its own settings.

#### Documentation

Guides for each sport, draws, fixtures and standings: [anwp.pro/docs/tennis-leagues](https://anwp.pro/docs/tennis-leagues/)

## Screenshots

[⌊A competition page with its bracket.⌉⌊A competition page with its bracket.⌉[

A competition page with its bracket.

[⌊A public match page with the preview: form, head-to-head and workload.⌉⌊A public
match page with the preview: form, head-to-head and workload.⌉[

A public match page with the preview: form, head-to-head and workload.

[⌊A player page with next matches, latest results and the match profile.⌉⌊A player
page with next matches, latest results and the match profile.⌉[

A player page with next matches, latest results and the match profile.

[⌊A knockout draw on the admin screen, every card linked to its match.⌉⌊A knockout
draw on the admin screen, every card linked to its match.⌉[

A knockout draw on the admin screen, every card linked to its match.

[⌊The Result box on a match: the grid follows the sport's rules.⌉⌊The Result box
on a match: the grid follows the sport's rules.⌉[

The Result box on a match: the grid follows the sport’s rules.

[⌊The Dashboard: what needs you first, what's left to play and the latest results.⌉⌊
The Dashboard: what needs you first, what's left to play and the latest results.⌉[

The Dashboard: what needs you first, what’s left to play and the latest results.

## Blocks

This plugin provides 4 blocks.

 *   Competition draw One knockout stage as a bracket – the same draw the competition
   page shows.
 *   Match list Fixtures and results. Any mix of filters – leave them all empty 
   to list every public match.
 *   Player card One player or pair, with a link to their page.
 *   Standings table One round robin or group stage as a table.

## Installation

 1. Install the plugin from Plugins > Add New, or upload the `anwp-tennis-leagues` 
    folder to `/wp-content/plugins/`.
 2. Activate it. A Tennis Leagues menu appears in your admin.
 3. Add your players (and pairs, for doubles). Clubs are optional.
 4. Add a competition and pick its sport. It gets a season and a draw straight away.
 5. Open the draw, add the entries, then generate the bracket or the fixtures.
 6. Put the competition on a page with a block or a shortcode, or link to its own page.

## FAQ

### Which sports does it support?

Tennis, padel, squash, table tennis, pickleball and badminton, singles and doubles.
Each sport has its own scoring rules, and each competition can pick the variants
its sport offers.

### Does it work with my theme?

It should. Public output is built from div grids with its own class names, so a 
theme’s table and list styles don’t reach it. Classic themes like Kadence or Astra
use their own single post template. On a block theme (Twenty Twenty-Five and the
like) with WordPress 6.7 or later, the plugin adds its own templates for player,
pair, club, competition and match pages. They take over from the theme’s Single 
Posts template, so a sidebar or ad you added there won’t show on those pages. Edit
them under Appearance > Editor > Templates (“Single Player”, “Single Match” and 
the rest).

### Can I change the web addresses?

Yes. Player, pair, club, competition and match pages start with tennis-player, tennis-
pair and so on, so they don’t clash with Football Leagues or Sports Leagues. Change
them in the Permalinks box under Tennis Leagues > Settings.

### Can I run it for a single club?

Yes. Switch on single-club mode under Tennis Leagues > Settings and pick or create
your club. The club fields drop off the forms and the Clubs screen becomes “Your
Club”.

### Can I change a template?

Copy the file from the plugin’s `templates` folder into an `anwp-tennis-leagues`
folder in your theme and edit it there. A child theme’s copy wins over its parent’s.

### Is there a Premium version?

A separate Premium plugin is in development at [anwp.pro](https://anwp.pro).Everything
in this plugin is free and stays free, and none of it needs Premium to work.

### Where do I get help?

Ask in this plugin’s support forum on WordPress.org. The guides are on [anwp.pro](https://anwp.pro/docs/tennis-leagues/).

### What happens to my data if I delete the plugin?

Deleting the plugin from the Plugins screen removes its tables, posts and options,
unless the Premium version is still installed – then your data stays. Deactivating
it keeps everything.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“AnWP Tennis Leagues” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Andrei Strekozov ](https://profiles.wordpress.org/anwppro/)

[Translate “AnWP Tennis Leagues” into your language.](https://translate.wordpress.org/projects/wp-plugins/anwp-tennis-leagues)

### Interested in development?

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

## Changelog

#### 0.8.2 – 2026-11-11

First release on WordPress.org.

 * Scoring for 6 sports, with impossible scores refused.
 * Knockout brackets and round-robin fixtures generated in one click.
 * League tables rebuilt on every result, with your own points and tiebreaker order.
 * Public pages for matches, players, pairs and competitions, plus 4 shortcodes 
   and 4 blocks.
 * Setup wizard with sample data, a Next Steps box from Publish to the first result,
   printable sheets, Dashboard, single-club mode and a read-only public REST API.

Pre-release history (0.1.0 to 0.7.0) is in changelog.txt.

## Meta

 *  Version **0.8.2**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [league](https://wordpress.org/plugins/tags/league/)[Padel](https://wordpress.org/plugins/tags/padel/)
   [Pickleball](https://wordpress.org/plugins/tags/pickleball/)[tennis](https://wordpress.org/plugins/tags/tennis/)
   [tournament](https://wordpress.org/plugins/tags/tournament/)
 *  [Advanced View](https://wordpress.org/plugins/anwp-tennis-leagues/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/anwp-tennis-leagues/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/anwp-tennis-leagues/reviews/)

## Contributors

 *   [ Andrei Strekozov ](https://profiles.wordpress.org/anwppro/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/anwp-tennis-leagues/)