Each template ships in two options. A runs standard GAM display inventory (daily default). B is a single-sponsor page takeover using approved Mundial Media IAB/high-impact formats only, all Celtra-ready and tagged with GAM slot paths.
hreflang.
Kits, sneakers, stadiums, cinema. Cultural objects of global football.
OpenLongform profiles, essays, reported features on players, coaches, cities.
OpenKit drops, tunnel fits, streetwear releases, fashion-football overlap.
OpenNWSL, WSL, Liga F, international women’s football coverage.
OpenFIFA 2026 host cities, qualifying, kits, mascots, venue previews.
OpenHublot 728×90, ESPN+ and DraftKings 300×250s running through the grid.
Open mockupApproved IAB formats: Desktop Skin Takeover 1800×1000, 970×250 billboard, 728×90 leaderboards, 300×600 sidebar, 300×250 MREC, Interscroller 600×600 / 320×480. All Celtra-built.
View Takeover ★ 1240px+ to see the skin takeoverHulu leaderboard, VAST pre-roll, Peacock MREC in the rail, Max at the bottom.
Open mockupApproved formats: Desktop Skin Takeover 1800×1000, 970×250, VAST :15 pre-roll, 728×90 Video Adhesion, 300×250 rail, Interscroller 600×600 / 320×480. All Celtra-built.
View Takeover ★ 1240px+ to see the skin takeoveradidas leaderboard, Mr Porter mid-gallery interstitial, Uniqlo at the bottom.
Open mockupApproved formats: Desktop Skin Takeover 1800×1000, 970×250, 800×600 mid-gallery Interstitial, 728×90, Interscroller 600×600 / 320×480. All Celtra-built.
View Takeover ★ 1240px+ to see the skin takeover| Template | Mockups | WP Template File | ACF Field Group | Sponsor CPT | GAM Slots |
|---|---|---|---|---|---|
| Category Landing A · B |
landing-A.html landing-B.html |
template-category-landing.php |
group_category_landing |
sponsorship (relationship) |
/stadio/landing/header-728x90/stadio/landing/inline-300x250/stadio/landing/skin-takeover-1800x1000/stadio/landing/interscroller-600x600/stadio/landing/interscroller-320x480/stadio/landing/mobile-skin-320x480 |
| Video Hub A · B |
video-A.html video-B.html |
template-video-hub.php |
group_video_hub |
sponsorship (relationship) |
/stadio/video/top-728x90/stadio/video/pre-roll-vast/stadio/video/rail-300x250/stadio/video/skin-takeover-1800x1000/stadio/video/interscroller-600x600/stadio/video/interscroller-320x480/stadio/video/mid-video-interstitial-800x600/stadio/video/mid-vertical-video-interstitial-320x480/stadio/video/mobile-skin-320x480 |
| Slideshow A · B |
slideshow-A.html slideshow-B.html |
template-slideshow.php |
group_slideshow |
sponsorship (relationship) |
/stadio/slideshow/top-728x90/stadio/slideshow/footer-728x90/stadio/slideshow/skin-takeover-1800x1000/stadio/slideshow/interscroller-600x600/stadio/slideshow/interscroller-320x480/stadio/slideshow/mid-interstitial-800x600/stadio/slideshow/mobile-skin-320x480 |
sponsorship, public false, show_in_rest true--sp CSS var--sp-ink CSS varsponsor=amazon)standard | takeoverpostsponsorship (nullable)standard | takeoverpost type=videosponsorshipstandard | takeoversponsorship<?php /* Template Name: Category Landing */ get_header(); $layout = get_field('layout_mode'); $sponsor = get_field('sponsor'); $is_takeover = ($layout === 'takeover' && $sponsor); // GAM targeting: pass sponsor slug as key-value if ($is_takeover) { $sp_slug = get_field('gam_kv_sponsor', $sponsor->ID); add_action('wp_head', fn() => printf( '<script>googletag.pubads().setTargeting("sponsor","%s");</script>', esc_js($sp_slug) )); } ?> <?php if ($is_takeover): ?> <!-- Gutter skins only render when sponsor exists and viewport ≥ 1200px (CSS) --> <aside class="skin left"> <img src="<?= esc_url(get_field('gutter_L', $sponsor->ID)) ?>"> </aside> <aside class="skin right"> <img src="<?= esc_url(get_field('gutter_R', $sponsor->ID)) ?>"> </aside> <?php endif; ?> <main class="page-category <?= $is_takeover ? 'is-takeover' : '' ?>"> <?php get_template_part('parts/landing/hero'); ?> <?php if ($is_takeover) get_template_part('parts/landing/shop-rail', null, ['sponsor'=>$sponsor]); ?> <?php get_template_part('parts/landing/editorial-grid'); ?> </main> <?php get_footer(); ?>
sponsorship post type in /inc/cpt-sponsorship.php. Populate one real sponsor (Amazon) as the reference record./acf-json/ and sync on load. No DB-only groups.parts/landing/hero.php, parts/landing/shop-rail.php, etc. Reuse between A and B, the only branch is $is_takeover.<style> in wp_head that sets --sp and --sp-ink from the sponsor’s color fields. All B styling reads these vars, swap sponsor, swap palette.calc((100vw - 1040px)/2 - 8px) on each side. Content column is capped at 1040px so skins never overlap editorial.interscroller_creative (takeover) or GAM OOP line (regular). Frequency cap 1/session./stadio/<template>/<slot> in GAM UI. Pass sponsor=<slug> key-value on takeover pages for line-item targeting and reporting.index.html at root, all paths relative. No build step needed for the review site.<title>, <meta name="description">, <link rel="canonical">, and full Open Graph + Twitter Card tags. Content team fills the ACF fields, the template renders the rest.<script type="application/ld+json"> block with schema.org CollectionPage (sections) or Article (stories). Embedded itemprop on hero/feature blocks reinforces it for crawlers and LLMs.hreflang="en", hreflang="es", hreflang="x-default". Ukraine devs wire the ACF string fields to a language param so the Spanish version ships later without template changes.GPTBot, ClaudeBot, PerplexityBot, Google-Extended. Sitemap declared.<header role="banner">, <nav role="navigation">, <article itemscope>. Alt text on every image pulled from ACF image_alt field.