The plugin can be installed via the standard WordPress plugin install methods.


1. Go to the Plugins->Installed plugins page in WordPress Admin.
2. Click on Add New.
3. Search for MSTW Schedule Builder.
4. Click “Install Now”.
5. Activate the plugin.
6. Use the new Schedule Builder admin menu to create round-robin schedules for leagues and tournaments.

The MANUAL way:

1. Download the plugin .zip file,, from the WordPress site.
2. Extract the contents of the file.
3. Via FTP, copy the entire /mstw-schedule-builder/ directory into the /wp-content/plugins/ directory on your WordPress host.
4. Go to the WordPress Admin Plugins page and activate the plugin.
5. Use the new Schedule Builder admin menu to create round-robin schedules for leagues and tournaments.


1. Download the plugin .zip file,, from the WordPress site.
2. Go to WordPress admin Plugins -> Add New -> Upload.
3. Locate the .zip file.
4. Click “Install Now”.
5. Activate the plugin.
6. Use the new Schedule Builder admin menu to create round-robin schedules for leagues and tournaments.

Frequently Asked Questions

Why can’t I activate the plugin? OR why doesn’t the plugin’s menu appear in my admin dashboard menu?

The MSTW League Manager plugin (version 2.5 or later) must be installed to activate and use the MSTW Schedule Builder plugin.

Can I create a double round robin (home & home) schedule?

This option will be available in a future release.

Can I create a schedule with more than 6 teams?

Tournaments up to 32 teams will be available in future releases.

Can I schedule games on multiple courts or fields at the same location?

This option will be available in a future release.

Schedule Builder Overview & Quickstart Guide


The MSTW Schedule Builder builds ‘balanced’ single round robin schedules for leagues and tournaments for up to six teams. Future releases will handle double round robin (home-and-home) schedules for up to thirty-two teams. NOTE: This plugin REQUIRES the MSTW LEAGUE MANAGER PLUGIN (version 2.5 for higher) to handle the creation of leagues, seasons, and teams.

Depending on the size of the league or tournament, the number of permutations and combinations of teams, time slots, dates, and locations can be huge. The simple (old) method of always having a single team always playing in the same time slot or position is not always the way to go. It can, and does, create problems with players, coaches, and fans because it can be inherently unfair. The issue is the quality of the first position time slot. If the time, location, and/or quality of the facility is desirable, then the team that’s always scheduled there will be advantaged, and the other teams will not share equal playing time at the desirable facility. If another time and location is less desirable (i.e., inconvenient time, long distance, poor quality of facility, etc.), then a team that is always scheduled to play there will be disadvantaged.

These issues and the inherent inequity are minimized by balanced schedules. Round robin scheduling includes a date, time, location, home and visitor teams, and game ID for each game. A quality schedule should distribute and balance the dates/days, times, locations, home and visiting teams of its games as equitably as possible.


The following steps will get Schedule Builder up and running quickly. View a quick tutorial on these steps here – COMING SOON!

  1. Teams & Leagues. MSTW League Manager (release 2.5 or later) MUST be installed and active before installing, activating and using MSTW Schedule builder. Begin by creating a league and adding teams to it in League Manager. For a tournament, create a league for it and add the teams. Remember that teams can be added to multiple leagues, so you won’t always have to create new teams.
  2. Schedule Builder Main Screen. Set the parameters for your tournament or league schedule, then create the games.
  3. Update Games Screen. If necessary, use the Update Games screen to adjust game times, dates, and locations.
  4. Use the MSTW League Manager shortcodes to create the desired front end displays for your site.

Display Settings

These settings control the data displayed and the colors of the staff tables [shortcode], the single coach profiles, and the coaches galleries. NOTE: It is strongly suggested that you use a custom stylesheet ( read more here) rather than using these color settings.

Data Field Settings

These settings provide control of the data fields and their labels to be shown on the front end displays.

Staff Table ([shortcode]) Settings

These settings are for the staff table shortcode. Leaving the default photo size as 125×125 pixels generally works out well, and avoids extra styling work.

Coach Profile Settings

These settings control the display of the single coach profiles.

Coaches Gallery Settings

These settings control the display of the coaches galleries.

Why a Child Theme?

This is WordPress 101, so more than you ever want to know about it is posted on the web and I’ll be very brief. MSTW plugin page templates and stylesheets can be customized for each site. The plugins will look for the appropriate files in the current theme directory, then in the plugin’s home directory.

If the files in the plugin’s directory are customized, then any new version of the plugin will overwrite those files. If you move the file to your theme’s directory, you have the same problem. Any new version of the theme will overwrite those files. Either way, your changes will be lost.

SO, always create a child theme and put any modified files in that theme’s directory. They will be safe there from both plugin and theme updates.

Coaching Staffs v1.4

While staying at home I got a bit crazy and decided to revisit one of the early MSTW plugins, Coaching Staffs. Although I was a bit chagrined by what I didn’t know about WordPress then, it’s actually a pretty cool plugin. It’s aimed at high school coaching staffs, where the same coach had different roles on different teams, e.g, Varsity defensive coordinator and JV head coach.

Anyway, the new release makes it much simpler and cleaner to customize the front end displays with custom CSS stylesheets. It also makes the use and deployment of the single coach profile/bio page and the coaching staff gallery page easier and more flexible.

So if you want to recognize your coaching staffs on your site, version 1.4 will be available soon on But you can check it out right now on

MSTW Team Rosters 4.2

I hope this note finds you all well during these trying times. I’ve been writing a little code while sheltering in place without spring sports, and MSTW Team Rosters release 4.2 will soon be available on and on your Installed Plugins admin screen. The primary upgrade is a long-requested feature – the capabilty to sort roster tables by number and name in the same way tables can be sorted by column on WordPress admin screens, e.g, All Posts or Team Rosters -> Manage Players. You can try it out on

Given that I’ll be holed up a bit longer, upcoming improvements include additional enhancements to the front end displays [shortcodes], improved integration with the MSTW League Manager plugin’s features, and the ability to manage team rosters by year. If any of you have requests for Team Rosters features please send them to me as soon as possible.

MSTW League Manager 2.7 Fixed

I believe version 2.7 of League Manager is fixed and posted in the plugin repository. I did not change the version number, so you will not get a notice on your plugins page that it’s been updated. If you have previously installed it, deactivate it, delete it, and add it again. You can search for ‘MSTW League Manager’ on your site admin plugin screen, and it should pop right up.

I hope this is that last post on this subject, but if you encounter any other issues, please let me know and I will address it ASAP. But hopefully you won’t have to hear from me again until tournaments (MSTW Bracket Builder) are updated, and tournament games can be displayed in the League Manager schedules.

BTW, some of you have asked, and yes, the format for the [mstw_league_schedule_table] shortcode did change to better accommodate ‘meets’ in that schedule table. You will only see this if you are using the extensions in the MSTW League Manager Add-ons plugin.

Problems found in League Manager 2.7

Users have alerted me to the following problems with MSTW League Manager 2.7. If you haven’t installed it yet, WAIT a bit while we sort things out. I’m confident there are not significant issues, just some mistakes, but before I get to the specifics of the 2.7 builds, here are a couple of general pointers:

  • If you use the extensions in the MSTW League Manager Add-ons plugin, you should always install the SAME VERSION of League Manager and the Add-ons. I forgot to mention this in my release announcement/email.
  • If you expect to see the output of a plugin, maybe a pretty schedule table, and instead you see some text like [mstw_league_schedule_table league=league-slug season=season-slug], it’s always because the plugin code is not found. (This applies to all WordPress plugins, not just MSTW.)

As for the specifics:

  1. If you are using the MSTW League Manager Add-ons plugin, and you install the MSTW League Manager plugin version 2.7 but don’t install version 2.7 of the Add-ons, you may see a text message just like the one above. Install MSTW League Manager Add-ons version 2.7.
  2. If you see a text message like [mstw_team_schedule team=team-slug season=season-slug], it’s because I made an error packaging the build. I’m testing a patch tonight. I will post/email a message when the patch is available on

I apologize for any inconvenience caused to plugin admin/users, and want to thank those who have helped me sort this out.

MSTW League Manager & LM Add-ons v2.7

New in MSTW League Manager – “Meets” with shortcode and template support. Watch more about meets …

Also in version 2.7 an “All Sports” sport concept intended for sites with a large number of teams, sometimes the high schools in an entire state. Watch more about All Sports:

“Local” sites generally track a manageable set of local leagues and teams – schedules, league standings, team rosters, highlights, and so forth. However they must manage a large set of teams on the site for non-league games and state playoff games against local teams. These sites don’t store any information about these non-local teams other than including them on local team schedules, tournament brackets, and meets. In particular, the site has no interest in tracking these teams’ leagues.

But here’s the problem: when creating a non-league game, all teams playing league’s sport so up in the drop-down list of teams for the game. But leagues, not teams, are attached to sports. So admins would create a “generic” league for a sport, and put teams in it. This works, but a non-local school may compete against local schools in many sports, and they have to be added to a “generic” league for each sport. This becomes a significant maintenance burden for literally hundreds of ‘non-league’ teams.

“All Sports” is one solution: In version 2.7 a “generic” league can be created as an “All Sports” league. If school A has 10 teams in 10 sports, one school A team can be created and placed in the “All Sports” league. That team will then appear in the team dropdowns for all leagues, regardless of the league’s sport.