OTheme v2.8.1
A long-form editorial WordPress theme bundled with the Orravo Page Builder, a cloud-synced template library, and a one-click demo importer for case studies, dossiers, and structured editorial content.
What OTheme ships
OTheme is the Orravo editorial stack: a parent theme, a section-based page builder, a cloud-synced template library, and an editable demo pack, designed so the look and feel ships out of the box but every section remains editable.
templates.orravo.com; refresh without re-installing/woocommerce/ overrides for product, cart, checkoutThe bundle
OTheme is one purchase, four moving parts. The theme is the visual base; the three plugins layer composition, templates, and demos on top.
orv_page CPT, masthead + section editor, section presets, Cmd+K command palettetemplates.orravo.com, sideloads images, creates editable pagesorv_page posts, every section editableGetting installed
From WordPress admin
orravo.zip.Manual install (FTP / SFTP)
orravo/ to /wp-content/themes/./wp-content/plugins/.orv_page CPT, flushes rewrite rules, and seeds reusable section presets. No theme files are modified. Updates ship via the Orravo updater.From zero to first page
Import a demo, edit it in the Page Builder, publish. Three minutes end-to-end.
orv_page post is created with all sections populated.All demo content is stored as standard _orv_pb_masthead + _orv_pb_sections post meta. Deactivating the demos plugin doesn't delete the page; your edits persist.
Theme architecture
A clean WordPress parent theme with WooCommerce templates, custom image sizes, four menu locations, and a six-area widget structure.
Theme support
Registered via after_setup_theme:
title-tag: dynamic page titlespost-thumbnails: featured imagesautomatic-feed-links: RSS feedscustom-logo: max 240×80, flex dimensionshtml5: search-form, comment-form, comment-list, gallery, caption, style, script
Custom image sizes
| Handle | Dimensions | Crop | Use case |
|---|---|---|---|
orv-card | 600 × 400 | Yes | Card thumbnails in grids |
orv-hero | 1920 × 800 | Yes | Masthead and hero images |
orv-avatar | 120 × 120 | Yes | Author and source avatars |
Menu locations
- Primary Menu: main site navigation
- Primary Menu (Left of Logo): split-nav layout, left column
- Primary Menu (Right of Logo): split-nav layout, right column
- Footer Menu: secondary footer links
Widget areas
- Footer Column 1, 2, 3: three-column footer
- Blog Sidebar: index/archive pages
- Page Sidebar: optional, controlled per-page in Customize
- Single Post Sidebar: single posts
Design tokens
All colors and spacing live in the --orv-* CSS custom property namespace. Override in the Customizer or a child theme.
Token palette (v4.1)
- ink: primary text color (dark editorial)
- parchment: background paper tone
- gold: accent highlights, CTAs
- teal: secondary accent, callouts
- coral: alert / urgency
- violet: premium / pro accents
Each color has solid, soft, glow, and contrast variants, e.g. --orv-gold, --orv-gold-soft, --orv-gold-glow.
Helper functions
PHP// Inline an SVG from assets/svg/{name}.svg
echo orv_get_svg('arrow-right');
// Render post meta (category · date · author · time · comments)
orv_render_post_meta();
Performance subsystem
OTheme ships with the WS4 performance layer: a per-section asset router that loads CSS and JS only for sections that appear on the current page.
What it does
- Per-section asset router: only enqueues styles for sections present on the page
- Critical CSS inlining: first-fold styles inlined to
<head>for fast paint - Deferred third-party scripts: analytics, chat widgets pushed to
wp_footer - Font preloading: Fraunces, JetBrains Mono, Inter preconnected and preloaded
Files
The performance layer lives under /inc/performance/. Customizations should hook the relevant filters; do not edit files directly; your changes will be lost on theme update.
Page mastheads
Every orv_page post starts with a masthead: the hero block. Pick from five styles, each tuned for a different editorial purpose.
| Type | Look | Best for |
|---|---|---|
pillar | Dark bg, series label, title, subtitle, meta tags, optional subnav | Pillar pages, topic hubs |
series | Full-screen dark masthead with background overlay | Multi-part series intros |
standard | Clean dark masthead with breadcrumb | Articles, case studies |
landing | Large masthead with radial gold glow | Marketing landing pages |
minimal | Simple light masthead | Short essays, notes |
Section library
The Page Builder ships 18 section types covering most editorial layouts. Custom section types can be registered by other plugins via the orv_pb_section_types filter.
Editorial sections
| Type | Description |
|---|---|
intro_prose | Eyebrow, title, deck, body, optional drop cap |
argument | Eyebrow, title, deck, body, optional tab panels |
conclusion | Summary section with badge and references |
quote_block | Pull quote with attribution, source ref, editor's note |
quotation | Pull quote with book/article reference and commentary |
source_cite | Author/expert callout with avatar, role, quote |
prose_callout | Highlighted box with icon, title, body |
Layout sections
| Type | Description |
|---|---|
card_grid | 2–4 linked cards with CTA (2/3/4 column) |
two_column | 50/50, 60/40, or 40/60 split with mobile collapse |
dark_feature | Dark ink block with 3-column icon/point grid |
stats_bar | 2–6 stat tiles (number + label) |
comparison_entry | Two-sided comparison with quote and sources |
comparison_table | Column headers and data rows |
numbered_steps | Sequential numbered steps with titles and body |
accordion | Expand/collapse Q&A panels |
Navigation & conversion
| Type | Description |
|---|---|
subnav | Sticky horizontal subnav linking to page anchors |
cta_strip | Prominent CTA strip with 1–2 buttons |
custom_html | Raw HTML / shortcode block (escape hatch) |
Field types
Sections are defined declaratively. Available field types: text, textarea, richtext, select, toggle, tags, repeater, link, icon, code.
Reusable section presets
Save any configured section as a preset and reuse it across pages: CTAs, FAQs, source citations, signature stat bars.
How presets work
orv_pb_section_presets_global option.Presets are copies, not references; editing one inserted preset does not affect the original or other copies.
Cloud-synced template library
The Orravo Templates plugin fetches a live catalog from templates.orravo.com/api/v1, caches it locally, and lets you import any template as a real, editable page.
Sync mechanism
- API base:
https://templates.orravo.com/api/v1(override with theORV_TPL_API_BASE_OVERRIDEconstant) - Fetcher: HTTP client, transient-cached responses
- Manifest: parses remote template metadata (title, description, sections, presets)
- Image sideloader: downloads template images to your Media Library on import
- Bundled fallback: local templates in
/bundledwhen the cloud is unreachable
Import flow
orv_page post.orv_pb_section_presets_global for reuse.orv_page posts even if you deactivate the Templates plugin. Your imports are not tied to the plugin's lifecycle.One-click demo importer
The Orravo Demos Pack bundles 14+ ready-to-use demos (case studies, dossiers, landing pages) that import as real, editable orv_page posts.
How demos differ from templates
| Demos | Templates | |
|---|---|---|
| Source | Bundled with the plugin | Fetched from templates.orravo.com |
| Image hosting | Plugin /assets | Sideloaded to Media Library |
| Updates | Plugin update | Live (cloud refresh) |
| Editable | Yes, full Page Builder | Yes, full Page Builder |
Demo storage
Each demo is a PHP array file at /data/demos/<slug>.php. On import, the importer creates a real orv_page post with _orv_pb_masthead and _orv_pb_sections meta, identical to manually-built pages.
Graceful deactivation
If a demo introduces a custom section type and you later deactivate the demos plugin, that section renders as empty; the page does not crash. Your standard sections continue to render normally.
Developer reference
Custom post type
PHP// Query Page Builder pages
$pages = get_posts([
'post_type' => 'orv_page',
'numberposts' => -1,
]);
foreach ($pages as $page) {
$masthead = get_post_meta($page->ID, '_orv_pb_masthead', true);
$sections = get_post_meta($page->ID, '_orv_pb_sections', true);
}
Register a custom section type
PHPadd_filter('orv_pb_section_types', function ($types) {
$types['my_section'] = [
'label' => 'My Section',
'group' => 'editorial',
'fields' => [
'title' => ['type' => 'text', 'label' => 'Title'],
'body' => ['type' => 'richtext','label' => 'Body'],
],
];
return $types;
});
add_filter('orv_pb_render_section', function ($html, $type, $data) {
if ($type === 'my_section') {
return '<section class="my-section"><h2>' . esc_html($data['title']) . '</h2>'
. wpautop($data['body']) . '</section>';
}
return $html;
}, 10, 3);
Constants
| Constant | Purpose |
|---|---|
ORV_TPL_API_BASE_OVERRIDE | Override the cloud template API base URL |
ORV_TPL_BUNDLED_DIR | Override the bundled templates directory path |
Options
| Option | Stored data |
|---|---|
orv_pb_section_presets_global | JSON array of saved section presets |
orv_tpl_legacy_seed_detected | Flag set when migrating from the legacy demo seed |
orravo_demo_seed_v1 | Legacy; detected on activation, kept for backward compatibility |
Activation hooks
- Theme: registers menus, image sizes, widget areas, performance subsystem
- Page Builder: registers
orv_pageCPT, flushes rewrite rules - Templates: detects legacy demo seed, fires
orv_tpl_activatedaction - Demos Pack: defensive CPT register, seeds presets, flushes rewrite rules
Frequently asked questions
orv_page CPT entries, typically pillar pages, landing pages, and case studies._orv_pb_masthead, _orv_pb_sections), not theme files. Theme updates touch only the theme; your pages persist./woocommerce/ template overrides for product, cart, and checkout views, styled to match the editorial palette.orv_page posts will not render because the CPT is registered by the plugin. Your data is intact; reactivating restores rendering. Standard posts and pages continue to work.style.css tokens, copy any template into the child to customize, and your changes survive parent theme updates.templates.orravo.com on each admin page load (cached in transients). New templates appear automatically; no plugin update required.Orv_Cmdk integration. Cmd+K from anywhere in wp-admin finds pages, sections, and plugin screens./data/demos/<slug>.php inside the Demos Pack plugin. Each demo is a PHP array describing a complete page: masthead + sections.Got a question about OTheme?
Reach out directly. Kenneth replies within 24 hours.
