Before you start

Sport Pulse is a block theme for sports sites, and it ships six complete starter sites: a tipster service, a sports newsroom, a football club, an esports organisation, a sports academy and a bookmaker-review publication. You pick one, import it, and then replace its words and pictures with yours.

Ten minutes spent on this chapter saves an hour later. The two things that catch people out are both here: the plugin that travels beside the theme, and the fact that a demo import replaces the content on the site it runs on.

What you downloaded

Your purchase is a single file, sportpulse_main.zip. Unzip it. Inside:

File or folder What it is
sportpulse.zip The theme — the one you upload in Appearance
sportpulse-child.zip The optional child theme, for editing theme files
plugins/anps_theme_plugin.zip The Anps Theme Plugin — required
documentation/index.html This manual, which works offline
licensing/ The GPL text and the split-licence statement
README.txt The same contents list, in one screen

Do not upload sportpulse_main.zip to WordPress. It is the wrapper, not the theme, and WordPress will reject it with "The package could not be installed". Unzip it on your computer first and upload sportpulse.zip.

The plugin is deliberately not inside the theme zip. Envato's Theme Check rejects any .zip file shipped inside a theme, so the plugin travels beside it in the download and you upload it once, by hand or with the button the theme offers you. See Installing.

What your site needs

Everything below is ordinary shared hosting. The numbers matter most during a demo import, which moves several hundred posts and downloads every image the demo uses in one run.

What Needs to be Why
WordPress 6.7 or newer, tested up to 6.9 The block templates and the Site Editor the theme is built on
PHP 8.1 or newer The theme and plugin are written for it
Memory limit 256M Resizing a full-width hero image is the high-water mark of an import
Upload and post size 32M each The demo content file and your own media
Max execution time 300 seconds An import runs for minutes; it is raised automatically where your host allows it
PHP XML, dom and libxml Required Without them the demo content file cannot be read at all
Outbound HTTP, cURL Required Demo images are downloaded during the import
Image editing, GD or Imagick Required Thumbnails and crops are generated from every image
Uploads folder Writable The demo's media is saved into it
mbstring and zip Recommended Accented text and plugin uploads
Permalinks Any setting except Plain Otherwise every post and fixture URL reads ?p=123
HTTPS Recommended Forms, logins and anything you sell

You do not have to check any of this by hand. Once the theme and plugin are active, Appearance → Theme Options → System requirements prints your server's real values against the ones above, grouped into four tables, with a Copy all as text button. If you have to open a ticket with your host or with us, paste that instead of describing it.

The System requirements tab lists your server's real values beside the ones the theme needs.

Anything that would actually break is marked as needing a fix; the rest is listed because support will ask for it. The Demo import screen repeats only the failing rows, immediately above the demo cards.

How the theme, plugin and demos fit together

Three parts, and it is worth knowing which does what before you customise anything.

Sport Pulse, the theme, is the design layer: the block templates, the header and footer parts, the type scale, the palettes and the per-demo CSS. It is what an update replaces, which is why your own edits belong in the child theme or in Custom CSS.

Anps Theme Plugin carries the working parts: all the Sport Pulse blocks, the Theme Options screen, the sports content types — fixtures, predictions, players, bookmakers and the rest — and the demo importer. It is required. With the theme active and the plugin missing, you get a plain site and a notice telling you so.

The demo packs live inside that plugin. Each one is a real site that a designer built and exported: pages, media, menus, content, settings and a colour and font layer. Importing a pack reproduces that site here.

The plugin is not optional. Blocks, settings, content types and the demo importer are all in it. Install it before you do anything else.

How to read this manual

Read Installing and The six demos now, then Importing a demo — in that order, because an import replaces content and you want to choose once.

After that the manual is reference, not a course. Go to the chapter for the job in front of you:

Admin paths are written as arrow chains, like Appearance → Theme Options → Theme styles. Anything in code type is a slug, a setting key or a file path — something you type or search for, not something you translate.

Installing

Two zips, in this order: the theme, then the plugin. Ten minutes on a normal host. Nothing here needs FTP, and nothing here is irreversible — the irreversible step is the demo import, and that comes later.

Install the theme

  1. Go to Appearance → Themes → Add New → Upload Theme.
  2. Choose sportpulse.zip from your unzipped download.
  3. Click Install Now, then Activate.

Upload the right zip. sportpulse.zip, not sportpulse_main.zip. The _main file is the wrapper around the whole download; WordPress answers "The package could not be installed" if you hand it that one. If your host refuses the upload on size, it is the upload_max_filesize row in What your site needs.

On activation you land on Appearance → Theme Options, on the Demo import tab. That is deliberate; see What happens next.

Install the Anps Theme Plugin

The theme cannot work alone, and it says so. Every admin screen shows a notice: Sport Pulse needs the Anps Theme Plugin for its blocks, demos and settings, with an Install & activate Anps Theme Plugin button. Click it and the theme installs the plugin from your download and activates it in one step. If the plugin is already on the site but switched off, the same button reads Activate Anps Theme Plugin.

If the button is not there — some hosts block plugin installs from within WordPress — do it by hand:

  1. Go to Plugins → Add New → Upload Plugin.
  2. Choose plugins/anps_theme_plugin.zip from your unzipped download.
  3. Click Install Now, then Activate.

In Plugins the entry is called Anps Theme Plugin. That is its real name; there is no separate "Sport Pulse" plugin to look for.

Without it, the theme renders base templates and nothing else. Specifically, you lose:

Missing without the plugin What that means
All Sport Pulse blocks Demo pages show empty gaps; the inserter has no Sport Pulse category
Theme Options No colours, fonts, header, footer or business settings screen
The demo importer No way to install any of the six starter sites
The sports content types No Fixtures, Predictions, Players, Bookmakers, Programmes and so on

One plugin per ANPS theme, and it must be this one. If you have used another ANPS theme on this site, its plugin is still installed and it will not register Sport Pulse's blocks. The notice names the theme the installed plugin was built for and offers Upload the right plugin; upload plugins/anps_theme_plugin.zip from the Sport Pulse download and it replaces the other one. Do not run two of them.

A version notice works the same way: if the plugin is older than the theme needs, you are told which version to update to. See Licence, updates and support.

The child theme

sportpulse-child.zip is optional, and most sites never need it. Install it only if you intend to edit theme files — a template, a template part, or PHP in functions.php. Colours, fonts, menus, Custom CSS and everything on the Theme Options screen are stored in the database, survive an update on their own, and are not a reason to use a child theme.

If you do want it:

  1. Install sportpulse-child.zip the same way as the theme.
  2. Activate Sport Pulse Child — instead of Sport Pulse, not as well as. Only one theme is ever active.
  3. Leave Sport Pulse itself installed. The child theme is only the files you changed; everything else still comes from the parent, and deleting the parent breaks the site.

Switching to the child theme keeps your settings and content. It does re-run the one-time redirect described in What happens next, unless a demo is already imported.

Install WooCommerce

WooCommerce is not required by the theme, and four of the six demos do not use it. Install it if either of these is true:

Install it from Plugins → Add New → Search plugins, search for WooCommerce, then Install Now and Activate. Do it before importing a demo, so the products land in the same pass as the pages. If you install it afterwards, re-import the demo.

WooCommerce's own setup wizard asks for your country, currency and shipping. Answer it; the demo overwrites the currency and unit settings when it imports, so it is worth finishing the wizard first and letting the demo have the last word. What the theme adds on top — catalogue columns, showcase mode — is in Shop and products.

Check it worked

Four quick checks, in the admin:

If a requirement is flagged, fix it before importing a demo, not after — a half-finished import is much more work than a raised memory limit. Your host does this; the Copy all as text button gives them the exact list.

What happens next

Right after you activate the theme, it sends you once to Appearance → Theme Options → Demo import. Once only, and never again on a site that has already imported a demo.

That is the whole of the first-run behaviour. There is no setup wizard and no activation questionnaire: every block, setting and demo is available the moment the plugin is active. Updates and support are a separate matter, and they depend on where you bought the theme — see Licence, updates and support.

So the next decision is which starter site you want. Read The six demos, then Importing a demo.

The six demos

Six starter sites ship with the theme, and they are not colour schemes — each is a different site, with its own pages, its own content types and its own look. Choosing carefully is worth the ten minutes, because a site holds one demo at a time: see One demo per site.

Which demo is for you

Demo What it is for Needs WooCommerce Elementor version
SportPulse Selling verified predictions on a public record No Yes
SportPulse News A sports newsroom with live coverage No Yes
SportPulse Team A club's official site, with a store Yes Yes
E-gaming An esports organisation, with a store Yes Yes
SportPulse Academy A coaching academy taking trials No Yes
SportPulse Betting Bookmaker reviews and affiliate offers No Yes

Every pack ships an Elementor build as well as a block build, so no demo locks you out of Elementor and none of them requires it. With Elementor active the importer picks that build for you and the card says so — see Importing a demo.

WooCommerce is only needed by SportPulse Team and E-gaming, the two packs that ship products. The other four sell nothing and never mention a cart, though you can add a shop to any of them later.

Each pack also pins a look: its palette, fonts and section CSS, and in some cases the shop and post skins as well. Where a pack leaves a slot on Automatic, that slot follows whichever demo is active, which is what you want unless you are deliberately mixing two demos' styling. That is done afterwards, in Style pickers: automatic or a demo name.

SportPulse: verified predictions

Verified sports predictions — every pick time-stamped, every record public.

A tipster and analysis service that sells access to picks. The site is built around a claim you can check: every prediction records the selection, the odds at publication, the stake and the profit, and every analyst carries a public record. An access term on each prediction — free, premium or private — is what separates the tiers.

It imports 11 pages, and behind them Predictions, Fixtures, Competitions, Reviews and People, the analysts, each with a profile carrying their subscription price, cadence and markets. It sells no products: the paid tier is a price on the analyst, not a checkout. It pins the Tipster look for the site, the news pages and single posts, runs its news pages with a sidebar on the right, and points every call-to-action button at /pricing/ until you change that in Business info.

The SportPulse tipster demo front page.

SportPulse News: a sports newsroom

Independent sports journalism — results, analysis and the money behind both.

A publication, not a club site, and the busiest of the six editorially: a scores board, section fronts, live blogs, a transfer centre, a video hub, a newsletter and ad slots for sponsors.

It imports 15 pages, more posts than any other pack — the articles are the site — and a deep data model: Fixtures, Competitions, Clubs, Standings, Transfers, Live updates, Newsletter issues, Ad slots and a Team of staff writers. It sells no products.

This is the one demo that leaves every style picker on Automatic, including the site preset. That is deliberate — a news site is meant to be re-skinned, so pick any preset on Theme styles and the newsroom layout wears it. Its news pages use a sidebar on the right and its action link points at /newsletters/.

The SportPulse News demo front page.

SportPulse Team: a football club

A football club's official site — fixtures, table, squad, tickets, membership and the club store.

Built for the fictional Meridian FC: next match and last result, the league table, the squad with per-competition season figures, ticket and membership pages, sponsors, and a shop selling kit and accessories.

It imports 26 pages — ticketing, membership and store pages included — and Players, Fixtures, Competitions, Clubs, Standings, Sponsors and Team. It is one of the two packs that sells products, so install WooCommerce before importing it or the store arrives empty. It is also the one demo whose admin menu is not filtered, so every sports content type in the theme is listed while it is active.

It pins the Team look everywhere it can: site, news pages, single posts and — unusually — the shop and single product too, so the store reads as part of the club rather than a generic catalogue. Its news pages run full width. Its action link points at /tickets/.

The SportPulse Team demo front page.

E-gaming: an esports organisation

Polaris Esports — four divisions, players and creators, a match centre with live and results, competitions, a newsroom, the club store and match alerts.

The largest demo by block count and the most modular. An organisation with several game divisions rather than one squad, so the roster is split by division and the people are both competitors and streamers.

It imports 24 pages and the widest spread of content types: Divisions, Players, Creators, Streams & VODs, Fixtures, Competitions, Clubs, Sponsors and Team. Players carry an esports profile — real name, season statistics, channels, career history, achievements and equipment — beside the football-style panels. It is the second pack that sells products, apparel and gear, so WooCommerce belongs on the site before you import.

It pins the E-gaming look for the site, the news pages, single posts, the shop and the product page. Its action link points at /watch/, the match centre.

The E-gaming demo front page.

SportPulse Academy: a sports academy

Programmes, coaches, fees and term dates, holiday camps, a trial booking and the academy news.

Built for a fictional tennis academy, Rowan Hall, and the most easily repurposed of the six — a swimming club, a football academy or a single coach's business all fit the same structure. The site's job is to fill sessions, so everything points at the trial enquiry.

It imports 19 pages and three content types: Programmes, Coaches and Camps, the last carrying its own dates and days. It sells no products — fees are published on the page and the enquiry form does the converting, so there is no checkout to configure and no gateway to set up.

It pins the Academy look for the site, the news pages and single posts, and leaves the shop and product styles on Automatic: install WooCommerce to sell club kit and the shop simply follows the academy palette. Its news pages run full width and its action link points at /book-a-trial/.

The SportPulse Academy demo front page.

SportPulse Betting: bookmaker reviews

A bookmaker-review affiliate site — reviewed sportsbooks, a compare table, offers, guides, editorial predictions, sport-by-sport coverage and a responsible-gambling hub.

An affiliate publication for the fictional Oddsmark. It earns from outbound links, so it is built around comparison: a filterable table of bookmakers, a compare screen, signup offers, and a library of guides organised by topic and by level.

It imports 28 pages and Bookmakers, Offers, Guides, Predictions, Fixtures, Competitions and People for the editorial team. Best-for tags on a bookmaker are the filter chips you see on the home table, the compare page and the reviews. It sells no products. It pins the Betting look for the site, the news pages and single posts, runs its news pages full width, and points its action link at /compare-bookmakers/.

This demo ships a responsible-gambling hub for a reason. If you launch a gambling-affiliate site, the age statement, the licence disclosure and the help links are usually a legal requirement in your market, not decoration. Keep those pages and put your own regulator details in them.

The SportPulse Betting demo front page.

When you have chosen, go to Importing a demo, and read its first two sections before you click anything.

Importing a demo

An import turns an empty install into the demo you picked: pages, images, menus, sports data, settings, colours and fonts. It takes a few minutes and it is the fastest way to a finished site. It is also the one destructive thing in this theme, so read the first two sections before you click Import.

The Demo import screen

Go to Appearance → Theme Options → Demo import. It is the first entry in the left rail, above the Design group, and its lead reads Set up the whole site in one click.

The Demo import tab shows one card per demo, with the active one marked.

One card per demo, each with its thumbnail, title and pitch; the demo you are already running is marked Active demo. Above the cards, always, is the warning Importing a demo removes and replaces the content on this site. Take it literally — see What an import writes.

Above that, and only when there is something to say, sits a second panel: Your hosting may not have enough capacity to import a demo, followed by the settings that are too low, each with your value and the recommended one. It stays hidden while everything passes, because a panel that is always green teaches you to skim past the one time it is not. If it appears, stop: a failing row means the import can halt part-way and leave the site half-built. Send the list to your host — it is the same data as Appearance → Theme Options → System requirements, which has a Copy all as text button. Fixing a memory limit takes your host minutes; repairing a half-imported site takes you hours.

One demo per site

An import is a full replace, not a merge, and a site holds exactly one demo at a time. You cannot run the club demo's fixtures page beside the betting demo's compare table.

That is not a licensing limit, it is how WordPress works. Templates, template parts, options and Global Styles all resolve site-wide by slug: there is one single template, one header part, one palette, one anps_demo_style. None can be scoped to "the pages from demo four", so an import clears every demo's objects rather than only its own — otherwise the last import's templates fight the new one's.

Nothing about an import can be undone. There is no rollback and no half-imported state worth keeping. On a site with content you care about, take a full backup — database and uploads — first. If you only want to look at a demo, import it on a staging site or a fresh install.

If you want six sites, use six installs. To mix looks rather than content, use the style pickers.

Import, Re-import and Preview

Import demo installs that pack. The browser asks you to confirm first — This will DELETE all pages, posts, products and menus on this site and replace them with the demo — and only then does anything happen.

Re-import is the same button on the demo that is already active. Use it after breaking something beyond repair, or after installing WooCommerce on a site where you imported Team or E-gaming without it. It is just as destructive as a first import: your edits to the demo's pages go too.

Preview opens that demo's live preview site in a new tab, and appears only on packs that ship a preview address. It changes nothing here.

If the pack ships an Elementor build and Elementor is active, the card also shows an Elementor version marker. That is what you will get: the importer loads the Elementor build instead of the block build, automatically, with no setting to choose. Pages, settings, products and colours are identical either way — only the editor differs. To get the block version, deactivate Elementor first, and see Building pages with Elementor.

Once you confirm, a dialog headed Importing the demo takes over the screen. It cannot be dismissed, on purpose: from the first step onwards there is nothing to return to. It names each phase as it runs — clearing the old content, applying the settings and colours, reading the content, reconnecting it, building the menus. Leave the tab open. Success reads Demo imported. Your site now matches the demo. A failure part-way says so, and leaves content missing: re-import rather than repairing by hand. A second import started while one is running is refused, and nothing is changed.

What an import writes

Written Detail
Pages The demo's pages, and its front page is set as your home page
Posts The demo's articles, with their categories and tags
Products From Team and E-gaming only, and only when WooCommerce is active
Media Every image the demo uses, downloaded into your media library
Menus Rebuilt from scratch and assigned to the theme's menu locations
Sports content Fixtures, players, predictions, bookmakers and the rest, for that demo
Theme options Site title and tagline, styles, layout, business info, action link, currency and units
Global Styles The demo's colour and font layer, written where the Site Editor reads it

Two quieter passes matter. Relations between records — a prediction's fixture and analyst, a fixture's clubs, a table row's club — are reconnected after the content lands, because the numbers in an export point at the designer's database, not yours. And the demo's kickoff times are shifted onto your site's clock, so a fixture list reads as upcoming, not as last year.

What survives an import

Left alone: your users, with roles and passwords untouched; your media library, where the demo's images are added beside your own; other plugins and their settings, none of which are deactivated; and WooCommerce's own pages — shop, cart, checkout, my account, terms, refunds — along with the privacy policy page, because each is wired to an option and deleting it would break a feature no demo replaces.

Deleted and rebuilt: every page, post, product and product variation, product categories and tags, every navigation menu, any template or template part a previous demo installed, and every Sport Pulse record — fixtures, players, predictions, guides, programmes. So an import is safe on a fresh install, safe on a site you have only been styling, and never safe on a live site carrying your own content.

After the import

  1. Look at the front end, then at Settings → Reading. The importer sets the demo's home page as your front page; change it there if you want another one.
  2. Check the menus. They are rebuilt and assigned, but if you had your own locations in mind, set them in Appearance → Menus — see Menus.
  3. Put in your own business details. Appearance → Theme Options → Business info holds the name, phone, email, address, opening hours and the action link every call-to-action button uses. Until you change them, your site says it is Meridian FC or Oddsmark.
  4. Replace the demo's words and pictures. Work through the pages in Building pages and the records behind them in Sports content and data.

Treat the demo's photography as placeholder content: it is there to make the layout read correctly, and what your purchase covers is set out in licensing/README_License.txt in your download. Replace the images before you launch — Performance and going live has the pre-launch list.

Starting empty instead

You do not have to import anything. Activate the theme and the plugin, skip this screen, and you still have a working block theme: every Sport Pulse block is in the inserter, Theme Options works, and the base templates render your pages with a plain header and footer. Choose this if you are building to your own design, or migrating a site that already has content. You get no demo pages, no sample data and no pinned look — every style picker stays on Automatic, which with no demo active means the theme's own defaults, and the admin menu lists every sports content type because nothing is filtering it. Start at Building pages.

Switching demos later

Importing a second demo is the same operation: open the screen, click Import on the other card, confirm. Everything in What an import writes and What survives an import applies again, so the first demo's pages, menus and records go, and your work on them with them.

One thing looks alarming and is not: the admin menu changes. Five of the six demos show only the content types they use, so moving from the news demo to the academy demo makes Clubs, Standings and Transfers disappear. Only the menu is hidden — the type is still registered, and the menu returns for as long as anything of that type exists, including a draft, so a club you add by hand on an academy site brings it back. People, Locations, Team and Messages are never hidden, and the Team demo filters nothing at all. What a switch really deletes is the previous demo's records, pages and menus, and that is the import rather than the menu.

Theme Options, tab by tab

Everything the theme lets you set outside the editor lives on one screen: Appearance → Theme Options. You need the edit_theme_options capability — an administrator has it, an editor does not. The screen is part of the Anps Theme Plugin, so if it is missing, the plugin is inactive.

Each field on this screen is one setting saved on its own, and each one says what it does under its label. This chapter is the long version: what the tab is for, and every field with its values and its default.

How this screen is organised

A rail on the left lists the tabs. Demo import leads on its own, above the rest, because on a fresh site it is the first thing to do — it is covered in Importing a demo. A build without the importer says so instead of offering it.

The remaining nine tabs are grouped:

Group Tabs
Design Theme styles, Header, Footer, Site layout
Content Blog, WooCommerce
Business Business info
System Advanced, System requirements

The WooCommerce tab appears only while WooCommerce is active; with no shop plugin there is nothing behind those fields, so the tab is hidden rather than shown broken.

Each tab saves on its own. Fields you have changed but not saved are held until you press the tab's save button, so switching tabs mid-edit is not a good idea.

Theme styles

Colours and fonts for the whole site. These are written to the Site Editor's own styles, not to a private table, so Appearance → Editor → Styles shows the same values and the editor canvas matches the front end.

Preset picks a whole demo's look at once — its colours, fonts, section CSS and its header, footer and shop. It is the blunt instrument, and it is the one most people want. Automatic — follow the imported demo is the default and keeps you in step with the demo you imported; see Style pickers: automatic or a demo name. The named entries are the theme's own style variations, so a demo may offer more than one (a light and a wire treatment of the news look, for instance). Applying a preset overwrites the six colours below it.

Six colour pickers follow, in the order most people think about them: Page background, Text, Primary, Secondary, Accent and Buttons / CTA. Every pattern in the theme references the colour slug and never a raw hex, so changing one here recolours every button, link and accent that uses it, site-wide, in one save. The rest of the palette is derived and rides along with the preset.

Keep contrast readable. Page background against Text is the pair that decides whether your site can be read at all. Check it on a phone in daylight before you ship a dark background with mid-grey text.

Fonts offers Heading font and Body font, each a list of what the site already has. Add a Google Font… fetches a family and installs it for you; Upload a font… hands you to the Site Editor's font library for a file you own. Once installed, a face appears in both lists.

Type scale exposes only the four sizes worth setting per site: Hero / H1, Section heading (H2), Sub-heading (H3) and Body text. Sizes are in pixels, 12 to 200; leave one blank to keep the theme default, which is fluid and scales with the viewport. Everything else in the type system follows these four. More on the whole system in Colours, fonts and spacing.

The Theme styles tab, with the preset picker above the six brand colours.

The strip at the top of every page. The menu inside it is not here — it is in Appearance → Menus, described in Menus.

Header layout re-lays out the header site-wide. Three shapes, not demo names: Standard — logo left, actions right (the default), Centered — logo and nav stacked, Minimal — logo and nav only. A demo pack sets this too, so importing one may change it.

Top bar style is a style picker: it chooses which demo's top bar to show without touching the rest of the site. Default Automatic — follow the demo.

Three logo slots: Main logo, Sticky logo and Mobile logo. Main is the master switch — leave it empty and the site title is used as the logo, and the other two do nothing. Set it, and the sticky logo swaps in once the page scrolls and the header pins, while the mobile logo is used on small screens. Both fall back to the main logo when empty. All three are media-library images, so they keep their srcset and survive a domain change.

Three switches under Header elements, all off by default:

Switch On means
Disable sticky header The header scrolls away with the page instead of pinning
Disable top bar The strip above the header is removed site-wide
Disable search icon The search form leaves the header; search elsewhere is unaffected

The Header tab, showing the layout cards, the logo slots and the three switches.

What sits in the footer is content, edited in Appearance → Editor → Patterns; this tab sets its shape. See Header, top bar and footer.

Footer columns is 2 columns, 3 columns or 4 columns, default 4 columns. It stacks to one column on phones.

Copyright text is the line at the very bottom, default © {year} {site}. {year} and {site} are replaced with the current year and your site title, so the year stays right without anyone editing it.

Sticky mobile bar gates the Call / action / Directions bar pinned to the bottom of a phone screen. Three values:

Value Behaviour
Automatic — follow the demo Shown only on demos designed around the bar, so an import never adds one to a site that was not built for it
Always show Shown on every page
Never show Not rendered at all

Automatic is the default, and none of the six SportPulse demos opts in — so if you want the bar, choose Always show. Its contents come from the data you already have: a slot with nothing behind it — no phone number, no address — is left out rather than rendered dead.

The Footer tab, with footer columns, copyright text and the mobile bar setting.

Site layout

Content width (px) is the maximum width of the constrained content column: 600 to 1920 in steps of 10, default 1200. It applies to the whole site and to the editor, so what you build is the width you get.

It does not affect sections with a full-width background — those still bleed edge to edge, and only the content inside them is capped. It is also not a page-by-page setting: one number, whole site. A demo pack sets it to match its design.

The Site layout tab and its single content-width field.

Blog

Styles the news page and your posts. Which page lists your posts is core's setting, in Settings → Reading → Posts page; without one, the fields here have nothing to style. Writing and organising posts is News and the blog.

Posts per row is 2 per row, 3 per row or 4 per row, default 3. It collapses to two and then one on smaller screens, and a single Post grid block can override it from its own sidebar.

Sidebar adds a column beside the news page and your posts holding search, categories, recent posts and tags:

Value Result
No sidebar (full width) Content only — the default
On the right Sidebar after the content
On the left Sidebar before the content

On phones the sidebar always sits under the content. What is in it is edited in Appearance → Editor → Patterns → Blog sidebar.

News page style and Single post style are both style pickers, and they are deliberately independent: you can pair one demo's article styling with your own news page. The list one covers the post list and the category, tag, author and date archives; the other covers one open post.

The Blog tab, with the post-list controls and the two style pickers.

WooCommerce

The shop grid and how much of it is for sale. Payments, shipping, tax, emails and accounts all stay in WooCommerce → Settings — this theme adds no second copy of them.

Products per row (1 to 6) and Rows per page (1 to 12) are WooCommerce's own catalogue settings, surfaced here because they decide how the shop grid reads. Products per page is the two multiplied, and the card shows you that number as you change them.

Showcase mode — nothing can be purchased turns the whole store into a catalogue: prices still show, but Add to cart, the cart and checkout are removed. It is the "enquire, don't buy" storefront, and it is off by default. Product editing lives in Shop and products.

The WooCommerce tab, with the shop grid fields and showcase mode.

Business info

Typed once here, then read by the header, the footer, the contact page, the map, "Open now" and your structured data. Nothing on this tab is required, and each empty field simply removes what depends on it.

Contact holds Business name, Phone, Email and Address. Phone becomes tel: links wherever the theme shows a number. Address is one free-text block, written the way it appears on your door; it feeds the map, the Directions button in the mobile bar and your structured data, and without it the map has nothing to point at.

Opening hours is a seven-day grid, Monday first, with up to six open–close ranges a day — enough for a split shift and an overnight tail. A day with no ranges is closed: there is no separate closed flag to contradict the times. The hours drive "Open now" wherever the theme shows it, and are published as structured data.

Primary action link under Call to action is where every call-to-action button in the theme points — the one in the header, the one in the mobile bar, and the one in each pattern.

An empty action link removes the buttons. Leave Primary action link blank and those buttons are not rendered at all. A button that goes nowhere is worse than no button, so the theme omits it rather than pointing it at your home page.

Search engines has Business type (for Google), which sets @type on the LocalBusiness node in your structured data — LocalBusiness by default, with Organization, SportsActivityLocation, Store and others in the list. Let an SEO plugin own structured data hands the whole job to Yoast or Rank Math and adds no nodes of its own; see SEO and structured data.

Newsletter decides what happens after a signup. Every signup — newsletter forms and Follow buttons — always lands in the site's own Messages inbox; Where signups go adds a destination on top of that:

Where signups go Also does this
The Messages inbox only Nothing leaves your site — the default
Also post to a form URL (any provider) Posts the address to Form URL
Also add to a Mailchimp audience (API) Adds the address through Mailchimp's API

For the URL route, Email field name is what that provider's form calls its email field — EMAIL for Mailchimp and Brevo, fields[email] for MailerLite, email_address for ConvertKit — and Extra form fields takes one name=value per line, where {email}, {tags} and {name} are filled in for you. For the API route you need a Mailchimp API key (Account → Extras → API keys) and a Mailchimp audience ID (Audience → Settings → Audience name and defaults); Double opt-in — new members must confirm by email is a switch on the same card. The forms themselves are in Forms, contact and newsletter.

Spam protection takes a Turnstile site key and a Turnstile secret key from Cloudflare Turnstile, which is free. Both keys or neither: with one of the two filled in, the protection cannot run. It guards the built-in contact form.

The Business info tab, with contact details, opening hours and the newsletter card.

Advanced

Custom CSS is added to every page of the site, and survives theme updates because it is a setting rather than an edited file. Reference the theme's own tokens so your CSS follows preset and colour changes instead of freezing a value:

.my-band {
	background: var(--wp--preset--color--primary);
	max-width: var(--wp--style--global--content-size);
}

Backup sits below it. Export settings downloads every anps_ setting on this screen as a file; Import settings from a file reads one back. Imported values go through the same validation as typing them in, so a file cannot write something the screen could not. Two things do not travel, on purpose:

Because every key carries the shared anps_ prefix, a backup is portable between ANPS themes: your business info, hours and logos move with you, and keys the new theme does not have are dropped.

The Advanced tab, with the Custom CSS box and the Backup card.

System requirements

What this host provides against what Sport Pulse needs, in four tables: Server, PHP extensions, WordPress and Sport Pulse. Each row shows the value found, the value wanted, and a verdict — OK, Check or Fix. A Fix row is something the import or the theme will genuinely struggle with; a Check row is a recommendation.

Copy all as text puts the whole report on your clipboard as plain text. Paste it into a support ticket and the conversation starts with facts instead of guesses. See also Performance and going live.

The System requirements tab, with the four grouped tables and Copy all as text.

Style pickers: automatic or a demo name

Nine settings across this screen ask the same question — which demo's look should this one thing wear — and they all offer the same values: Automatic — follow the demo first, then one entry per demo the theme ships a stylesheet for. The list is derived at run time from those stylesheets rather than written down anywhere, so it is always exactly what your copy of the theme can actually render.

Automatic is the default for all nine and means "whatever demo I imported". Naming a demo instead mixes that one demo's look into that one slot and leaves everything else alone.

Picker Where it is What it restyles
Preset Theme styles Everything: colours, fonts, section CSS, header, footer and shop
Top bar style Header The strip above the header
Header style The header strip
Footer style The footer
News page style Blog The post list and the category, tag, author and date archives
Single post style Blog One open post
Shop style The shop and category pages
Product style A single product page
Location style A single location page

The four with a control on this screen are the ones a buyer changes. The other five are set by the demo pack you imported, and stay in step with it through Automatic unless a developer writes them directly. The top bar, header and footer swap a template part; the rest swap a whole template.

A demo that ships no variant changes nothing. These pickers only take effect where the demo you named actually ships a file for that slot. If it does not, the shared version renders and the page looks exactly as it did. That is not a bug — it is the fallback working.

Sidebar on the Blog tab is not one of these. It is a plain three-value setting and has nothing to do with demos.

Write-only secrets

Two fields on this screen are stored write-only: the Turnstile secret key and the Mailchimp API key. Both are shared secrets that would be a liability in a settings file or an API response, so the theme never reads them back.

Write it down somewhere else. A saved secret is masked and never shown again, is absent from Export settings, and cannot be recovered from the database through this screen. If you lose it, generate or copy a fresh key from Cloudflare or Mailchimp and type it in again. That is the only route back.

Everything else on the screen reads back normally, which is why a backup is useful in the first place — see Advanced.

Menus

Sport Pulse uses classic WordPress menus rather than menus embedded in a template. You build them in Appearance → Menus — the screen every WordPress user already knows — and assign each one to a location the theme publishes. Nothing about a menu lives inside the header, so re-saving or resetting the header can never orphan your navigation.

Importing a demo builds its menus for you and assigns them, so the first thing most people do here is rename an item or add a page.

Build the menu

  1. Go to Appearance → Menus.
  2. Pick a menu from Select a menu to edit, or click create a new menu, name it and press Create Menu.
  3. Add items from the panels on the left — Pages, Posts, Custom Links, Categories, and one panel per sports content type. Those panels list every type the plugin registers, not only the ones your demo uses, because the types stay registered whichever demo is active. Under Screen Options you can hide the panels you never touch.
  4. Drag an item slightly right to nest it under the one above; that is what makes a dropdown.
  5. Tick a location under Menu Settings → Display location, then press Save Menu.

A menu can sit in more than one location, and a location holds one menu.

Only two levels are rendered. The header draws top-level items and their children. Nest an item three deep and it is dropped silently — it will not appear anywhere on the site. Flatten the structure or link the deepest pages from the page body instead.

The Appearance to Menus screen, with a menu assigned to the Primary header location.

Seven locations are registered. The header uses one; the rest are the footer's link columns and the utility strip above the header. Each column is a separate menu, which is what lets you retitle and reorder them independently.

Location Where it renders
Primary (header) The main navigation in the header
Top bar — Utility The thin strip above the header, for links such as fixtures, tickets or the store
Footer — Portal First footer link column
Footer — Company Second footer link column
Footer — Legal The legal column — privacy, terms, responsible gambling
Footer — Topics A generic extra column, used by the demos with five footer columns
Footer — Guides The second generic extra column

You do not need to fill all seven. A location with no menu assigned renders nothing, so the demos that use three footer columns simply leave Topics and Guides empty.

The footer's fourth column is the brand block — logo, tagline, social links. That is content, not a menu, and it is edited as a template part; see Header, top bar and footer.

The current page

The item matching the page you are on is highlighted automatically, and so is its parent when you are on a child page. WordPress writes the class itself, so this works whether the item was added as a page, a post, a category or a custom link — you do not have to mark anything.

If the highlight looks wrong, the usual cause is a Custom Link pointing at a URL that differs from the real permalink, such as one with a missing trailing slash or a stale ?page_id=. Add the item from the Pages panel instead of typing the address and the match becomes exact.

Long dropdowns become a mega menu

A top-level item with six or more children stops being a narrow dropdown and opens as a full-width panel laid out in columns. It is the case a guide section or a long list of sports needs, and it happens by itself — there is no setting for it in Theme Options.

Two demos use it: SportPulse and SportPulse News. SportPulse Team, E-gaming, SportPulse Academy and SportPulse Betting pin their dropdowns to the ordinary narrow panel on purpose, because their headers are designed around a compact menu. On those four, a sixth child stays in the list.

To decide it yourself per item, use the item's CSS Classes field:

Class Effect
anps-mega Forces the full-width panel, however few children the item has
anps-no-mega Keeps the narrow dropdown, however many children it has

The CSS Classes field is hidden until you switch it on: open Screen Options at the top right of Appearance → Menus and tick CSS Classes. The class goes on the top-level item, not on a child.

The menu on phones

Below the header's breakpoint the menu collapses behind a burger button. Tapping it opens the panel; tapping again closes it. Submenus are not dropdowns there — every child list is already open and indented, so a visitor scrolls one list instead of hunting for tap targets. That is also why the mega-menu rule is a desktop-only affair: on a phone a long list reads the same either way.

The burger and the panel are part of the menu itself, so they follow whichever demo's header you are showing.

The menu open in the phone drawer, with submenus expanded as indented lists.

If the header shows no menu

Nothing is assigned to Primary (header). When you are logged in as an administrator the header shows a link reading Assign a menu to this location (Appearance → Menus) in place of the navigation; visitors see nothing at all, which is why this is easy to miss after a manual setup.

Work through these in order:

  1. Open Appearance → Menus and check that a menu exists at all — a fresh site with no demo imported has none.
  2. Check Menu Settings → Display location on that menu and tick Primary (header).
  3. Press Save Menu. Assigning a location without saving changes nothing.
  4. If a footer column shows a heading with nothing under it, the same fix applies to that column's location from the table above.

If the header is missing entirely rather than just its menu, the problem is the header part or the top bar switch, not the menu — see Header, top bar and footer. If a whole demo's navigation vanished after switching demos, the menus of the demo you left are still in Appearance → Menus; reassign the one you want.

Building pages

Every page in the demos is a stack of bands. A band is one block that draws a whole strip of the page — a hero, a row of figures, a card grid, a table, a price list, a form — and everything that band shows is one of its own settings. There is no page-builder layer underneath: these are ordinary WordPress pages made of blocks, edited in the block editor you already use for a post. Elementor is offered as an alternative, not as the foundation — see Building pages with Elementor.

The block editor with a demo page open and one band selected.

How a demo page is built

Open Pages, pick a page and edit it. In the list view, at the top left of the editor, you will see six to a dozen blocks, one per band, in the order they appear on screen. A band is not a group of columns you have to rebuild — it is one block that already knows how to lay itself out on a phone and on a desktop.

Bands render on the server, so the canvas shows the real thing rather than an approximation, and a band has no editable text on the canvas: click it and every field appears in the settings sidebar on the right.

Editing what the demo imported

Work down the sidebar panels of the band you selected. Each panel is a group of plain fields — text, a number, a toggle, a drop-down, an image picker, a link, or a repeating list of rows. Save the page and the front end matches.

Edit the demo page rather than starting a blank one: it already has the right bands, in the right order, at the right widths. Delete a band you do not want instead of emptying it, and duplicate one to repeat a pattern further down.

An import replaces pages, it does not merge them. If you edit the demo pages and then re-import the same demo, your edits are gone. Read What an import writes first.

Adding a band to a page

Use the inserter — the + button — and type the name of the block. Sport Pulse blocks are grouped under Theme, with a handful of the generic ones under Design and Widgets, so searching by name is quicker than browsing.

Stay inside your demo's own family, described below. Mixing one demo's bands into another's page works — no block is ever unregistered — but the two were styled for different palettes and typefaces, so the join will show.

The block families

The plugin registers 289 blocks in the sportpulse/ namespace: a shared set every demo uses, plus one family per demo, named by prefix.

Family Blocks What it covers
Shared, no prefix 45 Page furniture, business data, commerce, content lists, sports bands
tipster- 3 The tipster workspace bar, its rail and the featured pick
news- 38 Scores board, section heads, live blog, transfer centre, video hub
team- 50 Page heads, next match, league table, player grid, ticket list
egaming- 69 Hero, division cards, match list, roster, watch page
academy- 43 Hero, programme cards, coach cards, fees, enquiry form
betting- 41 Home hero, bookmaker table, offer cards, guides, review bands

You never need the full list. The demo already used the blocks it needs, and the inserter search finds the rest by name.

The blocks you will edit most

The page hero, or page head

The masthead of a page: kicker, headline, an accented phrase inside the headline, lede, buttons, and optionally a photograph, breadcrumbs, trust chips and a row of figures. The shared page-hero also has a Text comes from setting, so on a single item or an archive it can take its title and lede from the post or the term instead of from what you typed.

Demo Hero block
SportPulse (tipster) page-hero
SportPulse News news-window-hero, and news-section-head on section archives
SportPulse Team team-page-head
E-gaming egaming-hero on the home page, egaming-page-head elsewhere
SportPulse Academy academy-hero and academy-page-hero
SportPulse Betting betting-home-hero and betting-page-hero

The section head

team-section-head, news-section-head, egaming-section-head, academy-section-head and betting-section-head draw the small title block that introduces a band: kicker, two-tone heading, intro, and on the right either a button or a line of small print. The tipster demo has no separate section head, because every shared band carries its own Kicker, Heading, Accented phrase, Lede and action link fields.

The post grid, forms and the newsletter card

post-grid is the card grid used for the news list, for a latest-stories band on any page and for related articles under an article; its settings are covered in The post grid, option by option.

form is the shared contact form — heading, name, email, topic chips, extra fields you define, a message and a consent line — and academy-enquiry, egaming-enquiry, egaming-contact, news-contact and betting-contact-form are the demo-styled equivalents. newsletter-card is the single-field signup card used in sidebars and footers. Where submissions go is in Forms, contact and newsletter.

The rest of the daily handful

Block What it is for Key controls
stat-band A row of big numbers Style (inline, cards, bordered), Columns, Show icons, and per stat a Source of either Typed by hand or Counted from this site
faq Questions and answers as an accordion Question and Answer rows, Columns, Layout, Open the first answer, Add to FAQ schema
pricing Plan cards with a monthly or annual switch Per plan Name, Tagline, both prices, Features, Button label and URL, Highlight this plan; plus Currency symbol and Columns
people-grid A roster band drawn from People How many, Role, Order, Card shape, Narrowest card, Show the role line, Show a short bio
data-table A real table that scrolls sideways Where the rows come from (Typed here or A live dataset), Columns, Rows, Header row, First cell names the row, Striped rows, and what to do when there are no rows

stat-band and data-table deserve a second look: both can print what you typed or read the site's own content, which is how a figure stays true after you publish another twenty predictions.

The controls inside a block

Four control types repeat across every band. Learn them once.

A repeater is a list of rows — stats, questions, plans, table rows. Each row is numbered, with arrows to move it up or down and a bin to delete it, and an Add button underneath. Row order is display order.

A media control stores two things for one image: the attachment id and its URL. That is deliberate — the page can print the URL directly while still knowing which library item it came from, so alternative text and image sizes keep working. Use Select image, Replace and Remove.

A link control is a single URL field. Paste a full address for an external link or a site path such as /tickets/ for an internal one. A band with an empty link usually hides its button rather than rendering a dead one.

A term drop-down lists a taxonomy's terms with an "All" option first — that is how you point a grid at one category or one role.

Everything a band shows on screen is one of these values. No heading, figure, button label or photograph is hardcoded in the theme, which is why you can turn a demo page into your own page without touching a template.

Patterns you can drop in

Patterns are ready-made arrangements of blocks, in the inserter's Patterns tab, grouped into categories the theme registers under its own name: Hero, Services, Pricing, Calls to action, Contact, Reviews and trust, and Shop. Insert one and it becomes plain blocks in your page, with no link back to the pattern — edit it freely.

The parts that surround every page — top bar, header, footer, blog sidebar and sticky mobile bar — are template parts, edited from the Site Editor's Patterns screen. That is Header, top bar and footer.

Page templates

A page's template decides what surrounds its content. Pick one in the editor sidebar under Page → Template.

Template Use it for
Default Ordinary pages: header, content, footer
No title A page whose first band already carries the title
Landing (no header or footer) A standalone landing or campaign page
Elementor (full-width content) Any page built with Elementor
Elementor landing (no header or footer) An Elementor page with no site chrome
Tipster dashboard The tipster demo's signed-in workspace

An Elementor page must use one of the two Elementor templates, or its full-width bands stay trapped inside the constrained content wrapper.

Setting your front page

Importing a demo points Settings → Reading at the pack's own pages: the page slugged home becomes the static front page, and the demo's news index becomes the posts page. To change either, return to Settings → Reading, choose A static page and pick both there. Never delete the page you set as the posts page — the news archive has nowhere to render without it.

Full-width and constrained bands

Content is constrained to 1200 pixels by default; change that in Appearance → Theme Options → Site layout, described under Site layout. Individual bands can escape it: select a band, open the toolbar alignment button and choose Wide width or Full width. A full-width band runs its background to both edges of the window while keeping its text on the same measure as the rest of the page. A few heroes — the academy and betting page heroes among them — are full width only, because a boxed hero with a photograph bleeding off one side is not a layout anyone wants.

Sports content and data

Beyond pages and posts, the plugin registers the sports records the demos are built on: fixtures, competitions, clubs, players, predictions, programmes, bookmakers and the rest. You edit them on ordinary WordPress edit screens, and the blocks on your pages read them. Nothing on a match page, a squad list or a comparison table is typed into the page itself.

The admin list screen for one of the sports content types.

Why the admin menu changes per demo

The admin menu depends on the demo you imported: a betting site has no use for a Divisions screen, so it does not get one. The important half of that sentence is the half you cannot see — every content type is always registered. Only the menu is hidden. Nothing is unregistered, nothing is deleted and no meta is dropped, so switching demos never orphans content.

Rule Effect
The active demo declares the type Its menu shows
The type already holds at least one post Its menu shows anyway
Neither is true The menu is hidden, the content and the type remain

People, Locations, Team and Messages sit outside the gate entirely and appear under every demo.

Two cases surprise people. The SportPulse Team demo declares no list of its own, and an unrecognised demo — including a fresh install with nothing imported yet — is treated the same way, so on both you get roughly twenty sports menus at once, Bookmakers, Guides, Offers, Programmes and Camps included, none of which a club site uses. And on a site that has held more than one demo the menu is the union of everything that still has content, not a picture of the demo you imported last.

Shared content types

Two people-shaped types coexist, and they are not alternatives.

Screen What it holds Panels
People The sports roster: analysts, players in a directory, coaches, presenters, filed under the Roles taxonomy Profile — Subscription price, Cadence, Markets, Joined, Followers, Verified, WordPress user ID; Byline — Credited to
Team The newsroom staff list: a name, a portrait and a job title Newsroom — Section, Based in, Here since (year), Beats, Series (video team), User account

On a person, the subscription price is not decoration: it is what places them in the Pro or Free tier, and an Access tier term is derived from it automatically. On a team member, User account is the WordPress user whose byline this is — leave it empty and the person gets no story count and no profile link. The News, Team and E-gaming packs arrive with Team filled in. Neither a team member nor a message has a page of its own, so never link to one; the staff bands render those records in place.

Three taxonomies are shared across the model rather than owned by one type:

Taxonomy Attached to
Sports Posts, predictions, fixtures, competitions, people, clubs, transfers, and products when WooCommerce is active
Seasons Fixtures, competitions and people
Flags Posts, predictions and fixtures — curation flags such as featured or breaking

The post-side additions — the Feature and Video panels, Formats, Video kinds and Shows — belong to the blog and are covered in News and the blog.

Locations

Locations is your address book: the stadium, the academy site, the office. Each one has a Location details panel with Address, Phone, Email, Latitude and Longitude, an Order pickup point tick, a Getting here note and Opening hours, one open and close time per day. Leave a day blank to mark it closed.

Fill the coordinates in if you want a map that lands on the right building rather than in the middle of the postcode. Address, phone and hours are also what the contact page and the structured data publish — see SEO and structured data.

Fixtures, competitions and clubs

Used by the tipster, news, team, e-gaming and betting demos.

A fixture list on the front end of the club demo.

Screen What it holds Panels and taxonomies
Fixtures One match Fixture — Competition, Round or stage, Kickoff, Venue, Home and Away side, scores, formations, Clock, Half-time score, Attendance, Referee; plus Player of the match, Head to head, Team form, Team news, Timeline, Match statistics and Line-ups. Taxonomy: Fixture states
Competitions A league or tournament Competition — Short code, Country or region. Taxonomy: Seasons
Clubs A club, with its crest as the featured image Club — Short name, Code, Colour, Ink on that colour, Recent form, This is our club

Fixtures point at a competition rather than naming one, which is what lets a competition page list its own matches and table. The seven optional match panels are repeating lists of rows, so a full match report is data entry rather than page building. Tick "This is our club" on your own side: bands use it to decide which way round to draw a scoreline.

Predictions and analysts

The tipster demo's whole product, and the betting demo's editorial tips.

Screen What it holds Panels and taxonomies
Predictions One analyst's pick on one fixture Pick — Fixture, Analyst, Selection, Odds at publication, Stake, Profit, Settled at, Minimum price, Confidence, Edge, Settlement terms, Recommended book, Price history; Bookmaker prices — a row per book. Taxonomies: Access, Results, Pick states, Markets
Reviews A subscriber testimonial about one analyst None; the quote is the post content and the analyst is picked

A prediction is a ledger entry: published with a timestamp and settled once, because the public record is the thing being sold. Yield, hit rate and profit on a profile are all derived from these rows, so keep Stake and Profit honest.

Access is the paywall, and it is enforced on the server. A locked pick's selection and analysis never reach the page at all, so nothing can be revealed by disabling styles or reading the source.

Players, divisions and creators

The e-gaming demo's roster, plus the club demo's squad.

A match page from the e-gaming demo.

Screen What it holds Panels
Players A squad member Player — Squad number, Position group, Nationality, Date of birth, Height, Preferred foot, Joined, Signed from, Contract until, Shirt in the store; This season — a per-competition table of apps, minutes, goals and cards; Career — clubs with years, apps and goals
Divisions One e-gaming team inside the organisation Division — Short tag, Accent colour, Region, Headline, record lines; Figures, socials and honours — stats, channels, competitions in progress, achievements
Creators The content side of the roster Channel — Real name, Kind, Main platform and handle, Followers, Live now, Schedule line, Nationality; Profile figures — stats, platforms, weekly schedule, equipment
Sponsors A commercial partner Partnership — Tier, Category, Partner since, Agreement runs to, Rights, Website, Button label
Streams and VODs A broadcast, live, scheduled or finished Stream — who, platform and URL, watching and started for a live stream, match and offset from kick-off for a scheduled one, length, views and date line for a recording

Programmes, coaches and camps

The academy demo. Almost all of its front end comes from these three types, so their panels are long by design — the pages are assembled from the records rather than from typed copy.

The programmes page from the academy demo.

Screen What it holds Panels
Programmes A coaching programme Programme — Short name, Age tag, Badge, card text and points, Age range, Standard required, Training each week, Starting price, What is included, call to action, hero facts; then Who it is for and Weekly schedule; Coaching, Physical, Matches and Beyond the court; Term dates and Fees; Coaches, Facilities, FAQs and Next step
Coaches A member of the coaching staff Coach — Role, Group, Accreditation, Programmes line, Email, Site user ID; Profile page — philosophy quote, qualifications, coaching history, playing record, specialisms
Camps A holiday camp Camp — Dates, Days, Ages, Ability groups, half-day, full-day and full-week prices, Places left, Capacity; Camp page — ability groups, daily schedule, coaching team, what is included, what to bring, prices

Programmes and camps both reference coaches by picking them, so a coach's portrait and role appear on a programme page without being retyped there.

Bookmakers, offers and guides

The betting demo.

The bookmaker comparison table from the betting demo.

Screen What it holds Panels and taxonomies
Bookmakers A reviewed sportsbook Bookmaker — Mark letter, Brand colour, Rating, Best for, Welcome offer, Minimum deposit, Sports carried, Payment methods, Average margin, Withdrawal time, Features, Established, Reviewed on, Affiliate URL; Scores and Verdict — six weighted scores, what you liked and did not, short verdict; three override panels for the offer, markets, odds, live, app, payments, support and FAQ sections. Taxonomy: Best-for tags
Offers One promotion Offer — Bookmaker, Minimum deposit, Minimum odds, Wagering, Expiry, Value score, Our view, Promo code, existing-customer variants. Taxonomy: Offer types
Guides The editorial library Guide — Starred, Updated, Reading time, Figure caption, Key takeaways. Taxonomies: Guide topics, Guide levels

The override panels exist so one bookmaker can contradict the guide's defaults without a bespoke page. Fill them only where the truth differs; an empty override falls back to the shared copy. Best-for tags are the filter chips on the comparison table, so keep them few and meaningful.

Transfers, standings and live updates

The news demo's data desk.

Screen What it holds Panels and taxonomies
Transfers One deal Deal — Player, Position, Age, From club, To club, Fee as printed, Fee value, Deal type, Source, Reliability, Verdict. Taxonomy: Transfer statuses
Standings One table row per club Table row — Club, Competition, Position and the full home and away split
Live updates One entry in a live blog Where it goes — Live blog post, Fixture, Time label, Order, Pinned, Embed URL. Taxonomy: Update tags
Ad slots A sponsored slot Advertiser — Sponsor, Link, Button. Taxonomy: Ad formats
Newsletter issues One sent issue Issue — Number, Lead line, Sent. Taxonomy: Series

Enter standings as home and away rows only: the league table block adds the columns up, so you never type a total and a corrected result never leaves a stale one behind.

Repeater fields on an edit screen

Most panels above contain at least one repeating list — line-ups, term dates, fee options, price rows, channels, achievements. A repeater on an edit screen behaves exactly like one in a block: numbered rows, arrows to move a row up or down, a bin to delete it, and an Add button underneath. Row order is display order.

A content type edit screen with its meta panels open.

Delete a row you do not need rather than blanking it. Most bands skip an empty row, and a band with no rows at all hides itself instead of printing an empty shell.

Relations are picked, not typed

Records point at each other. A prediction points at a fixture and at an analyst; a fixture points at a competition; an offer points at a bookmaker; a transfer points at two clubs; a live update points at a live blog post or a fixture.

Every one of those is a picker, not a text field — you choose an existing record from a list. Two consequences follow. Rename a competition and every fixture, table and page that mentions it updates, because they reference the record and not its name. And create the thing you will point at first: the competition before the fixture, the fixture before the prediction, the bookmaker before its offers. The other order means going back to finish the link.

News and the blog

Posts are still posts. What the theme adds is a set of skins for them, a sidebar you can switch on, a card grid with real options, and a handful of extra panels for the story types a sports site publishes — a video, an interview, a live blog. Everything here works with plain WordPress posts, so a site that only ever writes articles can ignore the extras entirely.

The news archive

The news archive is your posts page: the page you nominate under Settings → Reading. Importing a demo sets it for you — the pack's own index, named News, All stories, Advice or Journal depending on the demo. The page's own content is irrelevant on that route; the archive is drawn by a template.

Two settings control what it lists:

Setting Where
How many posts per page Settings → Reading
How many cards per row Appearance → Theme Options → Blog

Category, tag, author, search and not-found archives are drawn from the same family of templates and follow the same skin, so styling the news list styles all of them at once.

Do not delete the posts page. With no page nominated, WordPress has nowhere to render the archive and your news list disappears from the menu while every post stays published.

The single post

An article is rendered by the theme's post template, or by the demo variant of it when the active skin ships one. The variants differ in shape, not only in colour: the news article page adds a byline block and a share rail, the club and academy pages lead with their own hero, and the betting article carries the review furniture. Underneath, the content is your post content, so the block editor behaves exactly as it does on a page.

An article page from the news demo.

Related posts under an article are a post-grid band inside the template with its source set to Related, not something you add per post.

The two skins, and why they are separate

Appearance → Theme Options → Blog offers two independent pickers:

Picker What it skins
News page style The posts page, category, tag, author, search and 404 archives, and the sports content pages such as fixtures, players, programmes, bookmakers and guides
Single post style The article page only

They are separate on purpose. A newsroom-style archive in front of magazine-style articles is a legitimate combination, and so is the reverse.

Both offer Automatic plus one entry per demo the theme ships. Automatic follows the demo you imported; naming a demo mixes that demo's look into that one slot. The mechanics, and the other seven pickers that behave the same way, are in Style pickers: automatic or a demo name.

Only demos that ship a differently shaped article page have a variant; the rest fall back to the shared template, so choosing one of those changes the colours and the section styling rather than the layout.

Choosing a sidebar for the news pages

The same tab holds Sidebar, with three values: No sidebar (full width), On the right, and On the left. It is a fixed choice, not one of the style pickers, and it defaults to no sidebar. The imported demos differ — the tipster and news packs put it on the right; the team, academy and betting packs run full width.

What goes in the sidebar is the Blog sidebar template part, edited in the Site Editor exactly like the header and footer — see Where to edit each part. The news demo's version is worth opening as a reference: a standings table, a contents list, a small post grid, an ad slot and a newsletter card. Add or remove blocks there and every news page follows.

News categories and tags

Categories and tags are the ordinary WordPress ones, edited under Posts → Categories and Posts → Tags, and every demo's section navigation is built from categories. Two habits keep the front end tidy: give a category a description, because the archive masthead prints it, and set a featured image on your lead stories, because the card grid falls back to a plain card without one.

Posts also carry the shared Sports and Flags taxonomies described in Sports content and data. Flags are curation markers — featured, breaking, pick of the day — and the card grid can print them as badges.

Features, videos and shows

The plugin adds two panels and three taxonomies to posts, for the story types a sports newsroom publishes. Use them when they apply and ignore them otherwise.

Addition What it holds
Feature panel Interviewee, Their role, Story year — the long-read and interview furniture
Video panel Video URL, Length as printed, Length in seconds, Views as printed, Counted views, Presenter, Episode, Stream, Stream starts, Live status line
Formats What kind of article this is: video, guide, long read
Video kinds Highlights, analysis, explainer, feature — the filters on a watch page
Shows The series a video episode belongs to

Formats has public archives; Video kinds deliberately does not, because the watch page filters on it and a public archive would hijack that URL. A post with a Video URL and a video kind is what a video hub band lists — you do not create a separate video post type.

The post grid, option by option

post-grid is the block behind the archive list, the related band and every "latest stories" strip. Its sidebar has four panels.

Posts shown. Source is the important one:

Source Behaviour
This page's posts (blog and archives) Lists whatever the page is already showing, and paginates. Use it in archive templates
Latest posts Runs its own query, so the band can sit on any page. Adds How many, Category, Order by and Order
Related to this post The current post's own terms, with an optional Relate through taxonomy

Layout. Grid, Lead story plus side stack, or Numbered list without images. The lead layout adds Cards beside the lead — zero gives the lead the full width — and a Lead column ratio such as 1.7fr 1fr; anything the lead and its stack do not use falls into a grid underneath, so no post is ever hidden. Otherwise you get Posts per row, where 0 follows the site-wide setting on the Blog tab, and Narrowest card, which is the width below which a row drops to fewer columns rather than squeezing.

Heading. Eyebrow, Heading, Link label and Link URL — the band's own title row, so you rarely need a separate heading block above it.

Card. Toggles for Featured image, Category, Flags, Date, Author, Read time and Excerpt. Date can print as a date or as an age such as "2h ago". Author can take its byline from the WordPress author or from the linked person, falling back to the WordPress author when no person is attached, and can show a portrait beside the name. Excerpt has a word count, and the Read more label and the Text when there are no posts are yours to write.

Reading time and pagination

Read time is counted from the post's own words every time the page renders, so it is never stale. The Reading speed slider sets the words per minute used, at 200 by default; raise it for a technical audience that skims, lower it for long-form. Guides in the betting demo are the exception — they carry a Reading time field you set by hand, because an editor's estimate beats a word count on a reference article.

Pagination applies when the source is the page's own posts, and has three values:

Value Behaviour
Page numbers The usual numbered links
Load more A button that appends the next page in place
None No pagination; the grid shows one page and stops

Load more is a real link to page two underneath, so it works before the script loads and a search engine can follow it. When it is on you can also set the button label and a progress line that counts what is shown against the total.

How the news demo front page differs from a plain blog

On a plain blog the front page is the archive: a masthead and a grid of cards, and nothing else to maintain.

The news demo front page: the masthead, the scores board and the first
section front.

The news demo separates the two. Its front page is a static page built from bands — a scores board, a lead post grid, a live blog band, a video hub, an ad slot and a newsletter card — while the archive lives on a second page, All stories, which lists every post in date order. That split is what lets the front page lead on a live match while the archive stays complete and chronological.

To copy the arrangement on your own site: build a page out of bands as described in Building pages, create a second, empty page for the archive, then set the first as your front page and the second as your posts page under Settings → Reading. Nothing else is required — the archive page needs no content, because the template draws it.

Shop and products

Sport Pulse does not need WooCommerce. The theme, the plugin and five of the six demos work with no shop plugin installed, and nothing in the theme asserts a minimum WooCommerce version. Install it only if you sell something.

When you need WooCommerce

Two demos ship products, and they are the two that need WooCommerce: SportPulse Team (the Meridian FC club store — kit and accessories) and E-gaming (the Polaris store — apparel and gear). SportPulse, SportPulse News, SportPulse Academy and SportPulse Betting ship none, so on those four the shop is absent until you build one — which you can, on any of the six, because the theme's shared shop and product templates render for every demo.

Set up WooCommerce

Install and activate WooCommerce the usual way — see Install WooCommerce — then run WooCommerce's own setup: store address, currency, tax, shipping, payments. It creates the Shop, Cart, Checkout and My account pages, and Sport Pulse replaces none of that. It skins what WooCommerce builds.

Activate WooCommerce before you import the Team or E-gaming demo. The pack's products need the product post type to exist at import time. If you imported first, activate WooCommerce and re-import from Importing a demo.

What the theme skins

Three separate things. The shop archive is a whole template the theme ships in place of WooCommerce's own — hero band, toolbar, filter column, grid — and the product page is another: gallery, buy column and the sections beneath. Cart, checkout and My account stay WooCommerce's own pages, with a bridge stylesheet that maps Woo's buttons, notices, prices, ratings and form fields onto the active palette. It changes colour, border and radius only, never layout, so a WooCommerce update that reshapes a component keeps working and only its skin is ours.

The shop and the product page have their own style pickers, separate from the rest of the site — see Style pickers: automatic or a demo name. The two store packs pin both to themselves; the other four leave both on Automatic. Only those two demos ship a designed shop and product page, so any other value falls back to the theme's shared pair rather than failing.

The Meridian FC club store archive with its filter column and product grid.

Add a product

Products → Add new, exactly as WooCommerce documents it. The theme's layouts read Woo's own fields, so there is nothing to type twice:

What you fill in Where it shows
Title Card, buy box, breadcrumb, page title
Long description The description tab under the product
Short description The blurb in the buy column
Regular and sale price Card and buy box; the sale price takes the accent
Product image and gallery Card thumbnail and the product gallery
Product categories Filter column, category tiles, breadcrumb
Stock status and quantity The stock line and the stepper's ceiling
Attributes and variations The size cards in the shared buy box

Reviews are Woo's own, under Products → Reviews, and the page shows the real ones with their real average. Nothing there is hardcoded copy: every panel renders what you typed, or disappears.

Sport Pulse details on a product

The product editor's Product data box gains a Sport Pulse details tab holding the copy the shared product page shows beyond Woo's own fields:

Field What it does
Ingredients Fills a second description tab; empty means no tab
How to use Fills a third description tab; empty means no tab
Highlights One per line, becomes the checklist card
Badge The small chip over the image on cards, such as New
Show price as from Prints "from £39" instead of "£39"

Badge and the from-price switch are read on every shop card, so they work under any shop skin. The description tabs and the checklist are read by the shared product page only — the Team and E-gaming product pages have their own designed sections, so leave those three empty on a club-store product.

The buy box

The buy column is a block, not a Woo shortcode, and there are three: one shared, one per store demo.

The panels under the buy column — delivery and returns, fabric and care, sizing — are content on the block, so edit them in Appearance → Editor.

A club store product page with the buy column, size pills and printing add-on.

Product categories and the category tiles

Categories are WooCommerce's own, under Products → Categories; give each one a thumbnail there. The Category tiles block builds its band from the real category list — name, thumbnail and the count Woo already maintains — and drops any category with nothing in it, so a renamed or added category appears with no editing. A category page has its own template, so it gives a shopper the same grid as the full shop.

Showcase mode and the shop grid

Appearance → Theme Options → WooCommerce holds both. Under Selling mode, Showcase mode — nothing can be purchased turns the store into a catalogue: prices still show, but Add to cart, the Store API's add-item route and the mini cart all read the same flag, so nothing is left that could quietly add an item. Use it for a range you take orders for by phone, a partner range you only display, or a store you are still pricing; switching it off makes everything buyable again and changes nothing about the products.

Above it, Products per row (1–6) and Rows per page (1–12) are Woo's own catalogue options, surfaced here so you do not have to go looking. Products per page is the two multiplied — four across by four down is sixteen before pagination.

The WooCommerce tab, with the shop grid and selling mode settings.

Shop extras that ship as blocks

These extras are blocks, not settings, so each one is switched on by being present in a template: add or delete it in Appearance → Editor.

Extra Where it is placed
Instant search The toolbar on the shared shop template
Quick view Each card in the shared shop grid
Wishlist button Each card in the shared shop grid
Wishlist drawer The header part, beside the mini cart
Shop banner The shop hero, from the Shop page's featured image

Instant search covers products only and answers as you type instead of reloading. Quick view fetches the live price and image when it opens, so it cannot show a stale price. The wishlist lives in the visitor's own browser, so it needs no account and is per device. The two store demos use their own store grids, so they ship without quick view and the wishlist heart.

The sticky bar on a shop

The bar across the bottom on phones resolves each slot from real data and drops any slot with nowhere to go: Call from the Business info phone number, Directions from the address, the primary action from the Primary action link, and Cart once WooCommerce is active. Its on/off setting is The sticky mobile bar; the phone and address it reads are in Business info.

Before you take a real payment

Everything above is presentation; the money is WooCommerce's. Walk this list on the real site, not on the demo.

  1. Showcase mode is off — with it on, nobody can buy anything.
  2. Payments are live, not in test mode, under WooCommerce → Settings → Payments, and tax, shipping and the store address are yours.
  3. The demo's copy is gone. The packs ship fictional stock and European delivery lines, some written into the product template.
  4. HTTPS is on and permalinks are not Plain, both flagged on System requirements, and order emails arrive.
  5. The shop is fast enough — see Performance and going live.

A test order is the only real check. Every setting above can look right and still fail on a gateway nobody switched out of sandbox. Buy something from your own shop before you tell anyone it is open.

Forms, contact and newsletter

Every form in Sport Pulse is a real HTML form. It posts, it redirects, and it works with JavaScript switched off — there is no third-party form service, no API key to buy and nothing to embed. That also means there is one place a submission lands and one set of anti-spam checks in front of it, which is what the rest of this chapter is about.

The form blocks

The shared block is Form. Drop it on any page and it draws one card: a kicker and a heading, name beside phone, an email field, a row of topic chips, any extra fields you declare, the message box, an optional consent line and the send button. The block sidebar edits all of it — the header copy, the topic chips and their label, your own extra fields, every label and placeholder, the consent line and its link, the button text, and the message that replaces the form once it is sent.

An extra field has a label, a key and a type — text, email, url, tel, number or select. Its answer is appended to the message as a labelled line, so it reaches the inbox and the notification email with no extra configuration. That is why the tipster application and the contact desk are one block drawn twice with different extra fields, rather than two blocks that drift apart.

Each demo also ships its own enquiry or contact block so the form matches the page it sits on: the academy's trial enquiry, the e-gaming enquiry and contact forms, the betting site's contact form and the newsroom's tip form. They are designed shells over the same machinery. Two are worth knowing individually — the newsroom form can be sent anonymously, which files the message under "Anonymous" and marks it so you do not record the sender, and the academy enquiry asks the extra questions a parent expects.

Where a submission goes

Two places, always, and in this order:

  1. Messages. A read-only screen in the admin menu. Every submission is stored there as a private record with the sender's name, email, phone, the topic and the page it came from. There is no Add New button: these are records of what a visitor sent, not content to write.
  2. An email, to the address in Appearance → Theme Options → Business info. With no address there it falls back to the WordPress admin email. The subject is your site name plus "New message", the reply-to is the sender, and the body repeats every field plus a link to the record.

Storing happens first on purpose. If mail delivery fails you still have the message; if the store fails, the email says so in as many words. So a missing notification with the row present in Messages is a mail problem on the host, not a broken form — see Troubleshooting.

Every form runs the same guards first: the WordPress nonce, a hidden honeypot field, a minimum fill time of three seconds, a rate limit of five submissions an hour per connection per form, and then Turnstile. A submission that trips one of them comes back to the page saying which, and nothing is stored.

The contact page

The contact page's own details are not typed on the page. They come from Appearance → Theme Options → Business info, which is filled in once and then read by the header, the footer, the contact page, the map, the "Open now" line and your structured data:

On the page Field it reads
The business name Business name
The phone number, as a tel link Phone
The email address Email
The postal address Address
Opening hours and Open now Opening hours
Every call-to-action button Primary action link

Opening hours are Monday first, up to six ranges a day, and an empty day means closed. They drive the "Open now" state and are published as structured data — see SEO and structured data.

Leave the Primary action link empty and every call-to-action button in the theme is not rendered at all, rather than pointing nowhere.

The contact page with its details, form and map.

The map and the Directions button

The map block builds its embed from the Address field, so there is no map key to buy and nothing to paste. Without an address there is nothing to point at, and the block says so instead of showing an empty grey square.

The embed is behind a click. Until a visitor asks for it the page contains no map element at all — not a hidden one, not one with an empty source — because a Google embed hands over the visitor's IP address the moment it resolves.

The Directions button is never gated: it is an ordinary link to the map service, so it works with no JavaScript, needs no consent, and still works for a visitor who declines the embed. It is also the second slot on the sticky mobile bar.

The Business info tab, with the contact details, opening hours and newsletter settings.

Spam protection with Turnstile

Cloudflare Turnstile is free, optional and off until you configure it. Get a site key and a secret key from your Cloudflare dashboard and paste them into Business info, under Spam protection.

Both keys, or neither. The widget renders when a site key is present, and submissions are verified only when the secret is present too. So a site key on its own shows visitors a check that is never verified, and a secret on its own verifies a token no visitor can produce. Either way you get no protection. Clearing the site key is the documented off switch.

What a visitor sees is a small Cloudflare check above the send button. The script is not loaded with the page; it is fetched the first time someone interacts with the form, so a page that merely contains a form does not report its readers to a third party. Turnstile cannot produce a token without JavaScript, so the block prints a line telling a scripting-off visitor why the form will refuse them. If Cloudflare itself is unreachable the submission is allowed through: an outage is evidence of nothing, and the four cheaper guards have already run.

The newsletter card

The Newsletter card block is one email field, a heading, a sentence, an optional fine-print line and a button. It posts to the same place every other form does, with the same guards, and it works with scripting off.

Two settings matter beyond the copy. List ID names the letter being joined: it becomes the "From" column in the inbox, so two cards are told apart without opening a row, and it travels to your provider as a tag. Consent text prints your own wording above the button and is stored with the signup, which is the record you want if anyone asks. Follow buttons — on a section masthead, an author page or a match — are signups too, filed under what they follow.

Newsletter destinations

Under Newsletter in Business info, Where signups go has three values. Every signup lands in Messages whichever you pick; a provider is an addition, never a replacement.

Setting What happens
The Messages inbox only Nothing leaves your site; this is the default
Also post to a form URL The address is posted to any provider's form
Also add to a Mailchimp audience The address is added through the API

For a form URL, paste the action of your provider's own signup form and tell the theme what that form calls its email field — EMAIL for Mailchimp and Brevo, fields[email] for MailerLite, email_address for ConvertKit. Anything else the form needs goes in Extra form fields, one name=value per line; {email}, {tags} and {name} are filled in, so tags={tags} hands over the list that was joined. Nearly every provider has a hosted form, so this route fits almost all of them.

For Mailchimp, paste an API key and the audience ID from Audience → Settings → Audience name and defaults. The key must keep its data-centre suffix — the -us21 on the end — because that is how the theme finds the right API host. Double opt-in is on by default and adds the member as pending, so Mailchimp sends its own confirmation; turn it off only if you are certain you may.

Either way the outcome is written back onto the message and shown in the inbox: sent, rejected with its status code, or not forwarded with the reason.

Keys you cannot read back

The Turnstile secret key and the Mailchimp API key are stored write-only. They are never returned to the settings screen, so both fields look empty after saving even though the values are working, and neither appears in an exported settings file. Re-entering the key is the only way to change it — see Write-only secrets. Keep them wherever you keep your other credentials; the site will not give them back.

Colours, fonts and spacing

Sport Pulse has one design system and every block obeys it. Change a colour in one place and the whole site follows — buttons, links, badges, tables, charts, the WooCommerce notices, all of it. This chapter is where each dial is.

How the colour system works

The theme defines a palette of named slots, not a list of colours. Every pattern, block and stylesheet in the theme and the plugin references the slot by name — never a raw hex value — so a slot is a promise: whatever is in primary is what every primary thing on the site is.

There are around twenty slots, most of them structural or derived and riding along with the palette:

Slot Used for
base, paper, surface Page and card backgrounds
contrast, muted, border Body text, secondary text, hairlines
primary, secondary, accent The three brand hues
cta Buttons and calls to action
success, error, warning Status fills, including Woo notices
live The live badge on matches and streams

Each of those has an on- partner — on-primary, on-accent, on-cta — which is the text colour that sits on top of it. That pairing is what keeps a recoloured button legible, so if you change a fill, check its partner.

Because nothing hardcodes a value, this system is also why you should never paste a hex code into custom CSS when a token will do.

Change the palette

Appearance → Theme Options → Theme styles, in the Colours card. Six pickers are exposed, in the order you think about them: Page background, Text, Primary, Secondary, Accent and Buttons / CTA. Those are the brand decisions; the rest of the palette follows.

The card says Saved to Site Editor styles, and it means it literally: these values are written to the site's global styles, the same entity Appearance → Editor → Styles edits. So the editor previews exactly what the front end renders.

The Theme styles tab, with the preset picker, the colour pickers and the type scale.

Keep contrast readable. The theme cannot check your choices. A pale accent on a white page fails at small sizes even though it looks fine in the picker, and the on- partner colour is what carries the text over it.

The style variations

Above the pickers is Preset. Its default is Automatic — follow the imported demo, and below that it lists every style variation the theme ships by name — the six demo palettes, including two alternative tipster palettes, a light and a wire newsroom palette, and a dark variation called Dusk.

Picking one applies the whole look: colours, fonts, the section CSS and the header, footer and shop skins. It is the fastest way to wear one demo's appearance on a site built from another's content.

A preset is a full replace. Applying one discards individual colour and font tweaks you made afterwards, which is why the screen asks before it does it. Pick the preset first, then adjust.

Three more variations are section styles rather than site styles: Section — Alt, Section — CTA and Section — Inverted. They are not in the preset picker because they apply to one band: select a group or a Sport Pulse section block in the editor and pick the style there, and that band alone flips.

Fonts and the four font roles

The theme uses four font roles, and every heading, paragraph, table and figure in it is assigned to one of them:

Role Where it is used
Heading Headings, section heads, display type
Body Body copy, labels, buttons
Data Tables, odds, code-like values
Numerals Scores, counters, stat figures

Out of the box all four are system stacks — the fonts already on the reader's device — which is why the theme paints instantly and ships no font files it does not need.

In Fonts on the same tab you pick the heading and body faces from whatever is installed. Add a Google Font… browses the whole Google catalogue and installs the family onto your own server, so your visitors never contact Google, the font needs no cookie banner and it costs no third-party request. Upload a font… opens the Site Editor's Font Library, where you add your own licensed files; once installed, the family appears in these dropdowns. Either way the font is self-hosted — nothing in Sport Pulse fetches type from a third party at page load.

Type sizes

The Type scale card exposes the only four sizes worth setting per site: Hero / H1, Section heading (H2), Sub-heading (H3) and Body text. Everything else in the theme is derived from them.

Leave a field blank and the theme's own fluid size applies, scaling between a phone and a desktop on its own. Type a number and that size is used across the whole site at every width, so only override a step you need pinned.

The content width

Appearance → Theme Options → Site layout sets Content width (px) — 600 to 1920, default 1200. It caps the page's content column everywhere, including inside the editor, so what you build is what you see.

Sections with a full-width background still stretch edge to edge; only their inner content is capped. That is the difference between a wide site and a wide band.

The Site layout tab and the content width setting.

Spacing and the section rhythm

Spacing is a scale, not free numbers. The theme ships seven steps and every block's padding and gap controls offer exactly those:

Step Size
XS 0.25rem
S 0.5rem
M 1rem
L 1.5rem
XL Fluid, roughly 2 to 3rem
Section Fluid, roughly 3 to 5.5rem
Hero Fluid, roughly 4.5 to 7.5rem

The last three are fluid: they shrink on a phone and open up on a desktop with no media query. Section is the one that creates the rhythm between bands, and the demos use it everywhere — which is why their pages read as designed. Give a band you add Section padding rather than a typed value and it will match the ones the demo built.

Custom CSS, and where to put it

Small, additive tweaks go in Appearance → Theme Options → Advanced, in Custom CSS. It is printed on every page of the site, it survives theme updates, and it travels in an exported settings file.

Write it against the tokens rather than raw values, so your CSS follows a palette change instead of fighting it:

/* A heavier shop hero title, still on the theme's own palette. */
.anps-shop-hero__title {
	font-family: var(--wp--preset--font-family--heading);
	color: var(--wp--preset--color--primary);
	letter-spacing: -0.02em;
}

The Advanced tab, with the Custom CSS box and the settings backup.

Use the child theme instead when you are doing more than tweaking: changing a template, replacing a template part, overriding a whole stylesheet or adding PHP. The child theme ships in the same download; install it, activate it in place of the parent, and leave the parent installed. Nothing you put in a child theme is touched by a Sport Pulse update.

The demo skins are stylesheets

Each demo's look is a stylesheet the theme ships — one file per demo, built from the theme's own sources into assets/dist/demo-<slug>.css — and the style pickers decide which one loads. Those files are theme files.

Never edit the theme's own files. A Sport Pulse update overwrites assets/dist/ wholesale, and a hand-edited demo stylesheet disappears with it, silently, at the worst possible moment. Put the change in Custom CSS if it is a rule or two, or in the child theme if it is more. Both outlive every update.

If a change fights the demo skin instead of extending it, that usually means the wrong skin is selected — check Style pickers: automatic or a demo name before you write CSS to undo it.

Building pages with Elementor

Sport Pulse builds its pages out of blocks, in the WordPress editor. If you prefer Elementor, you can build the same pages there instead: the theme ships an Elementor widget for almost every content band, and each of the six demos ships an Elementor version of its pages.

Elementor is optional. Nothing in this chapter loads unless Elementor is active — with the plugin absent, the theme and its demos behave exactly as the rest of this manual describes.

What Elementor covers here

Elementor owns page content only. The header, the top bar, the footer and the sticky mobile bar stay WordPress template parts, edited in the Site Editor, because Theme Options drives them — see Header, top bar and footer. Colours, fonts, type sizes, business info, opening hours, structured data and the shop are still set in Theme Options, tab by tab whichever editor you build pages in.

So Elementor replaces one thing: how you lay out and edit the middle of a page.

Elementor Free is enough

There is no Elementor Pro dependency. Every control the widgets use — text, media, repeaters, colour pickers, responsive dimensions — is in the free edition. Free shows some of its own upgrade prompts inside the editor; that is Elementor's chrome, not a missing feature of the theme.

To keep the first run clean, the theme skips Elementor's onboarding wizard and its usage-tracking notice, and it switches Elementor's own default colours and fonts off, so Elementor's native widgets inherit your palette and typefaces instead of fighting them. If you want Elementor's untouched behaviour, a developer can turn all of that off with the anps_elementor_clean_ui filter.

The widgets, one per block

Sport Pulse registers 187 widgets — one for each content block that has an Elementor equivalent. They sit in a single group in the Elementor inserter, called Theme Sections, and each one is named after the block it renders: the Elementor widget for the team-league-table block is the same league table you would insert in the block editor.

The Theme Sections group in the Elementor inserter, with the theme's section widgets listed.

That is not a lookalike. A widget builds the block's own field values and calls the block's own renderer, so the markup, the CSS and the front-end behaviour are the same in both editors. It also means a fix to a block reaches your Elementor pages with no extra work.

Importing a demo with Elementor active

Activate Elementor before you import. All six demos ship an Elementor build of their pages, and the importer picks it automatically when Elementor is active; with Elementor off, the same import writes block pages. The demo card on Appearance → Theme Options → Demo import marks the pack as having an Elementor version, and the screen tells you Elementor was detected.

The Demo import tab, with a card for each of the six demos.

Everything else about the import is unchanged — it is still one demo per site and still a full replace. Read Importing a demo first.

Activating Elementor afterwards does not convert anything. An import that already ran wrote block pages, and they stay block pages. To get the Elementor build, activate Elementor and then re-import the demo — which replaces your content again.

Editing a Sport Pulse widget

Drop a widget on the page and its Content tab is the block's own field list: the headings, the text, the links, the repeater rows, the images. A band that reads live data — fixtures, predictions, players, products — exposes the query (how many, which category, what order) and never a copy of the data, so it keeps showing what your site actually holds.

Two controls are worth knowing:

Control Where What it does
Section style Content tab Default, alt, invert or CTA — the same section rhythm the block variations use
Band padding Style tab, Band spacing Responsive top and bottom padding for the band

Band padding is deliberately empty by default, so the demo's own responsive spacing stands until you override it. Colour controls are full Elementor colour pickers, seeded with your palette so they follow Colours, fonts and spacing until you pick something specific.

Elementor page template

An Elementor page must use the Elementor page template. Open the page in the WordPress editor sidebar, or Elementor's own page settings, and set Template to Elementor (full-width content). There is also Elementor landing (no header or footer) for a page with no chrome at all.

This is not cosmetic. The No title template constrains the content column, and an Elementor container cannot break out of it the way a block band can. On the wrong template, every full-width band on the page is trapped in a narrow strip with the page background showing down both sides. The demo's Elementor pages are already set correctly; a page you create yourself is not.

Block pages keep No title. Do not move them to the Elementor template.

Blocks with no widget

Some blocks are deliberately absent from Elementor, because they are site furniture rather than page content: crests and wordmarks, cart and account links, the search field, the match and article heads that belong to a single template. Those live in templates and parts, and you edit them in the Site Editor.

Long legal documents are the other exception. The privacy, terms and cookie pages stay block content even in an Elementor demo — their nested structure does not survive a page builder's repeater, and a page with block content renders perfectly well beside Elementor pages.

Mixing block pages and Elementor pages

You can, page by page. The choice is per page: a page with Elementor data is rendered by Elementor, and every other page is rendered by its blocks. Both read the same Theme Options, the same palette and the same demo stylesheet, so they match visually. Only remember the template rule above — Elementor pages on the Elementor template, block pages on No title.

One thing that surprises people: the moment you press Edit with Elementor, Elementor owns that page. Its blocks are still in the database, but the block editor's canvas is hidden for that page while Elementor is active, and the editor shows Elementor's own switch instead. Use Back to WordPress Editor in Elementor's panel to hand the page back. So open a block page in Elementor only when you mean to convert it.

Turning Elementor off

Deactivate Elementor and the widgets and the Elementor page template stop being offered. What happens to a page depends on how it was built:

Nothing else changes: your options, colours, menus, posts, products and sports data are untouched, because none of them were ever Elementor's to hold.

If a page looks wrong after any of this, start with Troubleshooting.

SEO and structured data

Structured data is the machine-readable copy of a page: the same facts a visitor reads, written so Google, Bing and AI assistants do not have to guess. Sport Pulse publishes it from data you have already entered, so there is nothing to maintain twice.

The theme handles the parts that come from your own settings. Titles, per-page meta descriptions and sitemaps belong to WordPress or to an SEO plugin — see Titles, meta descriptions and sitemaps below.

What the theme publishes, and from where

Every page carries one JSON-LD graph. What goes into it depends on the page:

Node On which pages Built from
Your business or organisation Every page Business info: name, phone, email, address, opening hours
A branch A single location page That location's own address, phone, hours and map position
Frequently asked questions Pages with an FAQ block The questions and answers in the block
Products Product and shop pages WooCommerce, not the theme

That is the whole list, and the omissions are deliberate. The theme publishes no article, breadcrumb, event, fixture or video markup, and it never attaches a star rating to your business — ratings belong on products, where WooCommerce owns them. If you want article or breadcrumb markup, an SEO plugin adds it without conflicting with any of the above.

An FAQ block only contributes questions when its schema option is on, so a question-and-answer band used purely for layout does not claim to be an FAQ.

The Business info hand-off

One screen feeds all of it: Appearance → Theme Options → Business info. Fill it in once and the same values reach the contact page, the footer, the map, the "open now" state and the structured data together.

Field What it feeds
Business name The name search engines show for the organisation
Phone and email Contact details in the graph, and the contact page
Address The postal address, and the locality used in summaries
Opening hours Opening-hours specifications day by day, and the open-now state on the front end
Business type Which schema.org type your organisation is published as

Business type is the field most people skip. It decides whether you are described as an organisation, a shop, a local business or a professional service, and Google treats those differently. Pick the closest match once. Full details of the screen are in Business info.

An empty field is simply left out rather than published blank, so partial information is safe — but incomplete information is a weaker listing.

With Yoast or Rank Math installed

Two plugins that publish structured data on one page produce two competing graphs, which is worse than either alone. Sport Pulse avoids that: if Yoast or Rank Math is active, the theme stops emitting its own graph and adds its nodes to the plugin's graph instead, linking them to whatever business node the plugin already publishes. You get one graph, with your opening hours and locations in it.

If the plugin is installed but has not been set up — Rank Math publishes nothing until its wizard is finished, for instance — the theme notices that nothing was emitted and falls back to its own graph, so a half-configured plugin never leaves a page with no structured data at all.

Handing structured data to an SEO plugin

If you would rather your SEO plugin owned every node, including the business and the opening hours, switch Let an SEO plugin own structured data on in Business info. The theme then publishes no JSON-LD and no FAQ nodes at all, and you enter your business details again in the plugin.

Only turn this on if you have actually configured the plugin. With the switch on and the plugin unconfigured, the page ends up with no structured data from anyone — the fallback described above is deliberately skipped.

Locations in search results

A location's own page publishes that branch as a business in its own right — its address, its phone number, its hours, its map position — and links it to the organisation from Business info as the parent. That is the shape Google expects from a business with more than one address, and it is why a branch page can rank for its own town.

Add and edit branches as described in Locations. Two things matter for search: fill in the address and the hours, and give each branch a page of its own rather than listing them all on one.

AI assistants and the llms.txt file

Your site also serves a short plain-text profile at yoursite.com/llms.txt. It is the same idea as robots.txt, but for assistants such as ChatGPT and Perplexity: your business name, a one-line summary, your key pages, your products and your contact details, so an assistant answering a question about you reads your own data instead of inferring it.

It is generated on request from the same settings as everything else, so there is no file to edit and nothing to regenerate. It is served as plain text and marked not to be indexed, and it stays short on purpose — a crawler wants a map, not your whole catalogue. Keeping Business info accurate is the entire maintenance task. A developer can switch it off with the anps_llms_txt_enabled filter.

Titles, meta descriptions and sitemaps

So an SEO plugin is optional. Install one when you want to write per-page titles and descriptions by hand, or want article and breadcrumb markup; skip it and the site is still complete.

Search checks before you launch

Do these once, in this order:

  1. Fill in Business info completely, including the business type and the opening hours.
  2. Rewrite the demo copy on your home page and your main landing pages. The structured data and /llms.txt repeat what you write, so demo text becomes a demo claim about your business.
  3. Open yoursite.com/llms.txt and read it. If a line is wrong, the setting behind it is wrong.
  4. Test one page of each kind — home, a location, a page with an FAQ, a product if you sell — in Google's Rich Results Test.
  5. Check that Settings → Reading does not still discourage search engines.

The rest of going live is in Performance and going live.

Performance and going live

A fast site is mostly a matter of what you add after the theme. Sport Pulse ships lean and stays out of the way; the two things that reliably slow a WordPress site down are oversized images and too many plugins, and both are yours to control.

This chapter is the last thing to read before you make the site public.

What the theme already does

You do not need to configure any of this. It is how the theme is built.

What is left to you

Do this Why it matters
Upload images near the size they display, and use WebP The single biggest cause of a slow page; WordPress makes the smaller variants for you but never a smaller original
Install one page-cache plugin Serves a built page instead of building it per visitor
Use a CDN if your host offers one Moves images and stylesheets closer to the visitor
Keep the plugin list short Most plugins add their own CSS and JavaScript to every page, including pages that do not use them
Stay on a current PHP version PHP 8.1 is the floor; newer is faster

Two habits are worth more than any setting: crop a photograph before you upload it, and remove a plugin you stopped using instead of deactivating it.

How to check a page honestly

A measurement you cannot repeat is not a measurement. If you test a page, test it like this:

  1. Test the live site over HTTPS, not a local copy and not a staging site on shared hosting.
  2. Test logged out. As an administrator you load the admin bar and editor assets that no visitor ever sees.
  3. Run it twice and use the second run. The first request builds the page and warms the caches.
  4. Test a real page with your content, on mobile as well as desktop.
  5. Change one thing at a time. If a number moves after you install a plugin, that plugin moved it.

Google's PageSpeed Insights and Lighthouse in Chrome both work. Read the opportunities, not just the score — "properly size images" is the one you can usually act on.

The launch checklist

Work through this in order. Every step is something a buyer has shipped without at least once.

  1. Permalinks. Settings → Permalinks — anything except Plain. Plain permalinks break clean URLs and the search-engine visibility of everything.
  2. HTTPS. Site address and WordPress address both https://, with a valid certificate.
  3. Requirements. Open Appearance → Theme Options → System requirements and clear everything marked Fix. Use Copy all as text if you need to send it to your host.
  4. Business info. Name, phone, email, address and opening hours filled in — they feed the contact page, the footer and your structured data.
  5. Menus. Check every menu location the demo used, and click through the header and footer on a phone as well as a desktop.
  6. Home page. Settings → Reading points at the page you mean, and the posts page is the one you mean.
  7. Contact form. Send a real message from the front end. It should appear under Messages and arrive by email. If it is stored but never arrives, the problem is email delivery, not the form.
  8. A real purchase, if you sell. Place an order with live payment credentials, then refund it. Check the order email, the tax and the shipping total.
  9. Search-engine visibility. Settings → Reading — the box that discourages search engines must be off. This is the single most common launch mistake.
  10. Demo images. Replace them, as below.
  11. Read your own pages. Demo copy names fictional clubs, players and prices. Anything you leave is a claim about your business.

The System requirements tab, with each check marked OK, Check or Fix.

Replace the demo images

The photographs in the demos are licensed for the demo, not for your site. They are there so an empty site looks finished while you work, and they must come off before you launch — every hero, every card and every gallery.

This is a licence obligation, not a suggestion. Read Licence, updates and support before you decide to keep one. Replacing an image is the same as replacing any other: open the block or the widget, pick your own file, delete the demo attachment from Media when nothing uses it.

Fictional names go with them. Meridian FC, Polaris Esports, Rowan Hall and Oddsmark are invented, and so are their fixtures, prices and records.

If something looks wrong once the site is live, Troubleshooting covers the symptoms this theme can actually produce.

Licence, updates and support

Sport Pulse is one product bought through two routes, and the route decides only how updates reach you. Everything the theme does is the same either way.

What the licence covers

The download contains a licensing/ folder with two files, and together they describe a split licence:

Part of the product Licence File
PHP code and the HTML it generates GNU General Public Licence GPL.txt
CSS, JavaScript, images and the design The licence you purchased README_License.txt

In practice: you may modify and reuse the code, and the design and assets are licensed for the site you bought the licence for. One licence, one production site. A staging or development copy of that same site is not a second site.

Nothing in the theme is switched off by a licence check. An unlicensed installation keeps every feature it has, including the demo importer and every block — what a licence adds is automatic updates and support.

If you bought an ANPS Club licence

Open Appearance → ANPS Club Licence, paste your key and activate. The screen then reports the licence as active, and this site gets automatic updates and support.

If the screen says the key is valid but for a different theme, or that it cannot verify the licence, do not re-purchase — the message tells you which of the two it is, and both are settled by support.

If you bought on ThemeForest

Your purchase is complete and permanent; there is no key to enter. Updates are manual:

  1. Download the new version from your ThemeForest downloads page.
  2. Unzip it and take sportpulse.zip and plugins/anps_theme_plugin.zip.
  3. Upload the theme at Appearance → Themes → Add New → Upload Theme and choose to replace the current version when WordPress offers.
  4. Upload the plugin at Plugins → Add New → Upload Plugin, the same way.

That is the whole procedure, and it is the same procedure as the first install — see Installing. An ANPS Club licence is the alternative if you would rather updates arrived in the dashboard; it is offered on the licence screen.

Keeping the theme and plugin in step

The theme and the Anps Theme Plugin are released together and expect each other's version. Update both at the same time, from the same download.

If the plugin is older than the theme needs, the theme says so with a notice: Sport Pulse needs Anps Theme Plugin (version) or newer; (version) is installed. Update the plugin. Nothing is broken at that point, but a block added in the newer release will not be registered until you update.

The reverse also matters: a plugin newer than the theme is not a supported combination either. One download, both zips, every time.

Before you update

An update replaces theme and plugin files. It does not touch your database, but "does not touch" is not the same as "cannot go wrong", so:

  1. Back up the database and wp-content. Your host almost certainly has a one-click backup; take one.
  2. Export your settings. Appearance → Theme Options → Advanced has Export settings, which writes a small file you can import again. It is the fastest way back to a working configuration.
  3. Note your secrets. The Turnstile secret and the Mailchimp API key are stored write-only and are deliberately absent from that export — see Write-only secrets. Keep them where you can find them.
  4. Update on staging first if the site earns money.

The Advanced tab, with Custom CSS and the settings export and import buttons.

What an update never touches

An update replaces the theme's and plugin's own files, and nothing else. It leaves alone:

The one thing an update does overwrite is a file you edited inside the parent theme. That edit is gone, silently, with no way back. Put custom code in the child theme, and custom CSS in Theme Options → Advanced → Custom CSS, and an update is a non-event.

Demo photography is licensed for the demo

The photographs that arrive with a demo are licensed for use in the demo. They are not licensed for your live site, and neither are the fictional clubs, players, sponsors or prices they illustrate. Replace them before you launch — there is a checklist in Performance and going live.

The same applies to the theme's demo content in general: it exists so an empty site looks finished while you build, not to be published as your own.

Getting support

Support runs through ANPS Club at club.anpsthemes.com for licensed sites, and through the item's support channel where you bought it if you bought on ThemeForest.

Include this in the first message and you will usually get an answer rather than a question:

Include Where to find it
Theme and plugin versions Appearance → Themes, and Plugins
WordPress and PHP versions Appearance → Theme Options → System requirements
The requirements report The same tab, via Copy all as text
Which demo you imported Appearance → Theme Options → Demo import
The exact URL of a broken page Your browser's address bar
What you expected, and what happened In your own words, one sentence each

Check Troubleshooting first. Most of what reaches support is in there, with the fix.

Troubleshooting

Each section below is one symptom: what you see, why it happens, and what to do about it. They are ordered roughly by when in a build you meet them.

Two symptoms live in their own chapters and are not repeated here: a header with no navigation is answered by If the header shows no menu, and Elementor's own rules are in Building pages with Elementor.

Blocks are missing from the block inserter

None of the theme's sections are offered — no hero, no section head, no fixture board — in the editor or the Site Editor.

Every block lives in the Anps Theme Plugin, so this means the plugin is not running. The admin notice tells you which of three cases it is:

Install steps in full are in Installing.

Theme Options is not under Appearance

The menu item is simply absent. The settings screen ships in the plugin, so the first cause is the same as above. If the plugin is active, the cause is your user: the screen needs the capability an administrator has, so an editor or a shop manager never sees it. On multisite, check you are on the site rather than in the network admin.

The demo import will not start because of a requirement

The Demo import tab lists red requirements above the demo cards and importing gets nowhere. Those are the checks an import cannot proceed without — PHP memory, upload and post size, execution time, the DOM and cURL extensions, and an image library. They are your host's settings, not the theme's.

Open Appearance → Theme Options → System requirements, use Copy all as text and send that to your host, asking for the failing values to be raised. The tab is described in System requirements.

The demo import stops part-way or times out

The progress modal stalls, or the page errors with some pages imported and some missing. An import writes hundreds of posts and downloads every demo image, so it is the longest single request your site will ever serve; a host that caps execution time interrupts it.

Do not leave it half-done — run Re-import on the same demo. An import replaces rather than merges, so a second run repairs a partial first one. Keep the browser tab open while it works. If it fails at the same point twice, ask your host to raise the PHP time limit.

Demo images are broken or missing after an import

Pages and text arrived; images are empty frames. The import fetches each image over HTTP and saves it into your Media library, so if your server cannot make outbound requests — cURL disabled, an outbound firewall, allow_url_fopen off — the text imports and the media does not.

Clear that requirement on the System requirements tab, then Re-import. Importing again is the only way to fetch the media it missed.

A page looks unstyled after changing a style picker

You picked a demo name in a style picker and now that part of the site renders plain: no section colours, no band spacing, default type.

The pickers choose which demo's look is used for one slot — header, footer, shop, single post, and so on — and a demo only supplies a variant for the slots it actually ships. Point a slot at a demo that has no variant for it and the neutral base version renders instead. That is the plain look.

Set the picker back to Automatic, which always follows the demo you imported, then change one slot at a time. See Style pickers: automatic or a demo name.

Pages exist, but the header, the footer or both show nothing, or a partial list. An import writes the demo's menus and assigns them, but a menu can be left unassigned when the site already held menus of the same name, and a page you delete later leaves a gap in whichever menu pointed at it.

Open Appearance → Menus, check a menu is assigned to every location the demo uses, and remove items pointing at pages that no longer exist. Menus render two levels deep, so a third-level item never appears. See Menus.

Admin menus I do not recognise, or one that vanished

Either you see around twenty sports menus you have no use for, or a menu you were using — Predictions, Bookmakers, Programmes — has left the sidebar. Both are the same mechanism: a sports post type's admin menu is shown or hidden according to the demo you imported. Each of the five filtered demos shows its own types; the Team demo and a site with no demo imported show everything, because an unrecognised demo hides nothing. On top of that, a type that still holds posts keeps its menu whichever demo is active — so one menu the current demo does not use is normal on a site that has had other content through it.

The admin sidebar on a site running the E-gaming demo: its own eight content
types, plus People, Locations, Team and Messages, which are always
present.

A hidden menu is never lost content. The post types are always registered — only the menu is hidden — and a type that still holds posts keeps its menu whatever the demo. Nothing is deleted by switching demos, and re-importing the demo that used a type brings its menu back.

People, Locations, Team and Messages sit outside this entirely and are always present.

The sticky mobile bar shows when it should not

A bar is pinned to the bottom of the screen on phones and you do not want it, or you want one and there is none. It is a three-state setting whose default is to follow the demo, so a demo designed around the bar switches it on for you.

Go to Appearance → Theme Options → Footer → Mobile bar and set Sticky mobile bar to Never show or Always show rather than Automatic. The bar itself is described in The sticky mobile bar.

A new Google Font does not load

You added a font through Theme styles → Add a Google Font… and either the list never appeared or the site still shows the old typeface.

Fonts install onto your server rather than link to Google's, so two things can fail. If the catalogue will not load, your server cannot reach the internet — the same outbound-request problem as a failed image import. If the install failed, the font directory under wp-content is not writable; the error says so.

If the font installed and nothing changed, you have not selected it yet: pick it as the Heading font or Body font in Theme styles, save, and clear any page cache. Browsers cache fonts hard, so confirm in a private window.

The shop looks wrong, or nothing can be bought

Product pages render oddly, the shop page is a bare list, or Add to cart is nowhere. Three causes, in the order worth checking:

  1. WooCommerce is not active. The theme does not require it, so the shop templates only apply once it is. Only the Team and E-gaming demos ship products at all.
  2. Showcase mode is on. It removes every price and purchase button by design — that is how a catalogue-only site is built. Turn it off in WooCommerce.
  3. The shop style picker points at a demo with no shop of its own. Set it back to Automatic, as above.

The rest of the shop is in Shop and products.

The contact form does not send

Either the visitor is rejected, or the form submits and no email arrives. Those are unrelated causes, and one check separates them: every submission is saved on the site under Messages first, then emailed to the address in Business info, falling back to the WordPress admin email.

The newsletter form does not subscribe

Someone signs up and never reaches your list. The form has three destinations and only does what the setting says, so check Business info → Newsletter → Where signups go:

If double opt-in is on, a subscriber stays unconfirmed until they click Mailchimp's email. That is not a failure, and it is the setting most often mistaken for one.

An Elementor page's bands are trapped in a narrow column

Full-width sections sit in a centred column with the page background down both sides, and it looks correct inside the Elementor editor. The page is on the wrong template: an Elementor container cannot break out of a constrained content column the way a block band can.

Set Template to Elementor (full-width content) on that page. The demo's Elementor pages already are; a page you created is not.

A fixture, prediction or match page looks thin

A single fixture, prediction, player or programme page renders with a title and little else, while the demo's own pages look full. Those pages are built from the fields in the editor panels, and a band with no data renders nothing rather than a placeholder — correct on a live site, and bare on a half-filled one.

Open the entry and fill in its panel: a fixture needs its competition, kickoff time, venue and both sides; a prediction needs its fixture, analyst, selection and odds. See Sports content and data.

Images are missing after moving the site

You moved to a new domain, or from staging to live, and images are gone while pages and settings survived. Attachment URLs are stored in the database with the old domain, and the files themselves live outside it.

  1. Copy wp-content/uploads across in full — a database export contains no images.
  2. Search and replace the old site URL with the new one across the database, with a tool that handles serialised data.
  3. If images appear at the wrong sizes, regenerate the intermediate sizes.

Do this before re-importing anything: an import replaces content and will not repair a move.