Abuja Digital Studio · Est. 2018
Start a Project
Docs
OOnboard
User onboarding flows for WordPress — guided entry, demo experiences, registration gating, and multi-step assessments via shortcode embed.
oonboard
Developer documentation

OOnboard v2.0.0

A self-hosted WordPress onboarding flow builder with 15 step types, 8 visual skins, audience targeting, conditional branching, A/B testing, drop-off analytics, NPS and surveys, WooCommerce hooks, signed webhooks, and OEngage / OMailer integration. Your data, your database, no SaaS fees.

WordPress plugin WP 6.0 · PHP 8.0+ GPL-2.0-or-later 2026-05-03
01 · Overview

What OOnboard does

Multi-step guided experiences for new users, from welcome screens to quiz-driven branching flows with registration gating, NPS surveys, WooCommerce coupons, and post-completion automation. Self-hosted, WordPress-native, no monthly SaaS cost.

🏗️
15 step types
Welcome, info, video, form, registration gate, checklist, quiz, feature highlight, tour step, countdown, success, NPS, survey, Woo product, Woo coupon
🎨
8 visual skins
Atelier, Aurora, Brutal, Neon Arcade, Linear, Stripe Light, Apple OS, Notion. Register your own with the oob_register_skins filter.
🎯
Audience targeting
Show flows to a slice of users using and / or rules across role, meta, device, registration date, prior completion
🔀
Conditional branching
Quiz options route via next_step_index; per-step conditional gating with skip-or-route fallback
🧪
A/B testing
Variant A vs B with automatic winner detection by completion rate
📉
Drop-off analytics
Per-step view counts, NPS scoring, survey responses, color-coded abandonment
Post-flow actions
Redirect, XP, badge, OMailer subscribe, role change, signed webhook with auto-retry
🛒
WooCommerce
Triggers on first purchase, any purchase, specific product, thankyou page, account dashboard
🏷️
Merge tags
Personalise any step with {{user_name}}, {{site_name}}, Woo totals, and custom tags
📦
Versions and import / export
Snapshot every save; restore prior versions; export flows as JSON for transfer
🔗
Orravo integrations
OEngage (XP + badges) and OMailer (list subscribe) wired in; auto-nests under Orravo Core menu
🛡️
Self-hosted
All data in your own database. No third-party service dependency.
FeatureOOnboardUserGuidingAppcues
Self-hosted❌ SaaS❌ SaaS
WordPress-native
Data stays in your DB
Registration gating in-flow
OEngage + OMailer integration
Cost$79 once$89 to 249/mo$249+/mo
02 · Installation

Getting installed

1
Upload the oonboard folder to /wp-content/plugins/ or install via WP Admin → Plugins → Add New → Upload.
2
Activate through the WP Admin Plugins screen.
3
On activation, OOnboard creates seven database tables (oob_progress, oob_events, oob_flow_versions, oob_checklists, oob_checklist_progress, oob_survey_responses, oob_webhook_log) and registers the oo_flow and oo_checklist custom post types.
4
Navigate to OOnboard in the WordPress admin sidebar.
ℹ️Requires WordPress 6.0+, PHP 8.0+, MySQL 5.7+ / MariaDB 10.3+, and jQuery (bundled with WordPress).
03 · Quick Start

Your first flow in minutes

1
Go to OOnboard → Flows and click New Flow.
2
Enter a flow name and click Create Flow. You'll be taken to the Builder.
3
Click + Add Step, choose Welcome Screen, and fill in title, content, and button text.
4
Add more steps as needed.
5
In Flow Settings, choose your Display Style and Trigger.
6
Click Save Flow, then Activate Flow to publish it.
7
Copy the shortcode and paste it wherever you want the launch button:
[oonboard_trigger id="YOUR_FLOW_ID" label="Start"]
04 · Admin Interface

Admin interface

Persistent two-row sticky header: brand bar (icon + name + version + light/dark toggle) plus a horizontal tab nav. Theme preference persisted to localStorage under key oob_theme.

4.1 · Dashboard

Dashboard

Four-stat summary row (Total Flows, Flow Starts, Completions, Avg Completion Rate) followed by a table of recent flows with per-flow conversion stats.

4.2 · Flows

Flows tab

Lists all flows with name, display style, trigger type, status pill (Active / Draft), start count, and completion rate. Actions: Edit (opens Builder), Duplicate, Delete. Live search filters flows by name.

4.3 · Builder

Flow builder

PanelContents
Left: Steps listOrdered steps with index + type. + Add Step opens the type picker (15 types, gated by license tier). Each row has Edit, Move Up, Move Down, Delete.
Right: Step EditorAppears when editing a step. Common fields: Title, Content, Button Text, Skip Text. Type-specific fields appear below.
Right: Flow SettingsAlways visible: Flow Name, Display Style, Progress Style, Trigger, Target Page ID, Allow Skip, Resume Position, Back Button, A/B Test, Post-Flow Actions (redirect, message, XP, OMailer, role, webhook).
💡Save Item stages changes locally. Click the top-right Save Flow to persist to the database. The flow must be Activated (not Draft) to be visible to users.
4.4 · Progress

Progress tab

Paginated table of all user interactions. Filter by flow or status. Delete individual records with the trash icon.

ColumnDescription
UserDisplay name + email, or "Guest" for anonymous users
FlowFlow name
VariantA or B (for A/B tests)
Statusstarted completed abandoned
StepCurrent step number
TimestampsStarted at / Completed at
4.5 · Analytics

Analytics tab

Per-flow analysis. Select a flow from the dropdown to see stats.

ComponentDescription
Stats rowTotal Starts, Completions, Completion Rate, Avg Completion Time
Daily Completions chartCanvas bar chart of daily completions over last 30 days
Step Drop-Off tablePer-step view counts and abandonment percentage
A/B Test ResultsSide-by-side cards for Variant A and B; "Winner" badge on the higher completion rate
Drop-off <10%: healthy
10–30%: investigate
>30%: needs attention
4.6 · Settings

Global settings

SettingDescription
Default Display StyleApplied to new flows; can be overridden per flow
Disable for adminsAuto-trigger flows won't fire for WordPress admin users
Load assets globallyEnqueue frontend CSS/JS on all pages, needed for manual trigger buttons in headers/footers
Default OMailer List IDDefault list for post-flow OMailer subscriptions
OEngage XP event keyThe event key sent to OEngage on flow completion

The Settings tab also shows a Merge Tags Reference and Shortcode Reference panel in-admin.

05 · Step Types Reference

Fifteen step types

👋
welcome
Welcome Screen
Large headline, subheading, background image, CTA button. The opening screen of your flow.
📄
info
Informational
Title + rich text body (HTML, images, embeds) + Continue button.
🎬
video
Video Step
YouTube, Vimeo, or self-hosted MP4. Optional auto_advance when video ends via API.
📝
form
Form Step
Text, email, tel, number, textarea, select, checkbox, radio fields. Data saved to user_meta.
🔐
registration_gate
Registration Gate
Prompts guest users to register mid-flow. Flow continues automatically after wp_create_user().
checklist
Checklist
List of tasks the user checks off. Optional all_required gate before advancing. Standalone widget version available.
🧩
quiz
Quiz / Assessment
Multiple-choice with next_step_index per option for conditional branching paths.
🔦
feature_highlight
Feature Highlight
Spotlight overlay via CSS selector. Dims the page, boxes the target with a glowing border.
🧭
tour_step
Tour Step
Guided product tour with placement (top, bottom, left, right, auto), spotlight padding, scroll-into-view, and optional require_interaction.
⏱️
countdown
Countdown
Real-time countdown to a target ISO date-time. Creates urgency for time-sensitive onboarding.
🎉
success
Success / Completion
Celebration screen with optional confetti. Optional redirect after redirect_delay seconds.
📊
nps
NPS Score
0 to 10 score with follow-up question. Routes detractor / passive / promoter to different next steps. Stored in oob_survey_responses.
📋
survey
Multi-Question Survey
Mix of text, textarea, rating, stars, multiple_choice, single_choice questions. Each question keyed for analytics.
🛒
woo_product
WooCommerce Product
Embed a product card mid-flow with optional price and add-to-cart button.
🎟️
woo_coupon
WooCommerce Coupon
Auto-generates a unique percent or fixed coupon (with prefix and expiry days) and shows it to the user.
💡Free tier ships with 5 step types (welcome, info, video, form, success). The remaining 10 require a Pro license.
06 · Display Styles

Four display styles

🪟
modal
Modal
Centered overlay with dimmed backdrop. Default.
🖥️
full-page
Full-Page
Fills the entire viewport with a solid dark backdrop.
↪️
slide-in
Slide-In
Panel slides in from the right edge of the screen.
📌
embedded
Embedded
Renders inline inside a page element. No overlay.

Set per-flow in Flow Settings. Can also be overridden by the style attribute on the trigger shortcode.

6.5 · Visual Skins

Eight built-in skins

Skins control the full visual treatment of a flow card (typography, color tokens, motion, border treatment). Set per-flow via the skin setting. Default is atelier.

SkinMoodAccent
atelierCream paper, serif, slow fades. Default Orravo identity.#C9A84C
auroraFrosted glass with animated conic gradient border. Reduced-motion safe.#7c5cff
brutalPure black on white. Zero radius. Hard 100ms transforms.#000000
neonPixel font, scanline overlay, magenta and cyan glow. Retro arcade.#ff2bd6
linearLinear.app dark palette, thin borders, monospace numerals.#5e6ad2
stripePastel gradients, micro-shadows, friendly rounded corners.#635bff
appleTranslucent material, San Francisco type, spring-physics buttons.#0a84ff
notionOff-white, generous spacing, minimal accents, clean sans.#2eaadc
PHP · register a custom skinadd_filter('oob_register_skins', function(array $skins): array {
    $skins['my_brand'] = [
        'id'          => 'my_brand',
        'label'       => 'My Brand',
        'mood'        => 'Custom palette',
        'description' => 'Brand-aligned colors and motion.',
        'accent'      => '#ff3d00',
        'preview_bg'  => 'linear-gradient(135deg,#0a0a0a,#1a1a1a)',
        'featured'    => 11,
        'has_motion'  => true,
    ];
    return $skins;
});

// Then style with .oob-skin-my_brand selectors in your theme's CSS
07 · Progress Indicators

Progress indicators

TypeDescription
barThin accent-colored progress bar at the top of the flow card
steps"Step 2 / 5" text label
dotsRow of clickable dots, one per step
percentPercentage text, e.g. "40%"
noneNo progress indicator shown
08 · Flow Triggers

Flow triggers

TriggerWhen it fires
ManualOnly when the user clicks a [oonboard_trigger] button or OOBFrontend.launchFlow() is called
First LoginHooks into wp_login. Queues the flow after the first login and auto-launches it on the next page load.
Page LoadAuto-launches when a user visits the configured Target Page ID.
Time-BasedSchedules via wp_schedule_single_event('oob_fire_delayed_flow', ...). Configure trigger_delay_value and trigger_delay_unit (minutes, hours, days).
WooCommerce: First PurchaseFires on woocommerce_order_status_completed when the customer has only one completed order.
WooCommerce: Any PurchaseFires on every completed Woo order.
WooCommerce: Product PurchaseFires when a specific trigger_product_id appears in the order.
WooCommerce: ThankyouFires on woocommerce_thankyou page render.
WooCommerce: Account DashboardFires on woocommerce_account_dashboard.
8.5 · Audience Targeting

Audience targeting

Restrict who sees a flow with a rule set evaluated by OOB_Audience_Evaluator. Stored in flow settings under audience as { logic: 'and' | 'or', rules: [...] }. Pro feature (audience_targeting).

FieldOperators
user_roleequals, not_equals
user_meta (with meta_key)equals, not_equals, contains, not_contains, starts_with, ends_with
previous_form_answer (with step_index, field_id)All comparison operators
flow_completedhas_completed, has_not_completed
device_typedesktop, tablet, mobile
user_logged_inyes, no
user_registered_before / user_registered_afterYYYY-MM-DD comparison

Per-step conditions use the same evaluator (OOB_Condition_Evaluator). When a step's conditions fail, conditions_else picks the fallback: skip (default) or jump to conditions_else_step.

Add custom rule fields with the oob_condition_rule filter.

09 · Conditional Branching

Conditional branching

Implemented via the Quiz step type. Each answer option has a next_step_index field that overrides the default sequential next step.

When a user selects an option, OOB_Engine::ajax_complete_step() reads the chosen option's next_step_index and jumps there instead of current_index + 1. If next_step_index is null, the flow advances normally.

💡Example: A quiz at step 2 routes Option A → step 3 (advanced flow) and Option B → step 5 (basic flow). This enables two completely different paths through the same flow based on user answers.
10 · Merge Tags

Merge tags

Double-brace {{placeholders}} replaced at render time by OOB_Merge_Tags::process(). Work in step title, content, and subheading fields.

TagReplaced with
{{user_name}}User's display name; "there" for guests
{{user_first}}User's first name
{{user_last}}User's last name
{{user_email}}User's email address
{{site_name}}WordPress site name
{{site_url}}WordPress home URL
{{current_date}}Today's date (WordPress date format)
{{current_year}}Current year (4 digits)
{{admin_email}}Admin email address
{{user_id}}WordPress user ID
{{user_role}}User's first WordPress role; guest if logged out
{{woo_order_count}}WooCommerce completed order count (when Woo is active)
{{woo_total_spent}}WooCommerce lifetime spend, formatted (when Woo is active)

Custom merge tags

PHPadd_filter('oob_available_merge_tags', function(array $tags): array {
    $tags['{{plan_name}}'] = 'Customer plan name';
    return $tags;
});

// Then push the value at render time via the context
OOB_Merge_Tags::process('Hello {{plan_name}}', [
    'custom' => ['plan_name' => 'Pro'],
]);
11 · Post-Flow Actions

Post-flow actions

Run automatically when a user completes the final step, via OOB_Actions::run(). Configure in Builder → Flow Settings.

ActionDescription
Redirect URLRedirect the user's browser to a specified URL
Success MessageDisplay a custom message on the completion screen
Award XPCalls oengage_award_xp($user_id, $amount, $event_key); requires OEngage
Award Badge IDCalls oengage_award_badge($user_id, $badge_id); requires OEngage
OMailer List IDSubscribes user to an OMailer list via om_subscribe(); requires OMailer
Assign WP RoleChanges the user's WordPress role on completion
Webhook URLSends a POST request with a JSON payload to an external URL
Webhook SecretHMAC-SHA256 signs the payload; header: X-OOnboard-Signature
JSON · webhook payload{
  "event":   "flow_completed",
  "flow_id": 42,
  "user_id": 7,
  "time":    1745625600
}
12 · A/B Testing

A/B testing

Enable per-flow in Builder → Flow Settings → A/B Test checkbox. New users are randomly assigned 50/50 to Variant A (original steps) or Variant B (separate step set).

DetailValue
Variant assignmentRandom 50/50 for new users. Stored in {prefix}oob_progress.variant so users always see the same variant.
Variant B stepsStored in _oob_variant_b post meta. A "Variant B" step list appears in the builder when A/B testing is enabled.
ResultsAnalytics tab → A/B Test Results section. Side-by-side starts, completions, completion rate. "Winner" badge on the higher-performing variant.
12.5 · Versions and Import / Export

Flow versioning, import, export

Every save snapshots the flow into {prefix}oob_flow_versions. Restore any prior version through the builder UI (Pro feature: flow_versioning). Export any flow to JSON for transfer between sites.

SurfaceDescription
Snapshot on saveOOB_Versions::snapshot() writes steps_json + settings_json per save with version_number auto-incremented per flow
RestoreAJAX oob_restore_version swaps the live flow back to a chosen version_id
ExportAJAX oob_export_flow returns JSON containing steps, settings, post_actions, variant_b
ImportAJAX oob_import_flow creates a new flow from a JSON export
TemplatesAJAX oob_create_flow_from_template spawns a flow from a packaged template (Pro: template_library_cloud)
13 · Shortcodes

Shortcodes

[oonboard id="X"]

Embeds a flow inline on any page or post in Embedded display style.

[oonboard id="42"]
AttributeRequiredDescription
idYesFlow post ID

[oonboard_trigger id="X" label="Start"]

Renders a styled button that launches a flow when clicked.

[oonboard_trigger id="42" label="Start the Tour" style="modal"]
AttributeDefaultDescription
id(required)Flow post ID (required)
labelStartButton text
stylemodalmodal, full-page, slide-in, embedded
class(none)Additional CSS classes for the button element
14 · Gutenberg Block

Gutenberg block

OOnboard registers an OOnboard Flow block in the Gutenberg editor under the Widgets category.

1
In the block editor, search for "OOnboard" or find it under Widgets.
2
Insert the block and select which flow to embed in the block settings sidebar.
3
The block uses server-side rendering and calls OOB_Shortcode::render_embed() at display time. In the editor it shows a preview card with the flow name and ID.
15 · Integrations

Orravo integrations

OEngage
XP & Badges
Calls oengage_award_xp() and oengage_award_badge() on flow completion. XP event key configurable in Settings. OEngage must be installed and active.
OMailer
List Subscribe
Calls om_subscribe() with first_name, last_name, list_id, and source on completion. OMailer must be installed and active.
OForms
Field vocabulary
Form step fields mirror OForms field types. Full OForms renderer integration is on the roadmap for a future release.
PHP · OMailer callom_subscribe( $user_email, [
    'first_name' => $user->first_name,
    'last_name'  => $user->last_name,
    'list_id'    => $list_id,
    'source'     => 'oonboard',
] );
16 · Developer API

Developer API

PHP helper functions

PHP// Check if the current user has completed a flow
oob_has_completed_flow( int $flow_id, int $user_id = 0 ): bool

// Get the admin builder URL for a flow
oob_get_flow_url( int $flow_id ): string

// Queue a flow for a specific user (via OOB_Triggers)
oob_queue_flow( int $flow_id, int $user_id = 0 ): void

// Read a single progress row
oob_get_progress( int $flow_id, int $user_id = 0 ): ?object

OOB_Flow: flow CRUD

PHPOOB_Flow::create( string $name, array $settings = [] ): int
OOB_Flow::update( int $id, array $data ): bool
OOB_Flow::delete( int $id ): bool
OOB_Flow::duplicate( int $id ): int
OOB_Flow::get( int $id ): ?WP_Post
OOB_Flow::get_all( array $args = [] ): array
OOB_Flow::get_steps( int $id ): array
OOB_Flow::get_settings( int $id ): array
OOB_Flow::get_post_actions( int $id ): array
OOB_Flow::get_variant_b_steps( int $id ): array

OOB_Pro: license + capability gating

PHPOOB_Pro::is_pro(): bool                  // delegated to orravo_is_licensed('oonboard')
OOB_Pro::tier(): string                  // 'free' | 'pro' | 'agency'
OOB_Pro::can( string $feature ): bool    // ab_testing, audience_targeting, webhooks_advanced, etc.
OOB_Pro::free_limit( string $key )       // max_flows: 3, max_steps: 10, allowed step_types: 5

OOB_Skins, OOB_Audience_Evaluator, OOB_Condition_Evaluator

PHPOOB_Skins::get_all(): array                                    // all registered skins
OOB_Audience_Evaluator::matches( int $flow_id, int $user_id ): bool
OOB_Condition_Evaluator::evaluate( array $conditions, int $user_id, array $context = [] ): bool

OOB_Progress: progress tracking

PHPOOB_Progress::upsert( int $flow_id, int $user_id, string $session_key ): int
OOB_Progress::update_step( int $flow_id, int $step_index, int $user_id, string $session_key ): void
OOB_Progress::complete( int $flow_id, int $user_id, string $session_key ): void
OOB_Progress::abandon( int $flow_id, int $user_id, string $session_key ): void
OOB_Progress::has_completed( int $flow_id, int $user_id ): bool
OOB_Progress::log_event( int $flow_id, string $event, int $step_index, ... ): void

OOB_Analytics

PHPOOB_Analytics::get_flow_stats( int $flow_id ): array
OOB_Analytics::get_dashboard_totals(): array
OOB_Analytics::get_dropoff_by_step( int $flow_id ): array
OOB_Analytics::get_ab_stats( int $flow_id ): array

OOB_Merge_Tags

PHPOOB_Merge_Tags::process( string $content, array $context = [] ): string
OOB_Merge_Tags::get_available_tags(): array

JavaScript API

JS// Programmatically launch a flow
OOBFrontend.launchFlow( flowId, displayStyle );

// Close a running flow
OOBFrontend.closeFlow( flowId );
17 · Database Schema

Database schema

oob_progress

ColumnTypeDescription
idBIGINT UNSIGNEDPrimary key
user_idBIGINT UNSIGNEDWordPress user ID; 0 for guests
flow_idBIGINT UNSIGNEDPost ID of the oo_flow CPT
variantVARCHAR(8)A or B (A/B tests)
step_indexSMALLINTCurrent step the user is on
statusVARCHAR(20)started, completed, or abandoned
session_keyVARCHAR(64)PHP session key for guest users
started_atDATETIMEUTC timestamp of flow start
updated_atDATETIMEUTC timestamp of last update
completed_atDATETIMEUTC timestamp of completion (NULL if incomplete)

Indexes: (user_id, flow_id), (flow_id, status)

oob_events

ColumnTypeDescription
idBIGINT UNSIGNEDPrimary key
user_idBIGINT UNSIGNEDWordPress user ID
flow_idBIGINT UNSIGNEDFlow post ID
step_indexSMALLINTStep the event occurred on
event_typeVARCHAR(30)start, step_view, step_complete, complete, skip, abandon
variantVARCHAR(8)A/B variant
session_keyVARCHAR(64)Guest session key
created_atDATETIMEUTC event timestamp

Indexes: (flow_id, event_type, created_at), (flow_id, step_index, event_type)

oob_flow_versions

Version snapshot per flow save. Restore via OOB_Versions::restore() or the AJAX endpoint oob_restore_version (Pro).

Columns: id, flow_id, version_number, steps_json, settings_json, saved_by, saved_at. Index (flow_id, version_number).

oob_checklists / oob_checklist_progress

Standalone frontend checklist widgets, separate from in-flow checklist steps. oob_checklists stores titles, items, and settings. oob_checklist_progress tracks per-user, per-item completion with a unique key on (checklist_id, user_id, item_index). Rendered in the page footer by OOB_Checklist::inject_widgets().

oob_survey_responses

NPS scores and survey answers. Columns: id, flow_id, step_index, user_id, session_key, question_key, response, score, created_at. Indexes on (flow_id, step_index) and (flow_id, question_key).

oob_webhook_log

Outgoing webhook deliveries with status code, response body, attempt count. Failed deliveries (non-2xx) are auto-retried at 5min, 15min, then 1hr (Pro: webhooks_advanced).

Custom post types

CPTDescription
oo_flowOnboarding flow. Meta: _oob_steps, _oob_settings, _oob_post_actions, _oob_variant_b (all JSON).
oo_checklistStandalone checklist widget configuration.
18 · REST / AJAX Endpoints

REST and AJAX endpoints

REST routes live under the oonboard/v1 namespace and require manage_options plus the rest_api Pro capability. AJAX endpoints registered via wp_ajax_* hooks require a valid nonce from the OOB JS object.

REST API · /wp-json/oonboard/v1/

MethodRouteDescription
GET/flowsList all flows with stats summary
POST/flowsCreate a new flow. Body: name, settings
GET/flows/{id}Read full flow with steps, settings, post_actions
PUT/flows/{id}Update name, status, steps, settings, post_actions, variant_b
DELETE/flows/{id}Delete a flow
GET/flows/{id}/analyticsPer-flow stats. Query: days (1 to 365)
POST/flows/{id}/triggerQueue a flow for a user. Body: user_id
POST/flows/{id}/resetReset progress for a user. Body: user_id
GET/progressPaginated progress list. Query: flow_id, status, per_page, page
DELETE/progress/{id}Delete a progress row

Frontend AJAX (public + logged-in)

ActionMethodDescription
oob_get_flow_initPOSTGet flow metadata and resume index. Params: flow_id
oob_get_stepPOSTFetch a step's rendered data. Params: flow_id, step_index
oob_complete_stepPOSTMark step complete, get next step index. Params: flow_id, step_index, quiz_answer (opt), form_data (opt)
oob_skip_stepPOSTSkip a step, advance to next
oob_abandon_flowPOSTMark flow as abandoned
oob_checklist_markPOSTToggle a checklist widget item complete

Admin AJAX (requires manage_options)

ActionDescription
oob_create_flowCreate a new flow
oob_save_flowSave steps, settings, and post-actions
oob_delete_flowDelete a flow
oob_duplicate_flowDuplicate a flow
oob_save_settingsSave global plugin settings
oob_get_flow_dataGet full flow data as JSON
oob_delete_progressDelete a progress record by ID
oob_create_flow_from_templateCreate a flow from a packaged template
oob_import_flowImport a flow from a JSON export
oob_export_flowExport a flow as JSON
oob_restore_versionRestore a prior flow version (Pro)
oob_create_checklistCreate a standalone checklist
oob_save_checklistSave a checklist
oob_delete_checklistDelete a checklist
oob_toggle_checklist_statusPublish or unpublish a checklist
oob_preview_stepRender a single step for live preview in the builder
19 · Hooks & Filters

Hooks & filters

Actions

HookArgumentsDescription
oob_flow_completed$flow_id, $user_id, $actionsFired when a user completes a flow
oob_flow_started$flow_id, $user_idAvailable for custom extension on flow start
PHPadd_action('oob_flow_completed', function($flow_id, $user_id, $actions) {
    if ($flow_id === 42) {
        update_user_meta($user_id, 'onboarding_complete', '1');
    }
}, 10, 3);

Filters

FilterArgumentsDescription
oob_register_skins$skinsAdd or modify visual skins available to flows
oob_available_merge_tags$tagsAdd custom merge tag definitions to the registry
oob_condition_rule$result, $rule, $user_id, $contextImplement custom condition rule fields
oob_is_pro$is_proOverride the Pro license check (testing / dev environments)
oob_can_{feature}$enabledPer-capability override; e.g. oob_can_webhooks_advanced
orravo_register_product / orravo_mini_admin_pages$products / $pagesMini-Core hooks for Orravo Core menu integration
20 · FAQ

Frequently asked questions

Can guests (non-logged-in users) use OOnboard flows?
Yes. For guest users, OOnboard uses PHP session keys to track progress. Guest data is stored in {prefix}oob_progress with user_id = 0 and a session_key.
Does the plugin slow down my site?
OOnboard's frontend assets are registered but not enqueued unless a flow shortcode is present on the page, or Load assets globally is enabled in Settings. The AJAX calls are lightweight and cached at the WP object cache layer where available.
How do I show a flow to returning users again?
Call OOB_Progress::reset($flow_id, $user_id) programmatically, or provide a restart button using [oonboard_trigger].
Can I use multiple flows on the same page?
Yes. Each flow instance tracks its own state independently. You can embed multiple [oonboard] shortcodes or trigger buttons on the same page.
What happens to flow data when I uninstall the plugin?
OOB_DB::uninstall() drops all seven OOnboard tables (oob_progress, oob_events, oob_flow_versions, oob_checklists, oob_checklist_progress, oob_survey_responses, oob_webhook_log), deletes every oo_flow and oo_checklist post, and removes OOnboard options. This is permanent.
Can I reset analytics for a flow?
Not yet from the admin UI. Use DELETE FROM {prefix}oob_events WHERE flow_id = X and DELETE FROM {prefix}oob_progress WHERE flow_id = X directly in your database.
How does A/B testing work for returning users?
A user's variant assignment is stored in the variant column of {prefix}oob_progress. Once assigned, they always see the same variant. New users are randomly assigned 50/50.
Does OOnboard integrate with WooCommerce?
Yes, natively. OOnboard registers five WooCommerce trigger types (first purchase, any purchase, specific product, thankyou page, account dashboard) plus two Woo-aware step types (woo_product, woo_coupon). The coupon step auto-generates a unique percent or fixed coupon with configurable prefix and expiry days.
21 · Changelog

What's shipped

v2.0.0 Major release · 2026-05-03
  • 15 step types (added tour_step, nps, survey, woo_product, woo_coupon)
  • 8 visual skins (atelier, aurora, brutal, neon arcade, linear, stripe light, apple os, notion) registered via filter
  • Modal, full-page, slide-in, embedded display styles
  • Progress bar, step numbers, dots, percentage, none
  • Audience targeting with and / or rules across role, meta, device, registration date, prior completion
  • Per-step conditional gating with skip-or-route fallback
  • Quiz branching via next_step_index
  • NPS step with detractor / passive / promoter routing
  • Multi-question survey step (text, textarea, rating, stars, choices)
  • Resume from last position; anonymous progress via session key
  • Auto-launch triggers: manual, first-login, page-load, time-based, plus 5 WooCommerce triggers
  • User progress table with status and step tracking
  • Drop-off analysis per step with color coding
  • Daily completions chart (30-day canvas)
  • A/B flow testing with variant assignment, comparison, and winner detection
  • Post-flow actions: redirect, success message, role, XP, badge, OMailer subscribe, webhook
  • HMAC-SHA256 signed webhooks with auto-retry (Pro)
  • Merge tags: {{user_name}}, {{site_name}}, Woo totals, custom via oob_merge_tag_context
  • Shortcodes: [oonboard id], [oonboard_trigger id]
  • Gutenberg block with server-side rendering
  • OEngage (XP and badges) and OMailer (list subscribe) integration hooks
  • WooCommerce step types and triggers
  • Standalone checklist widget (frontend, footer-injected)
  • Flow versioning with rollback (Pro)
  • Import / export flows as JSON
  • Goal tracking with conversion windows
  • Email notifications on complete or abandon (Pro)
  • REST API at /wp-json/oonboard/v1/ with 7 routes (Pro)
  • Auto-detects Orravo Core and nests under its menu via mini-core fallback
  • oob_flow_completed action plus oob_register_skins, oob_merge_tag_context, oob_step_html, oob_flow_settings filters for extensibility
✦ Need help?

Got a question about OOnboard?

Reach out directly. Kenneth replies within 24 hours.