{"id":1472932,"date":"2026-07-23T14:10:43","date_gmt":"2026-07-23T13:10:43","guid":{"rendered":"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/"},"modified":"2026-07-23T14:10:43","modified_gmt":"2026-07-23T13:10:43","slug":"tommaso-di-marco","status":"publish","type":"player","link":"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/","title":{"rendered":"Tommaso Di Marco"},"content":{"rendered":"<div class=\"vcsw-sports-widgets shortcode vcsw-player-profile\" id=\"player_profile-1\"><script type=\"application\/json\">{\"sports_type\":\"football\",\"entity_type\":\"player\",\"entity_id\":\"688d727f8613c3bde7a4d3fa\",\"widget_type\":\"profile\",\"post_id\":\"\"}<\/script><div class=\"swp-profile\">\n    <div class=\"swp-profile__card\">\n        <div class=\"swp-profile__header\">\n                            <div class=\"swp-profile__name\">\n                    <span class=\"swp-profile__name-first player-name\">Tommaso<\/span>\n                    <strong class=\"swp-profile__name-last player-last-name\">Di Marco<\/strong>\n                <\/div>\n                    <\/div>\n        <div class=\"swp-profile__info\">\n            <ul class=\"swp-profile__info-list\">\n                <li class=\"swp-profile__info-item\">\n                    <span class=\"swp-profile__info-label\">Club<\/span>\n                                        <span class=\"swp-skeleton swp-profile__info-label\"><\/span>\n                    <span class=\"swp-skeleton swp-profile__info-value\"><\/span>\n                <\/li>\n                <li class=\"swp-profile__info-item\">\n                    <span class=\"swp-profile__info-label\">Position<\/span>\n                                        <span class=\"swp-skeleton swp-profile__info-label\"><\/span>\n                    <span class=\"swp-skeleton swp-profile__info-value\"><\/span>\n                <\/li>\n                <li class=\"swp-profile__info-item\">\n                    <span class=\"swp-profile__info-label\">Date Of Birth<\/span>\n                    <time datetime=\"30.07.2003\" class=\"swp-profile__info-value player-birthday\">30.07.2003<\/time>\n                    <span class=\"swp-skeleton swp-profile__info-label\"><\/span>\n                    <span class=\"swp-skeleton swp-profile__info-value\"><\/span>\n                <\/li>\n                <li class=\"swp-profile__info-item\">\n                    <span class=\"swp-profile__info-label\">Nationality<\/span>\n                                            <strong class=\"swp-profile__info-value player-homeland\">Italy<\/strong>\n                                        <span class=\"swp-skeleton swp-profile__info-label\"><\/span>\n                    <span class=\"swp-skeleton swp-profile__info-value\"><\/span>\n                <\/li>\n            <\/ul>\n        <\/div>\n    <\/div>\n\n    <div class=\"swp-profile__filter\">\n        <button class=\"swp-profile__filter-toggle desktop-hidden\">\n            <span class=\"swp-profile__filter-toggle-text\">Filter<\/span>\n            <span class=\"swp-profile__filter-toggle-icon\">\n                <svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" version=\"1.1\"\n                     viewBox=\"0 0 17 17\" height=\"1em\" width=\"1em\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><g><\/g><path\n                            d=\"M12.146 6.146l0.707 0.707-4.353 4.354-4.354-4.353 0.707-0.707 3.647 3.646 3.646-3.647zM17 8.5c0 4.687-3.813 8.5-8.5 8.5s-8.5-3.813-8.5-8.5 3.813-8.5 8.5-8.5 8.5 3.813 8.5 8.5zM16 8.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5 3.364 7.5 7.5 7.5 7.5-3.364 7.5-7.5z\"><\/path><\/svg>\n            <\/span>\n        <\/button>\n        <div class=\"swp-profile__filter-holder\">\n            <div class=\"swp-profile__filter-heading desktop-hidden\">\n                <span class=\"swp-profile__filter-title\">Filter<\/span>\n            <\/div>\n            <ul class=\"swp-profile__filter-items\">\n\n                <li>\n                    <button type=\"button\" class=\"swp-profile__filter-item\">\n                        <span class=\"btn-text-group\">\n                            <span class=\"filter-label\">Team<\/span>\n                            <strong class=\"filter-value\"><\/strong>\n                        <\/span>\n                        <svg\n                            class=\"chevron-icon\"\n                            stroke=\"currentColor\"\n                            fill=\"currentColor\"\n                            stroke-width=\"0\"\n                            viewBox=\"0 0 17 17\"\n                        >\n                            <path d=\"M12.146 6.146l0.707 0.707-4.353 4.354-4.354-4.353 0.707-0.707 3.647 3.646 3.646-3.647zM17 8.5c0 4.687-3.813 8.5-8.5 8.5s-8.5-3.813-8.5-8.5 3.813-8.5 8.5-8.5 8.5 3.813 8.5 8.5zM16 8.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5 3.364 7.5 7.5 7.5 7.5-3.364 7.5-7.5z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/li>\n                <li>\n                    <button type=\"button\" class=\"swp-profile__filter-item\">\n                        <span class=\"btn-text-group\">\n                            <span class=\"filter-label\">Season<\/span>\n                            <strong class=\"filter-value\"><\/strong>\n                        <\/span>\n                        <svg\n                            class=\"chevron-icon\"\n                            stroke=\"currentColor\"\n                            fill=\"currentColor\"\n                            stroke-width=\"0\"\n                            viewBox=\"0 0 17 17\"\n                        >\n                            <path d=\"M12.146 6.146l0.707 0.707-4.353 4.354-4.354-4.353 0.707-0.707 3.647 3.646 3.646-3.647zM17 8.5c0 4.687-3.813 8.5-8.5 8.5s-8.5-3.813-8.5-8.5 3.813-8.5 8.5-8.5 8.5 3.813 8.5 8.5zM16 8.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5 3.364 7.5 7.5 7.5 7.5-3.364 7.5-7.5z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/li>\n                <li>\n                    <button type=\"button\" class=\"swp-profile__filter-item\">\n                        <span class=\"btn-text-group\">\n                            <span class=\"filter-label\">Competition<\/span>\n                            <strong class=\"filter-value\"><\/strong>\n                        <\/span>\n                        <svg\n                            class=\"chevron-icon\"\n                            stroke=\"currentColor\"\n                            fill=\"currentColor\"\n                            stroke-width=\"0\"\n                            viewBox=\"0 0 17 17\"\n                        >\n                            <path d=\"M12.146 6.146l0.707 0.707-4.353 4.354-4.354-4.353 0.707-0.707 3.647 3.646 3.646-3.647zM17 8.5c0 4.687-3.813 8.5-8.5 8.5s-8.5-3.813-8.5-8.5 3.813-8.5 8.5-8.5 8.5 3.813 8.5 8.5zM16 8.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5 3.364 7.5 7.5 7.5 7.5-3.364 7.5-7.5z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/li>\n                <li>\n                    <button type=\"button\" class=\"swp-profile__filter-item\">\n                        <span class=\"btn-text-group\">\n                            <span class=\"filter-label\">Stat Group<\/span>\n                            <strong class=\"filter-value\">Popular<\/strong>\n                        <\/span>\n                        <svg\n                            class=\"chevron-icon\"\n                            stroke=\"currentColor\"\n                            fill=\"currentColor\"\n                            stroke-width=\"0\"\n                            viewBox=\"0 0 17 17\"\n                        >\n                            <path d=\"M12.146 6.146l0.707 0.707-4.353 4.354-4.354-4.353 0.707-0.707 3.647 3.646 3.646-3.647zM17 8.5c0 4.687-3.813 8.5-8.5 8.5s-8.5-3.813-8.5-8.5 3.813-8.5 8.5-8.5 8.5 3.813 8.5 8.5zM16 8.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5 3.364 7.5 7.5 7.5 7.5-3.364 7.5-7.5z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/li>\n            <\/ul>\n        <\/div>\n    <\/div>\n\n    <div class=\"swp-profile__stats\">\n        <ul class=\"swp-profile__stats-list\">\n                    <\/ul>\n    <\/div>\n<\/div>\n<\/div>\n\n\n<div class=\"vcsw-sports-widgets block vcsw-player-prediction\" id=\"player-prediction-player-profile\"><script type=\"application\/json\">{\"block_id\":\"player-prediction-player-profile\",\"source\":\"next_match\",\"new_badge\":true,\"widget_type\":\"match-prediction\",\"layout\":\"player\",\"sports_type\":\"football\",\"player_post_id\":0,\"player_name\":\"\",\"season\":\"\",\"competition_id\":\"\",\"event_date\":\"\",\"event_id\":\"\",\"event_name\":\"\",\"event_datetime\":\"\",\"player_markets\":[\"anytime_goalscorer\",\"first_goalscorer\",\"anytime_assist\",\"to_be_carded\"],\"bookmakers\":[],\"title\":\"\",\"subtitle\":\"\",\"post_id\":1472932}<\/script><\/div>\n\n<div class=\"vcsw-sports-widgets block vcsw-match-prediction\" id=\"match-prediction-player-profile\"><script type=\"application\/json\">{\"block_id\":\"match-prediction-player-profile\",\"source\":\"next_match\",\"markets\":[\"match_result\",\"total_goals_2.5\"],\"collapsed\":true,\"new_badge\":true,\"widget_type\":\"match-prediction\",\"sports_type\":\"football\",\"season\":\"\",\"competition_id\":\"\",\"event_date\":\"\",\"event_id\":\"\",\"event_name\":\"\",\"event_datetime\":\"\",\"bookmakers\":[],\"players_limit\":5,\"title\":\"\",\"subtitle\":\"\",\"show_team_news\":true,\"post_id\":1472932,\"hide_focus_player\":true}<\/script><\/div>\n\n\n\n\n\n<script>\n\/* Stats table (club + player pages), synced pattern 1498205.\n   1. Open on the newest season that has data, but only if that season is still current.\n      Retired players and defunct clubs keep All Seasons.\n   2. Club pages: hide General-tab Penalties Taken (feed returns 0 for teams) and Minutes Played.\n      Cells get a class, not removed, so the widget's Total row keeps its column alignment.\n   3. Club pages: the feed's team \"Appearances\" counts every fixture, played or not. Replace it\n      with the number of finished matches per competition season (vcsw events endpoint, which also\n      covers cup and European knockout games) and relabel the column \"Games Played\".\n   4. Club pages: player slider shows only players with a league appearance this season, in\n      squad-number order (see reshapeSquad).\n   Programmatic dropdown clicks suppress the widget's focus() call, which otherwise jumps the page.\n   No double-ampersands: WordPress texturizes them and breaks the script. *\/\n(function () {\n  var HIDE_CLUB = ['general|Penalties Taken', 'general|Minutes Played'];\n  var isClub = location.pathname.indexOf('\/stats\/clubs\/') !== -1;\n  var teamId = null;\n  \/* The profile widget's JSON config sits later in the page than this script and is removed\n     once the widgets hydrate, so watch for it while the page parses. *\/\n  function readCfg(s) {\n    if (teamId) return;\n    if (s.tagName !== 'SCRIPT') return;\n    if (s.type !== 'application\/json') return;\n    var t = s.textContent;\n    if (t.indexOf('\"entity_type\":\"team\"') === -1) return;\n    if (t.indexOf('\"widget_type\":\"profile\"') === -1) return;\n    try { teamId = JSON.parse(t).entity_id || null; } catch (e) {}\n  }\n  document.querySelectorAll('script[type=\"application\/json\"]').forEach(readCfg);\n  var mo = null;\n  if (isClub) {\n    if (!teamId) {\n      mo = new MutationObserver(function (list) {\n        list.forEach(function (m) {\n          m.addedNodes.forEach(function (n) {\n            if (n.nodeType !== 1) return;\n            readCfg(n);\n            if (n.querySelectorAll) n.querySelectorAll('script[type=\"application\/json\"]').forEach(readCfg);\n          });\n        });\n        if (teamId) mo.disconnect();\n      });\n      mo.observe(document.documentElement, { childList: true, subtree: true });\n    }\n  }\n\n  function isCurrent(v) {\n    var start = parseInt(v, 10);\n    if (isNaN(start)) return false;\n    var end = v.indexOf('-') > 0 ? start + 1 : start;\n    return end >= new Date().getFullYear();\n  }\n  function quietClick(f, opt) {\n    var btn = f.querySelector('.swp-custom-select__toggle');\n    if (btn) btn.focus = function () {};\n    opt.click();\n    if (btn) delete btn.focus;\n  }\n  function hideCols(f, list) {\n    var row = f.querySelector('tbody tr');\n    if (!row) return;\n    var tds = row.querySelectorAll('td');\n    var ths = f.querySelectorAll('thead th');\n    list.forEach(function (key) {\n      var parts = key.split('|');\n      var sel = '[data-entity=\"' + parts[0] + '\"][data-title=\"' + parts[1] + '\"]';\n      f.querySelectorAll('td' + sel).forEach(function (c) { c.classList.add('sq-hide-col'); });\n      for (var i = 0; i < tds.length; i++) {\n        if (tds[i].matches(sel)) { if (ths[i]) ths[i].classList.add('sq-hide-col'); }\n      }\n    });\n  }\n  function relabel(f, from, to) {\n    f.querySelectorAll('thead th span').forEach(function (s) {\n      if (s.textContent.trim() === from) s.textContent = to;\n    });\n  }\n  function pickSeason(f) {\n    var opts = f.querySelectorAll('.swp-custom-select__option');\n    for (var i = 0; i < opts.length; i++) {\n      var v = opts[i].dataset.value;\n      if (!v) continue;\n      if (!f.querySelector('tbody span[data-season=\"' + v + '\"]')) continue;\n      if (isCurrent(v)) quietClick(f, opts[i]);\n      break;\n    }\n  }\n  function getNonce() {\n    if (window.menuWidgetData) { if (window.menuWidgetData.nonce) return window.menuWidgetData.nonce; }\n    var found = null;\n    document.querySelectorAll('script').forEach(function (s) {\n      if (found) return;\n      var m = s.textContent.match(\/\"rest_url\":\"[^\"]*vcsw[^\"]*\"[^}]*\"nonce\":\"(\\w+)\"\/);\n      if (m) found = m[1];\n    });\n    return found;\n  }\n  function seasonKey(s) {\n    var m = String(s || '').match(\/^(\\d{4})\\\/(\\d{4})$\/);\n    return m ? m[1] + '-' + m[2].slice(2) : String(s || '');\n  }\n  function seasonStart(v) {\n    var y = parseInt(v, 10);\n    if (isNaN(y)) return null;\n    return v.indexOf('-') > 0 ? new Date(Date.UTC(y, 6, 1)) : new Date(Date.UTC(y, 0, 1));\n  }\n  \/* One fixtures lookup per page, shared by the Games Played fix and the player slider. *\/\n  var eventsCache = {};\n  function loadEvents(id) {\n    if (eventsCache[id]) return eventsCache[id];\n    var nonce = getNonce();\n    \/* Window covers the running season(s) only: calendar-year seasons from January, split seasons\n       from July. A season that starts before the window is never touched, so a partial count can't\n       overwrite a finished season. *\/\n    var now = new Date();\n    var y = now.getUTCFullYear();\n    var from = now.getUTCMonth() >= 6 ? new Date(Date.UTC(y, 0, 1)) : new Date(Date.UTC(y - 1, 6, 1));\n    var body = JSON.stringify({ sports_type: 'football', limit: 1000, skip_wp_data: true, sort: ['datetime'],\n      filters: { 'participants.participant_id': id, datetime: { $gte: from.toISOString() } } });\n    eventsCache[id] = new Promise(function (resolve) {\n      if (!nonce) { resolve(null); return; }\n      function attempt(left) {\n        fetch('\/en\/wp-json\/vcsw\/v2\/events', {\n          method: 'POST', headers: { 'Content-Type': 'application\/json', 'X-WP-Nonce': nonce }, body: body\n        }).then(function (r) { return r.ok ? r.json() : null; }).then(function (d) {\n          var good = d ? (d.http_status === 200 ? (d.items ? d.items.length > 0 : false) : false) : false;\n          if (good) { resolve({ items: d.items, from: from }); return; }\n          if (left > 0) setTimeout(function () { attempt(left - 1); }, 1500); else resolve(null);\n        }).catch(function () { if (left > 0) setTimeout(function () { attempt(left - 1); }, 1500); else resolve(null); });\n      }\n      attempt(2);\n    });\n    return eventsCache[id];\n  }\n  function fixGames(f) {\n    if (!teamId) return;\n    loadEvents(teamId).then(function (ev) { if (ev) apply(f, ev.items, ev.from); });\n  }\n  function apply(f, items, from) {\n    var played = {};\n    items.forEach(function (e) {\n      if (e.status !== 'finished') return;\n      var cs = e.competition_season || {};\n      var k = String(cs.competition || '').toLowerCase() + '|' + seasonKey(cs.season);\n      played[k] = (played[k] || 0) + 1;\n    });\n    var changed = false;\n    f.querySelectorAll('tbody tr').forEach(function (tr) {\n      var comp = tr.querySelector('td').textContent.trim().toLowerCase();\n      var cell = tr.querySelector('td[data-entity=\"general\"][data-title=\"Appearances\"]');\n      if (!cell) return;\n      var all = cell.querySelector('span[data-season=\"\"]');\n      cell.querySelectorAll('span[data-season]').forEach(function (sp) {\n        var season = sp.dataset.season;\n        if (!season) return;\n        var st = seasonStart(season);\n        if (!st) return;\n        if (st < from) return;\n        var n = played[comp + '|' + season];\n        if (n === undefined) return;\n        var old = parseFloat(sp.textContent) || 0;\n        if (old === n) return;\n        sp.textContent = n;\n        if (all) all.textContent = (parseFloat(all.textContent) || 0) - old + n;\n        changed = true;\n      });\n    });\n    if (changed) {\n      var sel = f.querySelector('.swp-custom-select__option.is-selected');\n      if (sel) quietClick(f, sel);\n    }\n  }\n  \/* Club pages: the player slider (vcsw team-players widget) lists the whole squad by position.\n     Rewrite its API response before the widget renders it: drop players with no league start or\n     sub appearance this season, then order by squad number (no number last). The league is the\n     competition with the most fixtures this season. If the appearance data fails or takes over\n     8s, the list is still put in number order, just unfiltered. Each club's league id is cached\n     in localStorage per season, so repeat visits skip the slow league lookup. *\/\n  function leagueId(items) {\n    var n = {};\n    var best = null;\n    items.forEach(function (e) {\n      var cs = e.competition_season || {};\n      if (!cs._id) return;\n      n[cs._id] = (n[cs._id] || 0) + 1;\n      if (!best) best = cs._id;\n      if (n[cs._id] > n[best]) best = cs._id;\n    });\n    return best;\n  }\n  function memberStat(compId, stat) {\n    return fetch('\/en\/wp-json\/vcsw\/v2\/statistics', {\n      method: 'POST', headers: { 'Content-Type': 'application\/json', 'X-WP-Nonce': getNonce() },\n      body: JSON.stringify({ sports_type: 'football', competition_id: compId, entity_type: 'members', top_count: 1000, stats: [stat] })\n    }).then(function (r) { return r.ok ? r.json() : null; });\n  }\n  \/* Season label for cache keys: '2026-27' from July, the previous split season before July. *\/\n  function seasonTag() {\n    var d = new Date();\n    var y = d.getUTCFullYear();\n    if (d.getUTCMonth() < 6) y = y - 1;\n    return y + '-' + String(y + 1).slice(2);\n  }\n  \/* The upstream API is slow and intermittent, so ask two endpoints for the club's league at once\n     and take whichever answers first: the team profile's current competition, or the competition\n     with the most fixtures in the events feed. *\/\n  function leagueFor(id) {\n    var key = 'sqLeague:' + id + ':' + seasonTag();\n    var cached = null;\n    try { cached = localStorage.getItem(key); } catch (e) {}\n    if (cached) return Promise.resolve(cached);\n    return new Promise(function (resolve) {\n      var pending = 2;\n      var settled = false;\n      function offer(v) {\n        if (settled) return;\n        if (v) { settled = true; try { localStorage.setItem(key, v); } catch (e) {} resolve(v); return; }\n        pending--;\n        if (pending === 0) resolve(null);\n      }\n      fetch('\/en\/wp-json\/vcsw\/v2\/profile', {\n        method: 'POST', headers: { 'Content-Type': 'application\/json', 'X-WP-Nonce': getNonce() },\n        body: JSON.stringify({ sports_type: 'football', entity_type: 'team', entity_id: id })\n      }).then(function (r) { return r.ok ? r.json() : null; }).then(function (d) {\n        var it = d ? (d.items ? d.items[0] : null) : null;\n        var cur = it ? it.current : null;\n        offer(cur ? (cur.competition ? cur.competition._id : null) : null);\n      }).catch(function () { offer(null); });\n      loadEvents(id).then(function (ev) { offer(ev ? leagueId(ev.items) : null); }, function () { offer(null); });\n    });\n  }\n  var appsCache = {};\n  function appearances(id) {\n    if (appsCache[id]) return appsCache[id];\n    appsCache[id] = leagueFor(id).then(function (comp) {\n      if (!comp) return null;\n      return Promise.all([memberStat(comp, 'Starts'), memberStat(comp, 'Subbed on')]).then(function (res) {\n        var apps = {};\n        var seen = 0;\n        res.forEach(function (d) {\n          if (!d) return;\n          if (!d.items) return;\n          d.items.forEach(function (it) {\n            if (it.participant !== id) return;\n            var v = 0;\n            (it.statistic_groups || []).forEach(function (g) {\n              (g.statistics || []).forEach(function (st) { v += parseFloat(st.value) || 0; });\n            });\n            apps[it.member] = (apps[it.member] || 0) + v;\n            seen++;\n          });\n        });\n        return seen ? apps : null;\n      });\n    });\n    return appsCache[id];\n  }\n  function byNumber(a, b) {\n    var x = a.shirt_number;\n    var y = b.shirt_number;\n    if (x == null) { if (y != null) return 1; }\n    if (y == null) { if (x != null) return -1; }\n    if (x != null) { if (y != null) { if (x !== y) return x - y; } }\n    return String(a.name || '').localeCompare(String(b.name || ''));\n  }\n  function sortOnly(text) {\n    try {\n      var data = JSON.parse(text);\n      var team = data.items[0];\n      team.players = team.players.slice().sort(byNumber);\n      return JSON.stringify(data);\n    } catch (e) { return null; }\n  }\n  function reshapeSquad(text, id) {\n    var data;\n    try { data = JSON.parse(text); } catch (e) { return Promise.resolve(null); }\n    var team = data ? (data.items ? data.items[0] : null) : null;\n    if (!team) return Promise.resolve(null);\n    if (!team.players) return Promise.resolve(null);\n    return appearances(id).catch(function () { return null; }).then(function (apps) {\n      var list = team.players.slice();\n      if (apps) {\n        var kept = list.filter(function (p) { return (apps[p._id] || 0) > 0; });\n        if (kept.length) list = kept;\n      }\n      list.sort(byNumber);\n      team.players = list;\n      team.count = list.length;\n      return JSON.stringify(data);\n    });\n  }\n  if (isClub) {\n    var xOpen = XMLHttpRequest.prototype.open;\n    var xSend = XMLHttpRequest.prototype.send;\n    XMLHttpRequest.prototype.open = function (method, url) {\n      this.sqUrl = String(url || '');\n      return xOpen.apply(this, arguments);\n    };\n    XMLHttpRequest.prototype.send = function (body) {\n      var xhr = this;\n      if (String(xhr.sqUrl || '').indexOf('team-players') !== -1) {\n        var id = null;\n        try { id = JSON.parse(body).team_id; } catch (e) {}\n        var orig = xhr.onloadend;\n        if (id) {\n          if (orig) {\n            xhr.onloadend = function () {\n              var self = this;\n              var args = arguments;\n              var done = false;\n              function finish(txt) {\n                if (done) return;\n                done = true;\n                if (txt) { try { Object.defineProperty(xhr, 'responseText', { value: txt, configurable: true }); } catch (e) {} }\n                orig.apply(self, args);\n              }\n              if (xhr.status !== 200) { finish(null); return; }\n              setTimeout(function () { finish(sortOnly(xhr.responseText)); }, 8000);\n              reshapeSquad(xhr.responseText, id).then(finish, function () { finish(null); });\n            };\n          }\n        }\n      }\n      return xSend.apply(this, arguments);\n    };\n  }\n\n  function run() {\n    if (mo) mo.disconnect();\n    if (!document.getElementById('sq-hide-col-css')) {\n      var st = document.createElement('style');\n      st.id = 'sq-hide-col-css';\n      st.textContent = '.swp-profile-stats .sq-hide-col{display:none !important}';\n      document.head.appendChild(st);\n    }\n    document.querySelectorAll('.swp-profile-stats').forEach(function (f) {\n      if (f.dataset.sqSeason) return;\n      f.dataset.sqSeason = '1';\n      if (isClub) { hideCols(f, HIDE_CLUB); relabel(f, 'Appearances', 'Games Played'); }\n      pickSeason(f);\n      if (isClub) fixGames(f);\n    });\n    \/* Warm the slider's appearance data now, so it is ready when the widget asks for its squad. *\/\n    if (isClub) { if (teamId) appearances(teamId).catch(function () {}); }\n  }\n  function later() { setTimeout(run, 0); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', later);\n  else later();\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":370,"featured_media":0,"template":"","meta":{"_acf_changed":false,"_yoast_wpseo_focuskw":"","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","footnotes":""},"season":[27636],"sports-type":[27407],"country":[27439],"event-competition":[],"class_list":["post-1472932","player","type-player","status-publish","hentry"],"acf":{"external_featured_image_url":"","hide_featured_image_pattern":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.0 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Tommaso Di Marco Career Stats: Goals, Assists, Cards, Tackles + More<\/title>\n<meta name=\"description\" content=\"Explore Tommaso Di Marco\u2019s career, with complete stats covering goals, assists, defensive work, and discipline records.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tommaso Di Marco\" \/>\n<meta property=\"og:description\" content=\"Explore Tommaso Di Marco\u2019s career, with complete stats covering goals, assists, defensive work, and discipline records.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/\" \/>\n<meta property=\"og:site_name\" content=\"Squawka | EN\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SquawkaFootballNews\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@squawka\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/stats\\\/players\\\/tommaso-di-marco\\\/\",\"url\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/stats\\\/players\\\/tommaso-di-marco\\\/\",\"name\":\"Tommaso Di Marco Career Stats: Goals, Assists, Cards, Tackles + More\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/#website\"},\"datePublished\":\"2026-07-23T13:10:43+00:00\",\"description\":\"Explore Tommaso Di Marco\u2019s career, with complete stats covering goals, assists, defensive work, and discipline records.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/stats\\\/players\\\/tommaso-di-marco\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.squawka.com\\\/en\\\/stats\\\/players\\\/tommaso-di-marco\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/stats\\\/players\\\/tommaso-di-marco\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Squawka\",\"item\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Players\",\"item\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/stats\\\/players\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Tommaso Di Marco\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/\",\"name\":\"Squawka | EN\",\"description\":\"Football News, Stats, and More...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.squawka.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Tommaso Di Marco Career Stats: Goals, Assists, Cards, Tackles + More","description":"Explore Tommaso Di Marco\u2019s career, with complete stats covering goals, assists, defensive work, and discipline records.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/","og_locale":"en_GB","og_type":"article","og_title":"Tommaso Di Marco","og_description":"Explore Tommaso Di Marco\u2019s career, with complete stats covering goals, assists, defensive work, and discipline records.","og_url":"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/","og_site_name":"Squawka | EN","article_publisher":"https:\/\/www.facebook.com\/SquawkaFootballNews\/","twitter_card":"summary_large_image","twitter_site":"@squawka","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/","url":"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/","name":"Tommaso Di Marco Career Stats: Goals, Assists, Cards, Tackles + More","isPartOf":{"@id":"https:\/\/www.squawka.com\/en\/#website"},"datePublished":"2026-07-23T13:10:43+00:00","description":"Explore Tommaso Di Marco\u2019s career, with complete stats covering goals, assists, defensive work, and discipline records.","breadcrumb":{"@id":"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.squawka.com\/en\/stats\/players\/tommaso-di-marco\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Squawka","item":"https:\/\/www.squawka.com\/en\/"},{"@type":"ListItem","position":2,"name":"Players","item":"https:\/\/www.squawka.com\/en\/stats\/players\/"},{"@type":"ListItem","position":3,"name":"Tommaso Di Marco"}]},{"@type":"WebSite","@id":"https:\/\/www.squawka.com\/en\/#website","url":"https:\/\/www.squawka.com\/en\/","name":"Squawka | EN","description":"Football News, Stats, and More...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.squawka.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"}]}},"core_id":"688d727f8613c3bde7a4d3fa","yoast_title":"","yoast_description":"","yoast_keyword":"","_links":{"self":[{"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/player\/1472932","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/player"}],"about":[{"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/types\/player"}],"author":[{"embeddable":true,"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/users\/370"}],"version-history":[{"count":0,"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/player\/1472932\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/media?parent=1472932"}],"wp:term":[{"taxonomy":"season","embeddable":true,"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/season?post=1472932"},{"taxonomy":"sports-type","embeddable":true,"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/sports-type?post=1472932"},{"taxonomy":"country","embeddable":true,"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/country?post=1472932"},{"taxonomy":"event-competition","embeddable":true,"href":"https:\/\/www.squawka.com\/en\/wp-json\/wp\/v2\/event-competition?post=1472932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}