Quickstart
Five steps to a working editorial site
If you already know WordPress and just want the install path:
- Upload the theme zip via Appearance → Themes → Add New → Upload Theme, then click Activate.
- Install the RSS Importer plugin from Plugins → Add New (search "TheGridIndex RSS Importer"). Activate.
- Go to Appearance → Theme Setup and click "Create missing pages". This builds /plugin, /demo, /contact, /company, /about, /privacy, /terms with the right templates pre-assigned.
- Go to Settings → Permalinks and click Save to flush rewrite rules. This enables the news sitemap at /news-sitemap.xml.
- Open Settings → Grid Index RSS, toggle on the publisher feeds you want, then click Import Now.
01
Install the theme
Requirements
- WordPress — 6.0 or higher
- PHP — 7.4 or higher (8.x recommended)
- Database — MySQL 5.7+ or MariaDB 10.4+
- HTTPS — recommended for SEO and security; required for some integrations
Upload and activate
- In WordPress admin, go to Appearance → Themes → Add New → Upload Theme.
- Choose the theme zip file (named thegridindexplatform.X.Y.zip) and click Install Now.
- Click Activate. The site will switch to the dark editorial layout immediately.
- You'll see a notice at the top of the WordPress admin: "The Grid Index theme is active — visit Appearance → Theme Setup". Click that link.
Updating the theme
To install a newer version, repeat the upload process. WordPress will prompt to replace the existing theme. Your Customizer settings and pages are preserved across updates.
02
Install the RSS Importer plugin
The RSS Importer is the companion plugin that pulls headlines from external publishers into WordPress posts. It's published on WordPress.org and installs through the standard plugin directory.
From the WordPress directory
- Go to Plugins → Add New.
- Search for "TheGridIndex RSS Importer".
- Click Install Now → Activate.
Manual install (.zip)
- Download the latest .zip from wordpress.org/plugins/thegridindex-rss-importer.
- Go to Plugins → Add New → Upload Plugin.
- Choose the .zip and click Install Now → Activate.
03
The Theme Setup dashboard
The theme adds an admin screen at Appearance → Theme Setup. This is the single place to create and wire up the pages that need specific templates (Plugin, Demo, Contact, Parent Company, About, Privacy, Terms).
One-click setup
Three buttons handle the common workflow:
- Create missing pages — creates any of the seven managed pages that don't exist yet, with the correct template pre-assigned.
- Re-assign templates on existing pages — if you already created pages but they're rendering with the default page.php instead of the custom template, this fixes them all in one click.
- Flush permalinks — rebuilds WordPress's rewrite rules. Useful after creating new pages or changing slugs.
Wiring status table
Each managed page gets a row showing the expected slug, the required template, and a color-coded status:
- Wired (cyan) — page exists with the correct template.
- Wrong template (amber) — page exists but is rendering with page.php or the wrong template. Click "Wire it" to fix.
- Missing (red) — page doesn't exist yet. Click "Create page" to add it.
Manual assignment
The "Assign a template to any page" section lets you attach any theme template to any WordPress Page — useful for non-managed pages or testing.
04
Customizer options
All site-wide configuration lives under Appearance → Customize. Settings are grouped into seven sections:
SEO & Social
Default meta description, Open Graph image, Twitter handle, Google Search Console verification token, Bing Webmaster verification token, Google Analytics 4 measurement ID. These power the meta tags, Twitter Cards, OG tags, and JSON-LD schema that get rendered into every page head.
Social Profiles
Twitter/X, LinkedIn, GitHub, Mastodon, and YouTube URLs. Used in the Organization JSON-LD sameAs array (important for entity SEO) and available to footer templates.
Analytics
Google Analytics 4 measurement ID. Pasted into a wp_head() snippet only when set; leave blank and no tracking is loaded.
Front Page Links
URLs for the buttons that appear in the header and front page CTAs:
- View Demo URL — where the nav "View Demo" button points. Defaults to your live Hostinger site.
- Live Demo URL — where the in-house /demo page's "Open Live Demo" buttons point. Defaults to the same Hostinger URL.
- Plugin URL — where the "Plugin" nav button points. Defaults to /plugin.
- Plugin: WordPress.org URL — the WordPress.org plugin listing.
- Plugin: GitHub repo URL — the GitHub source repo.
- Plugin: Download .zip URL — the direct download. Defaults to the WordPress.org "latest-stable" zip.
Contact Form
Where contact form submissions are delivered, and the intro paragraph shown above the form on the /contact page.
Company & Legal
Legal entity name (used throughout Privacy and Terms pages) and governing-law jurisdiction (used in Terms section 12).
Footer
Footer tagline, sub-line, and copyright text.
05
Page templates
The theme ships ten custom page templates beyond the default page.php. Each is auto-assigned to its matching slug, so creating a page with slug "plugin" will render the Plugin template without you opening the Page Attributes panel.
| Slug | Template | Purpose |
|---|---|---|
/plugin | plugin.php | Marketing page for the RSS Importer |
/demo | demo.php | Live editorial demo with 12 module breakdown |
/contact | contact.php | Working contact form (name, email, inquiry type, subject, message) |
/company | company.php | Parent company profile (Fifth Avenue Photographic LLC) |
/about | about.php | About The Grid Index platform |
/privacy | privacy.php | Privacy Policy (11 sections, GDPR/CCPA-aware) |
/terms | terms.php | Terms of Service (14 sections, GPL-compatible) |
/docs | docs.php | This page — full reference documentation |
/features | features.php | Feature deep-dive |
06
The 12 editorial modules
The theme ships every front-end block needed to run an editorial site. Each module is opinionated by default but accepts WordPress posts in standard formats — no proprietary post types or builders required.
- Breaking News Strip — auto-rotating red ticker pinned to the top. Driven by posts tagged "breaking".
- Hero Lead Story — full-bleed image, kicker, headline, dek, source byline, timestamp, action buttons.
- Most Active Right Now — ranked rail of 4–6 momentum stories with thumbnails, tags, age stamps.
- Source Intelligence Sidebar — numbered list of authoritative stories with publisher tags and minute-precise ages.
- Accelerating Stories — card row of momentum-tracked stories with publisher logos and "Read at [source]" buttons.
- Trending Entities — hashtag chips of trending publishers and topics with story counts.
- Daily Newsletter Capture — inline subscribe card with email field. Action URL set in Customizer.
- Top Stories Grid — 3-column responsive grid (6+ stories) with images, kicker, headline, byline, timestamp.
- Topic Dashboard — side-by-side topic columns with 3–5 headlines each and story counts.
- Live Latest Feed — 10 most recent items across all sources with thumbnails, kickers, minute-precise ages.
- Source-Attributed Links — every imported story links to the original publisher via the source meta field. Attribution-safe.
- Top Bar Utilities — search, category nav, LIVE indicator with clock, support contact.
07
RSS Importer plugin setup
The Catalog tab
Settings → Grid Index RSS → Catalog. Shows 47 curated publisher feeds grouped by topic: News (17), Tech (9), Business (7), Science (2), World (4), AI/Vendor (3), and a few others. Each row has an on/off toggle and a configurable check interval (5min / 15min / 30min / hourly).
The Feeds tab (custom feeds)
For any RSS URL not in the catalog: Settings → Grid Index RSS → Feeds → Add new. Paste the URL, choose a check interval, post status, and category mapping. The plugin uses a browser-style User-Agent and the standard WordPress HTTP API.
Post status options
- Publish — imported items go live immediately.
- Draft — imported items wait in the Drafts queue until an editor publishes them. Best for editorial review.
- Pending — similar to Draft, but uses the "Pending Review" status that editors with limited permissions can see.
Deduplication
Every imported item is recorded in a persistent GUID ledger using the item's feed GUID (or its source URL as fallback). Re-running an import never creates duplicates, even if you've deleted the original posts. To wipe the ledger and re-import a feed from scratch, use the "Reset feed history" action on the Feeds tab.
Featured image extraction
The plugin pulls a featured image from (in order): RSS enclosure tag, media:thumbnail, media:content, or the first inline image in the content body. A minimum-width filter skips tracking pixels and icons. Configure in Settings → Grid Index RSS → Images.
Import Now
The "Import Now" button on each tab triggers an immediate fetch for the selected scope (all feeds / single feed / single catalog row). Useful for testing or when WordPress cron is unreliable.
08
Email delivery (contact form)
The contact form on /contact uses WordPress's wp_mail() function. On many hosting providers — including Hostinger — wp_mail() will not reliably deliver mail to external inboxes without an SMTP plugin.
Recommended: install an SMTP plugin
Two well-supported options from the WordPress directory:
- WP Mail SMTP — integrates with SendGrid, Mailgun, Postmark, Amazon SES, Brevo (Sendinblue), Microsoft 365, and Google Workspace.
- FluentSMTP — free, open-source, supports the same providers plus generic SMTP.
Setting the recipient
Appearance → Customize → Contact Form → Send submissions to. Paste the email address you want contact form messages delivered to. Leave blank to fall back to the site admin email (Settings → General → Administration Email Address).
What the email contains
Each submission is delivered as a plain-text email with: submitter name and email, inquiry type, subject, message body, timestamp, submitter IP, and a truncated User-Agent. The Reply-To header is set to the submitter's address, so replies go directly to them.
09
SEO & structured data
The theme renders production-grade SEO without requiring Yoast, RankMath, or any third-party SEO plugin. If you use one of those plugins anyway, it should coexist — but you may want to disable duplicate output.
What's automatic
- Meta descriptions (160 character clamp, per-context).
- Per-post SEO meta box (custom description, focus keyword, noindex toggle).
- Canonical URLs and robots meta with max-image-preview:large.
- Open Graph tags and Twitter Cards.
- JSON-LD: WebSite + SearchAction on home, NewsArticle on posts, WebPage on pages, BreadcrumbList everywhere, Organization in the head with social sameAs.
- robots.txt entries pointing to all sitemaps.
- A dedicated Google News sitemap at /news-sitemap.xml (last 48 hours).
Search Console & Bing Webmaster
Paste your verification tokens into Customize → SEO & Social. The meta tags appear on every page head until you remove them.
Submitting the news sitemap
In Google Search Console → Sitemaps, paste the URL: https://yourdomain.com/news-sitemap.xml. The sitemap regenerates on each request and only includes posts published in the last 48 hours, per Google News guidelines.
10
Developer reference
File structure
/page-templates/— all custom page templates (plugin, demo, contact, company, about, privacy, terms, docs, features)./template-parts/— reusable content blocks (content.php, content-single.php, content-page.php, content-none.php)./inc/— PHP modules: template-tags, customizer, seo, schema, sitemap, breadcrumbs, contact-form, admin./assets/js/main.js— minimal vanilla JS for the mobile nav toggle and external-link hardening.style.css— single stylesheet, no build step, design tokens via CSS custom properties.
Post meta keys (from RSS Importer)
_tgi_source_url— canonical URL of the original article on the publisher site._tgi_source_name— human-readable publisher name (e.g., "The Verge", "Reuters")._tgi_source_feed— the feed URL the item was imported from._tgi_imported_at— Unix timestamp of when the import ran._tgi_guid— the feed GUID used for dedupe.
Theme template tags
tgi_the_kicker()— outputs the post kicker (first category name, uppercase).tgi_posted_meta()— outputs byline + relative timestamp.tgi_reading_time()— returns reading-time estimate in minutes.tgi_relative_time( $timestamp )— human-readable relative time ("2m ago", "5h ago", "yesterday").tgi_the_pagination()— paginated archive nav.
Child theme
To customize templates without losing changes on theme updates, create a child theme. Standard WordPress child theme rules apply — the parent theme follows them all.
11
Troubleshooting
A managed page (e.g. /plugin) is rendering as plain text or a blank header
The page exists but is using page.php instead of the custom template. Go to Appearance → Theme Setup → "Re-assign templates on existing pages". The page should render correctly on next refresh.
Visiting /demo or /company returns 404
The WordPress Page doesn't exist yet. Go to Appearance → Theme Setup → "Create missing pages" to create all managed pages in one click. Then visit Settings → Permalinks → Save to flush rewrite rules.
Contact form submissions aren't arriving
Almost always a mail-delivery issue, not a form issue. Install WP Mail SMTP or FluentSMTP and configure a real email provider (SendGrid, Postmark, etc). See the Email delivery section above.
A feed shows a red status dot on the Feeds tab
The plugin tried to fetch the feed and failed. Hover the dot for the specific error — usually a 404, a TLS handshake error, or the publisher temporarily blocking the request. Check the publisher's status page; the feed may have moved.
A feed is green but importing nothing
The fetch succeeded but every item was already in the dedupe ledger. This is normal once a feed has been running for a while. To force a re-import, use "Reset feed history" on that feed's row.
The /news-sitemap.xml returns 404
WordPress's rewrite rules haven't been flushed since the theme was activated. Go to Settings → Permalinks and click Save (you don't need to change anything — saving is what flushes the rules).
The View Demo button goes to the wrong URL
Update Appearance → Customize → Front Page Links → View Demo URL. If the URL is on a different domain from your site, the theme automatically opens it in a new tab and adds an external-link icon.
12
Getting support
If the docs don't answer your question, there are three places to reach us:
- Plugin support forum on WordPress.org — the official WordPress.org plugin support forum. Best for plugin-specific issues; visible to other users so answers help the next person.
- Contact form — for private inquiries (press, partnerships, security disclosure, paid support requests). Responses within two business days.
- In-admin FAQ — the RSS Importer plugin ships with 15 FAQ entries embedded in the admin. Settings → Grid Index RSS → Help.
Bug reports
When reporting a bug, please include: WordPress version, PHP version, theme version, plugin version, the URL where the issue occurs, exact steps to reproduce, and what you expected to happen vs. what actually happened. Screenshots help a lot.
Security issues
For security vulnerabilities, please use the contact form rather than the public forum so we can patch before public disclosure. Mark the inquiry type as "Other" and put "Security" in the subject line.
Couldn't find what you needed?
Tell us what was missing from these docs. We update this page whenever a question comes in that the docs should have answered.