๐ŸŽฏ Need Help?

Get Premium Support

Priority assistance from the developer

โฌ†๏ธ Upgrade

Unlock all features

More from ANWP

Sports Leagues Premium

Multi-sport league management with advanced statistics

Learn more โ†’

AnWP SL Theme Kit

Starter themes & block patterns for Sports Leagues

Learn more โ†’

Game Layout Builder

Pro Feature

Layout Builder v2 gives every game page three layouts: Upcoming before kickoff, Live while the game is being played and Finished once the result is in. The page picks the right one by itself. The Upcoming layout is a full match preview – head to head, form, goals over/under, goal timing, likely scorers and a stats-based prediction – all worked out from the games already on your site.

An upcoming game page built with Layout Builder v2 - the scoreboard header and the Stats Prediction block with the win / draw / win split

๐Ÿš€ Turn it on

Each of the three game layouts is its own card and is switched on separately. Until you do, your game pages render exactly as before – classic match page or your Layout Builder v1 Match and Match LIVE layouts.

  1. In wp-admin, open Layout Builder → Layouts (v2).
  2. Find the Game – Upcoming, Game – Live and Game – Finished cards.
  3. Switch on the ones you want. The label next to each toggle changes from Inactive to Active.
The Layouts (v2) admin page with the Game - Upcoming, Game - Live and Game - Finished cards, each with its own Active toggle and Edit Layout button

You don’t have to switch on all three. A state whose layout is inactive keeps the classic page – for example, activate Upcoming and Finished only and live games still render your classic live page. The builder reminds you with a “Not active: …” line above the layout.

Which layout a game gets

LayoutUsed when
FinishedThe game has a result saved.
LiveThe game page is in live mode: a live status or Live Events (Commentary) is set, the API live import lists the game, or a live source is enabled and kickoff is less than two hours away. Without a live status, Live Events or API data, a game stops counting as live 4 hours after kickoff.
UpcomingEverything else – including postponed and cancelled games, and past games still waiting for a result.

With live mode on, an open game page moves from Upcoming to Live to Finished by itself – visitors don’t need to reload.

What’s on each layout

The default layouts ship with these blocks, in this order. Reorder, remove or add blocks in the builder – each layout is edited on its own.

Upcoming (22 blocks)Live (12 blocks)Finished (16 blocks)
Game Header, Stats Prediction, Matchweek Games, Missing Players, Lineups, Head to Head, Common Opponents, Form & Points per Game, Rest & Schedule, Team Comparison, Match Goals, Goals Scored & Conceded, Streaks, Match Totals, Goal Timing, Halves & Game State, Likely Scorers, Booking Risk, Standings, Summary, Latest Games, Bottom ContentGame Header, Timeline, Live Stats, Goal Timing, Momentum, Commentary, Lineups, Team Stats, Player Stats, Events Summary, Missing Players, Bottom ContentGame Header, Timeline, Events Summary, Lineups, Team Stats, xG & Finishing, Top Performers, Result in Context, Standings, Player Stats, Summary, Video, Gallery, Referees, Latest Games, Bottom Content

Matchweek Games is a Global Shortcode block showing the rest of this matchweek (up to 20 games). The classic game sections – header, timeline, lineups, team and player stats, commentary, video, gallery – are the same ones your classic game page uses, with the same settings.

Preview statistics blocks

BlockShows
Stats PredictionWin / draw / win chances, expected goals, the most likely score, over 2.5 and both-teams-to-score, from each club’s attack and defence (a Poisson model). Upcoming and Live only.
Head to HeadThe record between the two clubs, the last meetings, and top scorers in those meetings.
Form & Points per GameLast 5 / last 10 results and points per game, overall and at the venue.
Team ComparisonPlayed, win %, goals per game, scored, conceded, both teams scored, clean sheets, failed to score – and xG when your site records it.
Match GoalsOver 0.5 to 4.5 goals, under 2.5, both teams to score, with a league average column. A 1st half tab appears when half-time scores are recorded.
Goals Scored & ConcededWho will score and who will concede – goals at the venue, scored over 0.5 / 1.5 / 2.5, failed to score, clean sheets.
StreaksCurrent runs – wins, unbeaten, scoring, clean sheets, over 2.5 and more.
Match TotalsCorners, cards, shots, fouls, offsides and possession per game, with over lines.
Goal TimingGoals scored and conceded in each 15-minute period, and who scores first.
Halves & Game StateHalf-time record, leading at half time and winning, points won from losing positions.
Rest & ScheduleDays of rest, the last and next game, and games in the last 14 / 30 days. Upcoming only.
Common OpponentsHow both clubs did against the same opponents.
Likely ScorersTop scorers, assists and – with player ratings – in-form players, per 90 minutes and share of the club’s goals. Missing players are struck through.
Booking RiskPlayers one booking from a ban, and cards per 90 minutes.
StandingsThe game’s own table around both clubs, with both highlighted. On Finished it shows the table after the game.
Prediction (API)The API-Football prediction charts. In the palette only when your API import stores predictions or odds.

Live and Finished blocks

BlockShows
Live StatsLive team stats with a marker for each club’s usual pace at this minute. Live only.
MomentumGoals, cards and substitutions in each 10-minute period. Live only.
Goal TimingOn a live game the current period is marked and moves with the clock.
Top PerformersThe four best-rated players of the game. Finished only, needs a player rating field.
xG & FinishingxG against goals, shot conversion and xG per shot. Without xG it becomes “Finishing”. Finished only.
Result in ContextWho was the pre-match favourite, pre-match form, how often this scoreline happens and which streaks the result extended or ended. Finished only.

Live blocks refresh when new events or stats come in, not every minute, so a busy live page stays light.

A live game page - the Live Stats block with the minute and pace markers, Goal Timing with the current period marked, and the Momentum bars

๐ŸŽฏ Where the numbers come from

Every statistic is worked out from the finished games on your site. Three rules keep the numbers honest:

  • Only games before kickoff count. Even on a Finished page, “form” and “head to head” are what they were before this game started – the game itself never leaks into its own preview numbers.
  • Official games only. Friendlies are left out of every statistic, so the numbers match the team pages. The one exception is Rest & Schedule, which counts friendlies because they still tire a squad.
  • Both clubs use the same games window. The two sides are always compared on the same basis.

Season, Last 10, Last 20

Statistics use one of three windows: Season (this game’s competition and season), Last 10 or Last 20 (each club’s latest finished games in any competition). Team Comparison, Match Goals, Goals Scored & Conceded, Match Totals and Stats Prediction show the three as pills, so visitors switch in place. The other statistics blocks follow the Default Window you set on the block in the builder.

The Match Goals block with the Season, Last 10 and Last 20 pills above a table of over/under percentages for both clubs, their average and the league

Early in a season there aren’t enough games to go on. When either club has fewer than 5 season games, Season switches to each club’s last 10 games in all competitions, the Season pill is disabled and a note under the block says why. A friendly’s page does the same, since friendlies have no season statistics.

Neutral venues

The plugin has no neutral-venue setting, so on a cup final the club listed first gets its home numbers and the other club its away numbers. Keep that in mind when reading home / away splits on neutral-ground games.

Blocks hide on thin data

Every statistics block checks its data and hides – heading included – when there isn’t enough of it. A site that only records results gets the scores-based blocks (head to head, form, match goals, streaks) and nothing empty. A block needs, for example:

  • Stats Prediction – at least 5 games for each club in the window.
  • Goal Timing and Momentum – goal events with minutes.
  • Halves & Game State – half-time scores for at least half the games.
  • Match Totals – team match stats (corners, cards, shots) for most games. Stats with too little data are left out and named in a note.
  • Top Performers and the In form tab of Likely Scorers – a player rating field.

Lineups before kickoff

On the Upcoming layout the Lineups block labels each club’s side separately, so visitors know how far to trust it:

LabelWhen
ConfirmedThe official lineup is saved – entered by you or imported from the API.
Possible XIYou entered a lineup and ticked Possible XI – not confirmed for that club in the Players section of the game edit screen.
Last game lineupNo lineup yet – the club’s starting XI and formation from its previous finished game.

When a side isn’t confirmed, a notice bar above the field says so – Lineups not confirmed yet, or Not all lineups confirmed yet when one club’s lineup is confirmed – and lists each club’s label. On Possible XI and Last game lineup, this game’s missing players are struck through. An imported API lineup always counts as confirmed and clears the Possible XI tick. Live and Finished pages show the lineup that was played, without a label.

The Lineups block on an upcoming game - a Lineups not confirmed yet notice, one club labelled Possible XI and the other Last game lineup, with a missing player struck through

Postponed and cancelled games

A postponed or cancelled game keeps the Upcoming layout, but much of a preview no longer makes sense – rest days, lineups and the prediction all assume the listed date. On the Upcoming layout, open a block’s settings and tick Hide when postponed or cancelled. The block (or a whole row) then disappears on games with the Postponed or Cancelled status. A game whose time is still to be decided (TBD) keeps it, because it usually goes ahead on the listed day.

A block's settings in the Game - Upcoming layout with the Hide when postponed or cancelled checkbox ticked

Betting notice

Stats Prediction prints “18+ ยท Statistical estimate, not betting advice.” under its numbers. Switch it off at Settings & Tools > Settings > Features > Manual Odds > Betting notice, or change the wording in Translations > Text Strings. Every other label on the game page is in Text Strings too.

Dynamic variables

Use these in Text, HTML and Shortcode blocks and in each layout’s SEO title and description. The default SEO title is %home_club_title% vs %away_club_title% - %competition_title%.

VariableValue
%match_id%, %competition_id%, %season_id%, %league_id%, %home_id%, %away_id%Game, competition (main stage), season, league and club IDs – for shortcodes
%home_club_title%, %away_club_title%Club names
%competition_title%, %season_title%, %league_title%, %matchweek%Competition, season, league, matchweek
%match_date%, %match_time%, %kickoff%Game date and time
%home_goals%, %away_goals%Score
%stadium_title%, %referee_name%, %referee_id%Stadium and referee
%prediction_text%API prediction advice
%h2h_total%, %h2h_home_wins%, %h2h_avg_goals%, %h2h_btts_pct%Head to head: official meetings, home club wins, goals per game, both-teams-scored % (last 10)
%last_meeting_result%Last meeting, e.g. “Bayern 3-1 Koln”
%home_form%, %away_form%Last 5 results as W / D / L
%home_ppg_home%, %away_ppg_away%Points per game at the venue
%home_streak%, %away_streak%Current run, e.g. “3 wins”
%home_avg_goals%, %away_avg_goals%Goals per game

The head-to-head values are empty when the clubs have never met. Wrap the sentence in [IF%h2h_total%] … [ENDIF%h2h_total%] and it’s dropped on a first meeting instead of reading “0 meetings”.

Moving from classic game layouts

Your Layout Builder v1 Match and Match LIVE layouts aren’t converted and aren’t touched. They keep rendering for every state whose v2 layout is inactive, so you can switch one state at a time. The v1 match blocks map to v2 like this:

Layout Builder v1Layout Builder v2
Match layout with Upcoming / Finished display options, and a separate Match LIVE layoutGame – Upcoming, Game – Live, Game – Finished
Header, ScoreboardGame Header (Scoreboard or Classic header style)
Goals, Cards, Substitutes, Missed Penalties, Penalty ShootoutEvents Summary (pick the sections)
LineUps, FormationLineups (Field + list, or List only)
Stats, Custom Player StatsTeam Stats, Player Stats
Head-to-head matchesHead to Head
PredictionPrediction (API), or Stats Prediction from your own data
Latest Matches, Match GalleryLatest Games, Gallery
Timeline, Commentary, Summary, Referees, Missing Players, Video, Home / Away Club Header, Bottom ContentSame names
Custom CodeGlobal Text, HTML or Shortcode
OddsNo separate block – the Game Header shows pre-match odds wherever your odds settings place them on the scoreboard

Check three real games

After activating, open an upcoming league game, a first-ever meeting (or an early-season game) and a finished game. The same layouts should look right on all of them. If one doesn’t, switch that card back to Inactive while you adjust it – the classic page takes over again straight away.

๐Ÿ†˜ Troubleshooting

The game page still looks like the old design

The layout for the game’s current state isn’t active – a live game needs Game – Live, a finished one Game – Finished. Or a page cache is serving old HTML: clear your caching plugin.

A statistics block is missing

It found too little data for this game and hid itself – see Blocks hide on thin data above. A block that’s palette-only on one state (Live Stats on Live, Top Performers on Finished) can’t be added to the others.

The Season pill is disabled

One of the clubs has fewer than 5 finished games in this competition and season, or the game is a friendly. The block uses the last 10 games instead and says so in its footer.

The Standings block doesn’t show

It shows the standing table of the game’s own competition and group. A knockout game has no table, so the block hides. An API table imported without a game date range can’t be matched to the game date and is skipped.

Numbers didn’t change after a result came in

Statistics are cached and refreshed whenever a game is finished – saved in the editor or imported by the API. If you corrected an old result by hand directly in the database, the cache catches up within a day.

๐Ÿ“š Related