v0.18.3 - Testing

πŸš€ * New Feature - Layout Builder v2: Player pages. One layout now renders every player you have, with nothing to configure per player. Blocks with no data hide themselves instead of leaving an empty heading, so the same layout works on a forward with ten seasons of detailed statistics and on a squad player with three appearances. Any block, row or tabs group can also be limited to chosen positions, so goalkeepers get clean sheets and goals conceded where field players get goals and assists - on the same layout. Activate it in Layout Builder - your classic player layouts keep rendering until you do.
🟒 * Add - Layout Builder v2 player page blocks - Player header (avatar, squad number, position, club, nationality, age, height and weight, a W/D/L form strip and an injury or suspension chip), Season Record (rating hero, win/draw/loss chips, per-90 stat tiles and an optional comparison against the league and club leaders), Game Log (sortable match-by-match table with a totals footer, season and competition filters, and your own custom stats as extra columns), Splits (home/away, month by month, win/draw/loss), vs Opponents, Form Trends (rating, goals or assists timeline with the player's own average drawn in), Career Chart, Discipline (card tiles, cards per game and suspension history), Top Performances, Goal Analysis (penalty vs open play, goal minutes by 15-minute band), Teammates, Club Standings, Next Game and Missed Matches. Column sets follow the position - goalkeepers get clean sheets and goals conceded where field players get goals and assists.
🟠 * Fix - Games from competitions marked as Friendly were counted in the Layout Builder player Career table and chart, the form strip, and Last Win / Last Loss. Friendly games now stay out of these and still appear in the player's match list.
πŸš€ * New Feature - Layout Builder v2: Competition pages. One layout now renders every competition you have - single-stage and multistage, full-data and results-only - with nothing to configure per competition. Sections with no data (standings, bracket, season leaders, player statistics, club stats) hide themselves instead of leaving an empty heading, so the same layout works on a league with full statistics and on one that only records results. Multistage competitions get stage filter pills on the leaders and statistics blocks, and shortcodes no longer need a hand-typed multistage attribute. Activate it in Layout Builder - your classic competition layouts keep rendering until you do.
🟒 * Add - Layout Builder v2 competition page blocks - Season Leaders (Scoring, Creating, Goalkeeping, Discipline and Ratings cards, each with a "Show full list" link opening the top 25; rate leaderboards require a minimum share of appearances, so a substitute with one goal in ten minutes no longer tops the chart), compact Matches (Results, Upcoming and Awaiting result segments with a date-window pager of about 10 games instead of the whole season, cutting the page weight roughly in half on a full league), Club Stats (per-club record plus the stats you pick - clean sheets, cards, corners, shots, and any custom club stat such as xG - sortable, paged, every club listed), Goals & Results (goals per match, over 2.5 and both-teams-scored rates, home/draw/away and goal split bars, all worked out from match scores alone), Scorelines & Goals (most common full-time and half-time scorelines, goals by half, half-time to full-time outcomes), and Transfers with a club switcher instead of every club at once - on a Champions League page that cut the block from 1.5 MB to 0.1 MB and the whole page by 39%. Multistage competitions get stage filter pills, and the classic full-season Matches block stays in the palette.
🟒 * Add - Layout Builder v2 display conditions on competition pages - show or hide any block, row or tabs group by competition status (Upcoming, Active, Finished, Archived) and by league classification. Status is derived from match data, so it stays current on its own, and a new Archived checkbox in the competition editor overrides it for past seasons. A hidden row hides everything inside it. Existing layouts don't change - a block with no conditions set always shows.
🟠 * Fix - Clubs Stats shortcode and the new Club Stats block no longer count friendly matches into competition totals.
🟒 * Add - Layout Builder v2 team page - partial standings table (top rows, around the current team, or both combined, with an optional "Show full table" button), a Gallery block showing the club photo gallery and notes, per-game and per-90 averages for Player Stats columns including the same stat in several modes at once, and roster position chips that follow the new position badge colors.
🟠 * Fix - Layout Builder team roster: players without a position ran on from the previous position group with no visible break, so they read as forwards. They now sit below their own divider.
🟒 * Add - Layout Builder v2 rows and tab containers now hide themselves completely when every block inside them is empty - heading included - and tabs drop empty panes together with their tab buttons. A row no longer leaves an empty column gap when one of its blocks has no data; the remaining block uses the full width. A new per-block "Always Show" toggle in the Advanced settings keeps any block or container visible even without data.
🟒 * Update - Layout Builder v2 interface - one consistent block style across team, player and competition: only the header block at the top of the page keeps a frame, and section blocks below it are separated by their section heading instead of an individual box (put blocks inside a row container and set its background and border if you prefer boxed sections). The layouts screen now shows every layout side by side in one card grid, each card naming the pages it renders, how many blocks it has and when it was last customized, and the section navigation sits closer to the sections it links to.
🟒 * Add - rolling substitutions support (futsal/minifootball): a substituted player can return to the field, and minutes and stats aggregate across all stints. The player profile match list shows the actual playing periods next to total minutes, e.g. 80' (1-45, 55-90). Enable it in Settings, then per stage.
🟒 * Add - per-stage default match duration: new games copy the stage duration values at creation.
🟠 * Fix - Half-time minutes correction, the clean-sheet threshold and goalkeeper clean-sheet totals now follow the configured match duration and the per-match goalkeeper position, in Custom Player Stats tables and the premium player templates.
🟒 * Update - Player statistics tables now send far less data to the browser
🟒 * Add - Player Stats shortcode: show the same stat column in multiple aggregation modes at once (e.g. goals,goals:avg,goals:avg_90) - per-game and per-90 columns get a small header marker, and sort/filter attributes understand the mode tokens too.
🟠 * Fix - Player statistics table left the Position column blank when the short position option was turned off, and "hide zeros" still printed a 0 in columns that use decimals - a custom stat with decimal places, and the new per-game and per-90 columns - so the same row could show a blank and a 0 side by side. Every zero now hides consistently.
🟠 * Fix - Player rating colors ignored the Minimum / Maximum Color Rating settings, so a site using a 4-8 scale still got colors built for a 0-10 scale, and the same rating could show one color on the match badge and another in the Season Statistics table. Rating pills are also easier to read now - dark numerals on a light fill instead of white on a mid-tone.
🟠 * Fix - "Header Elements" in the Player Header display settings now applies to the regular player header too - picking and ordering the details previously worked only with the Compact Layout enabled. The chosen elements can now also be dragged into the order you want.
🟒 * Add - Transfers shortcode "Rows (dense)" layout - one compact line per transfer (date, player, club out to club in, fee), for competition pages with long transfer lists, at less than half the page weight of the other transfer layouts. The shortcode also accepts a club and a competition together now, so a list can be scoped to one club within one competition - previously the club was ignored when a competition was set.
🟠 * Fix - API imports did not recognize players merged with the Player Merge Tool - squad updates silently re-created the removed duplicate, and detailed player match statistics with the player rating stopped importing for the merged player. The Player Merge Tool also no longer sums per-match API statistics when both duplicates have data for the same match (a 7.2 rating merged with a 6.9 became 14.1) - the kept player's value is preserved.
🟠 * Fix - API import no longer creates duplicate transfers when API-Football stores the same move twice with dates a day apart (re-importing transfers for an affected competition replaces the old duplicate rows), and no longer leaves behind an empty player page when a squad entry arrives without a player ID - previously that player was created but never filled in, leaving a published profile with a blank header and no club, statistics or link back to the import.
🟠 * Fix - API-Football imports no longer make an instant second request when the API reports a rate limit - that retry could not succeed inside the same per-minute window and only spent an extra request from the plan budget.
🟒 * Add - Batch Import Matches: optional "Special Status" column to set unplayed matches as Postponed, Time To Be Defined, or Cancelled during import - use "TBD" to mark a whole schedule as not yet scheduled.
🟒 * Add - Page-optimizer compatibility - Football Leagues styles are now automatically kept out of the "Remove Unused CSS" / "Used CSS" optimization in Perfmatters, WP Rocket and LiteSpeed Cache, so JavaScript-driven UI (live scores, sliders, tabs, tooltips) no longer loses its styling. On by default, no setup needed. For FlyingPress, which only offers this setting in its own interface, an admin notice shows the exact value to paste into its stylesheet-exclude field.
🟠 * Fix - team page Season Record showed a premature "Winner" trophy on knockout cups that use the Advanced Bracket (winning a group-stage game read as winning the whole cup). The furthest-round chip now follows the bracket rounds, the trophy appears only after the actual final, and the club's group name shows next to its place ("Group A Winner").
🟠 * Fix - fatal error on the WooCommerce order edit page (High-Performance Order Storage) when Premium was active.
🟠 * Fix - [CORE] Critical site error when the free plugin was updated to 0.18.2 while the premium plugin remained on an older version - the two now stay compatible.
🟒 * Add - [CORE] Player Positions setting - reduce the available field positions (for example goalkeeper + field player for futsal). Position dropdowns, squad grouping, and sorting follow the enabled set, and players with a disabled position stay visible in a trailing squad group. Position letter chips on match lineups and missing players are now color-coded per role (goalkeeper blue, defender green, midfielder orange, forward red) - on by default, turn it off in Settings > Player Positions.
🟠 * Fix - [CORE] Renamed position labels (Settings > Text & Labels) now also apply in the admin: player Position dropdown, Players list column, and the match lineups editor.
🟒 * Add - [CORE] per-match player position in the game lineups editor - set the position a player played in a specific game (for example a field player who kept goal). Goalkeeper stats such as goals conceded and clean sheets follow it, and the player profile shows goalkeeper stat columns for those matches - both column sets appear when a player played in both roles.
🟠 * Fix - [CORE] Half-time minutes correction now follows the configured match duration (futsal 40-minute matches no longer lose a minute at the wrong half-time mark), and clean sheets for goalkeepers substituted out are judged relative to match duration instead of a fixed 60-minute threshold.
🟠 * Fix - [CORE] Games from competitions marked as Friendly were counted in the player statistics table and its totals. Friendly games now stay out of the statistics and still appear in the player's match list.
🟠 * Fix - [CORE] Standing table column headers and tooltips disappearing after saving the plugin settings.
🟒 * Add - [CORE] Standing shortcode "partial" attribute accepts comma-separated segments to show several slices together (e.g. "1-3,45"); rows removed between and around the slices are marked with a separator row. This also fixes club mode showing the full table instead of the rows around the club on some standings.
🟠 * Fix - [CORE] Club galleries created before 0.18.0 appeared empty in the club editor's Media tab, and adding new images there permanently removed the existing ones. The same galleries never reached the frontend either - the classic club page and Layout Builder v1 layouts still read the old storage location. Legacy galleries now display, survive edits, and render on the site.
🟒 * Add - [CORE] Data Import tool: "Special Status" column for Games (Insert) and Games (Update) - set unplayed matches as Postponed, Time To Be Defined, or Cancelled during import (use TBD to mark matches as not yet scheduled).
🟒 * Update - [CORE] "Group Players by Position" squad option now defaults to No for clubs that never set it, and players without a position are no longer hidden when it is enabled - they render in a separate group at the end.
🟠 * Fix - [CORE] Competitions whose first stage is stored as a multistage stage pointing at itself (common for leagues imported from the API, e.g. Premier League, Serie A, La Liga, Bundesliga, Ligue 1, Champions League) were skipped by the [anwpfl-competition-list] shortcode - about a third of competitions - and left the Missed Matches section on the player profile empty. Both now work.
🟠 * Fix - [CORE] Club squad showed an empty staff card when a staff member had been deleted or unpublished. Those entries are now skipped.
🟠 * Fix - [CORE] The [anwpfl-competition_header] shortcode showed the current page's title instead of the competition name whenever it was placed on a page other than that competition's own page.

New Tutorials

-Β Rolling Substitutions

Layout Builder v2 - Player Page

Image 12224

Image 12225

Image 12226

Image 12227

Image 12228

Image 12229

Layout Builder v2 - Competition page blocks

New Blocks

Image 12231

Image 12232

Image 12230

Layout Builder display conditions on competition pages

Image 12233