🎯 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 →

Custom Player Statistics

Pro Feature

Goals, assists and cards are recorded for every player already. Custom player statistics let you track anything else per game: passes, tackles, saves, distance covered, a rating out of ten. You define the columns once and they appear in the game editor and on the front end.

Match to Player Statistics table on the Statistics Configurator with several Simple columns and their type badges

The clubs’ equivalent lives on the same page and works much the same way. See Club Statistics.

🚀 Finding the page

Go to Settings & Tools > Statistics. The Statistics Configurator holds two tables: club stats on top, then Match >> Player Statistics. One Save button writes both, and the page reloads after saving.

🧮 The six column types

Add a column with the buttons under Available Column Types at the foot of the table.

TypeWhat it isYou type the values?
DefaultAn existing stat: goals, penalty goals, own goals, assists, cards, goals conceded, minutes playedNo, taken from the game
SimpleA number of your own, such as TacklesYes
TimeA duration, entered as MM:SSYes
CalculatedTwo columns combined with sum, difference, ratio or ratio (%)No
ComposedUp to three columns printed together with a separator, such as 5-2-1No
FormulaAny expression across several columnsNo

Only Simple and Time columns get an input box in the game editor. Everything else is worked out when the page is drawn.

A Default column needs its Default Field picked in the Related Field cell: Yellow Cards, 2d Yellow / Red Cards, Red Cards, Goals, Penalty Goals, Own Goals, Assists, Goals Conceded or Minutes Played. Use it to put a built-in number in the same table as your own stats.

Composed is the one people miss. Set Field 1, Field 2 and Field 3 and give it a separator, and you get the compact three-part figure used for things like tackles won, lost and blocked. The separator defaults to a hyphen.

Column settings

Each row of the table is one column. Cells that don’t apply to a type are grayed out.

SettingApplies toWhat it does
Full NameAllThe column header on the front end, and its tooltip
Short NameAllUsed as the header instead when Show Full Column Name is off (see “How the table looks”)
Visibility (eye icon)AllHidden columns stay off the front end but still work as inputs to calculated, composed and formula columns
Related FieldDefault, SimpleDefault Field for a Default column; the API-Football field for a Simple one, when player statistics import is on
GroupAllall, Goalkeepers or Field Players
Prefix, PostfixSimple, Calculated (open on Formula too, but ignored there)Text before or after the value, such as a % sign
DigitsSimple, Calculated, FormulaDecimal places, 0 to 4
Color BGAllShade the value by a minimum and maximum, see “Coloring values”
Field 1, 2, 3Calculated, ComposedThe columns it’s built from. Calculated uses the first two.
CalculationCalculatedsum, difference, ratio or ratio (%)
SeparatorComposedThe text between the parts
IDAllThe number shortcodes use to refer to the column. Set automatically.

Worked example: pass accuracy %

You record Total Passes and Accurate Passes as Simple columns and want the percentage without typing it. Add a Calculated column:

  1. Full Name: Pass Accuracy, Short Name: PA%
  2. Field 1: Accurate Passes
  3. Field 2: Total Passes
  4. Calculation: ratio (%)
  5. Postfix: %, Digits: 1
Calculated column Pass Accuracy on the Statistics Configurator: Field 1 Accurate Passes, Field 2 Total Passes, Calculation ratio (%), Postfix %, Digits 1, and below it the Composed column Shots with Field 1 Shots Total, Field 2 Shots On Target and Separator /

A player with 32 passes and 23 accurate now shows 71.9%. Field 1 is divided by Field 2, so put the smaller number first. If Field 2 is 0 the cell shows 0.0% rather than an error.

For a composed column in the same table, set Field 1 to Shots Total, Field 2 to Shots On Target and Separator to /. That player’s 3 shots with 2 on target reads 3/2.

Field Players table on a game page with the Total Passes, Accurate Passes, Pass Accuracy percentage and composed Shots columns side by side

A Time column works for anything measured in minutes and seconds, such as time on the ball. Values look like 10:15, 5:01 or 0:58.

Keepers and outfield players

The Group column decides who a stat applies to. Set it to Goalkeepers, Field Players, or leave it on all.

This splits both the editor and the front end. Saves belongs on goalkeepers, dribbles on field players, and neither table has to carry a column of blanks for the other group. The game editor shows four tables because of it: keepers and field players, for each club.

🎨 Coloring values

Any column can shade its numbers, so good figures stand out. Click the Color BG cell on a row and you get three controls: a checkbox to enable it, a minimum, a maximum, and a live preview of the resulting colors.

Color background popover open on a stat column, showing the enable checkbox, minimum and maximum values and a preview of the color range

Set the minimum and maximum to the range your numbers actually occupy. New columns start at 0 and 10. The colors run from red at the minimum through yellow and green to a blue at the top, so despite the labels the highest values aren’t green, they’re blue.

Getting the range wrong is the usual complaint. If every value lands between 20 and 40 but the range says 0 to 10, every cell comes out the same color. For the pass accuracy column above, 60 and 90 is a sensible range.

Entering the values

Open a game and click Players Statistics in the editor’s left-hand menu. Every player in the starting eleven and the substitutes list gets a row, with one input per Simple and Time column.

Players Statistics box in the game editor with Goalkeepers and Field Players tables for one club and an input per stat column for each player

Unlike team statistics, player statistics can be entered before a game is finished, so you can fill them in as soon as the line-ups are in. Front-end editors and manual live scoring can enter them too, once Live edit – Player Stats (Settings > Features > Frontend Editing) or Player Stats (Settings > Features > Live Scores) is switched on.

Statistics belong to the line-up

Values are only kept for players who are in that game’s line-up or substitutes list. Remove a player from the line-up and their statistics go with them, silently. Temporary players, typed straight into a line-up without a player record, can’t hold statistics at all.

Adding a player to the line-up and typing their statistics in the same Save is fine: the line-up is written first.

Filling columns from API-Football

Turn on player statistics import in your API Import settings and the Related Field cell on Simple columns becomes a picker of provider fields: rating, saves, total passes, key passes, pass accuracy, shots, shots on target, tackles, blocks, interceptions, duels, duels won, dribble attempts, successful dribbles, dribbles past, fouls drawn and fouls committed.

Without that setting on, the picker doesn’t render and the cell stays empty. The API setup can also create these columns for you in one go. See Import Player Game Statistics.

The provider’s rating field is what most sites use for player match ratings.

Showing them on the front end

The table draws itself on every game page, under the team statistics. You don’t have to place it, as long as at least one player in that game has a value recorded.

That changes the moment you build a Game layout in the Layout Builder. A game layout replaces the default page completely, so any block you didn’t add is gone, this one included. Add the block whose category is Match and whose name is Custom Player Stats to bring it back.

The Available Block Types list of a Game layout in the Layout Builder, with the Match Custom Player Stats block in the third row

You can also put the table anywhere else with the match shortcode:

[anwpfl-match match_id="123" sections="player-stats"]

The identifier is match_id. Using id renders nothing at all, with no error. Note also that player-stats works even though it isn’t offered in the shortcode builder’s Sections list.

Player statistics table on a game page, with one row per player and color-shaded values in several columns

How the table looks

Five settings shape it, under Settings & Tools > Settings > Display > Match Display, in the Player Statistics group.

SettingDefaultWhat it does
Show Full Column NameYesUse Full Name in the header instead of Short Name
Hide Zero ValuesYesDraw a blank cell instead of a 0
Show Game Event IconsYesAdd goal and card icons beside the player’s name
Column Header Font Size (px)10Header text size
Max Column Width (px)50Stops long headers stretching the table

Hovering a header always shows the column’s Full Name, so with Show Full Column Name off you can keep headers short, like PA%, and still tell visitors what they mean.

Season totals and rankings

Custom columns aren’t limited to a single game. Reference them by the numeric ID from the table:

[anwpfl-stats-players-custom season_id="12" columns="player_name,goals,19,20"]

Add :avg for a per-game average or :avg_90 for a per-90-minutes figure, as in columns="player_name,19:avg_90". Set layout="tabulator" for a sortable, filterable table. Layout Builder team and competition layouts offer the same columns in their player blocks.

Two things to know for season tables. A percentage column like Pass Accuracy needs :avg: without it the table adds up each game’s percentage, while with it you get the season’s real figure, all accurate passes divided by all passes. And Composed and Time columns are per-game only, so season tables leave them out.

Full attribute list: the custom player stats shortcode.

A player’s season stats on their own page

Want shots on target, passes or key passes added up for the current season on the player’s page? On player pages built with Layout Builder v2, add the Stats Panel block and pick your columns, or add them to the Game Log for a per-game view. Anywhere else, use the player stats panel shortcode with a season_id. The shortcode and the Stats Panel block take Simple, Calculated and Formula columns.

Best player of each game

Use a rating column and let the plugin work it out: see Player Match Rating, including the “matches top rated” counter and best-rated lists. To name a winner yourself instead, add a Simple column called “Man of the Match”, type 1 against one player per game, and rank players by that column’s ID with the Stat Players shortcode.

🆘 Common surprises

A column can’t be deleted

Once a Simple or Time column has been saved, it gets storage of its own in the database and the Remove button is disabled, with the note “not possible to delete statistic saved in database”. This protects the values already recorded against it. Hide the column instead, using the eye toggle, which takes it off the front end while leaving the data intact.

A player is missing from the table

Players whose statistics are all zero are left out of the table entirely. This is the usual reason a table looks half empty. Substitutes who never came on are also excluded from some blocks, because those need a recorded appearance, which a substitute only gets once a substitution event is added to the game.

A column vanished from the table

Table shortcodes hide columns that are empty for every row by default. Set hide_empty_columns="0" to keep them. Check the column’s Group setting too: a goalkeepers column never appears in the field players table.

A time value disappeared

Time columns need MM:SS. When you leave a Time input without the colon in the right place, the editor shows a red “Invalid Time Format! Required: MM:SS” message, but it doesn’t stop you saving. On Save, anything without that colon or shorter than four characters is thrown away, and a value that was saved there before is cleared with it. Fix the entry before you press Save.

A % postfix doesn’t show on a Formula column

The Prefix and Postfix inputs are open on Formula columns, but the game page ignores them there. If you need a % sign, build the column as Calculated with ratio (%), which does print its postfix.

The whole table is missing

Either no player columns are defined, or no player in this game has any values recorded. The block renders nothing rather than an empty table.

📚 Related