Everything you need to
build converting funnels
Funnelium lets you create professional sales funnels β landing pages, sign-up forms, checkout pages, and more β directly inside your WordPress website. No coding needed.
What Funnelium does
Think of Funnelium as a guided path you build for your visitors β from first click to sign-up, purchase, or download. Here is everything it can do:
Landing Pages
Beautiful entry pages that introduce your offer and get visitors excited to take the next step.
Email Capture Forms
Collect visitor names and emails. Subscribers are automatically added to your MailerWave list.
Thank You Pages
Confirmation pages shown after someone subscribes. Include download links, WhatsApp groups, next steps.
Checkout Pages
Take payment directly inside your funnel using WooCommerce β no redirect to a generic cart page.
One-Click Upsells
After purchase, offer a special add-on. Customer accepts with one click β card already charged.
Abandoned Recovery Emails
Automatically email people who started signing up but didn’t finish β bring them back.
Analytics Dashboard
See how many people visit each page, how many sign up, and where they drop off.
Ad Tracking Pixels
Connect Facebook, Google Analytics 4, and TikTok pixels to track your paid traffic results.
Installing the plugin
Installation takes about 3 minutes. You only need access to your WordPress admin area.
Upload the plugin
In your WordPress dashboard, go to Plugins β Add New β Upload Plugin. Click Choose File, select the funnelium-plugin.zip file you downloaded, then click Install Now.
Activate it
Once uploaded, click Activate Plugin. Funnelium will set itself up automatically in the background.
One important step β save your permalinks
Go to Settings β Permalinks in your WordPress menu and click the Save Changes button β even without changing anything. This tells WordPress how to find your funnel pages. Skip this and your pages will show “404 Not Found”.
Add your MailerWave API key
Go to Funnelium β Settings in your WordPress sidebar. Paste your MailerWave API key in the field provided. You’ll find this in your MailerWave account under Settings β API Keys. Click Save.
Important: If your WordPress is set to use plain URLs (like yoursite.com/?p=123), Funnelium will not work. Go to Settings β Permalinks and choose Post name instead. This is a good practice anyway.
Building your first funnel
Let’s build a simple lead-generation funnel β a landing page, an email sign-up form, and a thank you page. This is the most common setup and takes about 10 minutes.
Create a new funnel
Click Funnelium in your WordPress sidebar, then click Funnels β New Funnel. Give it a name β something like “Free Guide Funnel”. Your funnel starts in Draft mode, which means visitors can’t see it yet while you’re building.
Add a Landing Page
Click + Add Step, choose Landing Page as the type, pick a design (we’ll talk about designs in the next section), give the page a name, and click Add. Funnelium creates the page instantly with a URL like yoursite.com/free-guide/.
Add an Opt-In Form page
Add another step, this time choosing Opt-In Form. After adding it, click Edit Settings on that step and paste your MailerWave List UID into the List UID field. This is the list new subscribers will be added to.
Add a Thank You page
Add a final step β Thank You. This is where visitors land after subscribing. You can add a download link, your WhatsApp group invite link, or anything else they need after signing up.
Edit each page to match your content
Click Edit Settings on each step. The full-screen editor opens β your actual page appears on the right, and all the settings are on the left. Change your headline, button text, colours, and everything else right there. More on this in the Editing your pages section.
Go live!
Back in the Funnel Editor, change the funnel status from Draft to Active and save. Your funnel is now publicly accessible. Copy the landing page URL and start sharing it!
While your funnel is in Draft, only you (as a logged-in admin) can see the pages. Your visitors will be sent to the homepage instead. This gives you time to perfect everything before revealing it to the world.
Page types explained
Each page in your funnel has a specific job. Here’s what each one is for and when to use it.
The first page visitors see. Its job is to grab attention, explain your offer in a compelling way, and get people to click through to the next step. No form here β just great copy and a clear button.
A simple page with a form asking for the visitor’s name and email. When they submit, they’re added to your MailerWave email list automatically and moved to the next step in your funnel.
Where visitors land after subscribing. Tell them what to do next β check their email, download their freebie, join your WhatsApp group, or watch a video. A good thank you page sets the tone for the relationship.
A payment page embedded inside your funnel design. Customers pay without being taken to a generic WooCommerce cart page. Keeps the experience clean and on-brand.
Shown right after a customer pays. Offer them something extra β a complementary product, an upgrade, more of what they just bought β at a special price. One click charges their card again. No re-entering payment details.
If a customer says no to your upsell, show them a cheaper alternative. It’s your last chance to make an additional sale before they leave. Same one-click experience.
Choosing a design
Funnelium comes with 18 ready-made designs (called templates). Pick one that fits your brand and audience β you can always change it later. All your text and settings carry over when you switch.
Available designs
Classic Hero
Dark background, bold headline, benefit list. Professional and trust-building.
All step typesMinimal
Clean white layout. No distractions β just the essentials. Works for any audience.
All step typesBold Dark
Black background, electric accent colour, large text. Grabs attention fast.
Landing Β· Opt-InNaija Market
Green and gold. Urgency-driven. Designed specifically for Nigerian audiences.
Landing Β· Opt-In Β· TYClean Light
Elegant serif font, generous whitespace. Suits coaching, courses, and professional services.
Landing Β· Opt-InVideo Hero
Your YouTube or Vimeo video plays front and centre. Perfect for video sales letters.
Landing onlyWhich one should I pick? If you’re targeting a Nigerian audience, start with Naija Market. For a professional or corporate feel, try Clean Light. For high-energy offers, go with Bold Dark. You can always switch in seconds from Edit Settings.
Create your own design
If you want a design that’s completely yours, create a PHP template file in your WordPress theme folder. Funnelium will automatically detect it and add it to the design picker. It won’t be overwritten when the plugin updates. Ask a developer to help with this if needed.
Editing your pages
Click Edit Settings on any step in your Funnel Editor to open the full-screen Live Editor. Your actual page appears on the right. Your settings are on the left. Everything you see is what your visitors will see.
Template Mode β editing a ready-made design
This is the default mode. Your page loads in the preview panel on the right:
Headlines, paragraphs, button labels, list items β click directly on them in the preview and start typing. Changes appear as you type. A purple dashed outline shows what’s editable when you hover.
Hover over a section background with a colour and an amber outline appears. Click it and a colour picker pops up β drag the picker to preview live, then click Apply to keep the colour.
A green outline appears on images when you hover. Click and paste a new image URL to swap it out instantly.
Headline, subheadline, badge text, button text, button colour, privacy note, urgency bar text, video URL, social proof badges, WhatsApp group link β all in labelled fields on the left. Changes sync live to the preview.
Change the Active Template dropdown to instantly swap to a different design. Save to confirm.
Press Ctrl + S (or β + S on Mac) at any time to save. The preview reloads with your saved changes. You’ll see a green “β Saved” confirmation at the top.
Viewport preview
Use the π₯ π± π² buttons in the preview toolbar to switch between desktop, tablet, and mobile views. Make sure your page looks good on all screen sizes before going live.
Editing body content
The main body content β longer paragraphs, bullet lists, embedded images, videos β is edited separately in the standard WordPress editor. Click Edit Body Content β (in the left panel) to open it. After saving there, click the π Reload button in the preview toolbar to see your changes.
Block Builder
Want to build a page from scratch exactly the way you want it? Switch to Block Builder mode using the button in the top bar of the editor. Drag blocks from the left panel onto your page and arrange them in any order.
Available blocks
Hero / Headline
A big bold section at the top of your page with a headline, subtext, and background colour.
Text
A block of regular paragraph text. Set the size, colour, and alignment.
Button
A clickable button. Set the text, link, colour, and size.
Image
Add a photo or graphic. Upload from your computer or paste a URL.
Video
Paste a YouTube or Vimeo link and it embeds automatically, full-width.
Opt-In Form
A name + email form that subscribes visitors to your MailerWave list.
Bullet List
A list of benefits or points. Choose your own emoji as the bullet icon.
Countdown Timer
Set a deadline date and time β a live countdown runs on your page to create urgency.
Testimonial
A quote from a happy customer with their name, role, and optional photo.
Trust Badges
A row of reassurance icons β “100% Free”, “Secure”, “Instant Access”, etc.
Divider
A horizontal line to separate sections. Set the colour and thickness.
Spacer
Invisible breathing room between sections. Set the height in pixels.
How to use the Block Builder
Drag a block from the left panel
Hold and drag any block type from the left list. Blue drop zones appear between existing blocks showing you where it will land. Release to drop it.
Click a block to edit its settings
Click any block on the canvas and its settings appear in the right panel. Everything is labelled clearly.
Reorder with drag or the arrow buttons
Drag blocks up or down on the canvas. Or use the β β buttons in the block’s toolbar to move it one position at a time.
Duplicate or delete blocks
Each block shows a small toolbar when selected: β§ to duplicate it, π to delete it (you’ll be asked to confirm).
Save your page
Click πΎ Save or press Ctrl+S. Your page goes live with the block layout instead of the template design.
Template Mode and Block Builder are separate. If you build a page in Block Builder, that replaces the template design entirely. To go back to using a template, switch back to Template Mode and save β the block layout will be kept but the template will render instead.
Connecting MailerWave
Funnelium was built for MailerWave. When someone submits your opt-in form, they are instantly added to the email list you choose in MailerWave β no manual importing needed.
Quick setup
Get your API key from MailerWave
Log into app.mailerwave.com. Go to Settings β API Keys. Copy your API key.
Paste it into Funnelium
In WordPress, go to Funnelium β Settings. Paste the key into the API Key field. Click Test Connection to make sure it works, then Save.
Find your List UID
In MailerWave, go to Lists. Find the list you want subscribers added to. Look in the URL β there’s an alphanumeric code like abc123xyz. That’s your List UID. Copy it.
Add it to your Opt-In step
Open the editor for your Opt-In page. In the Form section of the left panel, paste the List UID into the MailerWave List UID field. Save. Done β new subscribers will now go straight into that list.
Selling products
Want to sell something inside your funnel? Funnelium works with WooCommerce β the free WordPress shop plugin β to handle payments. You don’t need WooCommerce at all if you’re just collecting emails.
What you need WooCommerce for
| Feature | Without WooCommerce | With WooCommerce |
|---|---|---|
| Landing pages | β Works great | β Works great |
| Email sign-up forms | β Works great | β Works great |
| Thank you pages | β Works great | β Works great |
| Recovery emails | β Emails work | β Emails + cart restore |
| Checkout / payment | β Not available | β Full support |
| One-click upsells | β Not available | β Full support |
| Order bumps at checkout | β Not available | β Full support |
Recommended payment options for Nigeria
Best option for Nigerian businesses. Accepts cards, bank transfer, and USSD. Install the free Paystack WooCommerce plugin. Enable card tokenisation in Paystack settings to unlock one-click upsells.
Good alternative. Supports more African payment methods including mobile money. Install the Flutterwave WooCommerce plugin.
Works for standard purchases but cannot support one-click upsells β because there’s no saved card to charge again. Customers will see the upsell page but won’t be able to accept with one click.
Recovery emails
When someone fills in your opt-in form but doesn’t finish the process, Funnelium can automatically send them up to 3 follow-up emails to bring them back. This is one of the highest-ROI features in the plugin.
How to turn it on
Enable it in Settings
Go to Funnelium β Settings β General. Tick Enable Abandonment Recovery. Set the delay β this is how long Funnelium waits before sending the first email. 60 minutes is a good starting point.
Write your 3 recovery emails in MailerWave
In your MailerWave account, create 3 transactional email templates. Email 1 should be a friendly reminder. Email 2 (sent 24 hours later) should highlight the value. Email 3 (sent 48 hours later) should create urgency. Each email must include a recovery link button β use the merge variable {{ recovery_url }} as the button URL.
Add the template IDs to Funnelium
In MailerWave, each email template has a numeric ID. Copy each one and paste them into the three Abandonment Template fields in Funnelium β Settings. Save.
If you don’t set up MailerWave templates, Funnelium will still send basic plain-text recovery emails using your WordPress hosting β so the feature works even before you create the templates. Add the templates later to make the emails look professional.
Viewing your recovery stats
Go to Funnelium β Abandonment to see a list of everyone who started but didn’t finish, along with their email addresses and whether they were recovered.
Tracking your results
Funnelium automatically tracks how your funnel is performing so you know exactly what’s working and what to improve.
What gets tracked
How many people visit each page in your funnel.
How many people fill in and submit your email form.
How many people complete a WooCommerce payment through your funnel (if you’re selling).
View all this in Funnelium β Analytics. Select your funnel and choose a date range. You’ll see the total numbers for each page and a drop-off chart showing where people are leaving your funnel β that’s where you focus your improvements.
Connecting ad tracking pixels
If you’re running paid ads on Facebook, Google, or TikTok, you can connect your tracking pixels so your ad platforms know which ads are actually driving results.
Go to Funnelium β Settings β Tracking Pixels and paste your pixel IDs:
| Platform | What to paste | Where to find it |
|---|---|---|
| Facebook / Meta | Your Pixel ID (a 15-digit number) | Meta Business Suite β Events Manager |
| Google Analytics 4 | Your Measurement ID (starts with G-) | Google Analytics β Admin β Data Streams |
| TikTok | Your Pixel ID | TikTok Ads Manager β Assets β Events |
The pixel codes fire automatically on every page in your funnels. You don’t need to add them to each page separately.
Common questions
Quick answers to the questions we hear most often.
/contact/), the WordPress page will always win and your funnel step won’t show. Choose a different slug for your funnel step or delete the conflicting WordPress page.Troubleshooting
Something not working? Check here first.
Go to Settings β Permalinks β Save Changes. Also check your permalink structure isn’t set to “Plain”.
A WordPress page or post exists at the same URL slug. Either rename your funnel step to a different slug or delete the conflicting WordPress page.
This means the funnel wrapper didn’t load. Check that the funnel is Active (not Draft), and that the step’s page_id is correctly assigned. Try deactivating and reactivating the plugin.
You’re not logged into WordPress in the same browser. Log in and reload the editor. Also check the funnel step page is published.
This was caused by a PHP session conflict in earlier versions β it’s fixed in the current version. Update to the latest version of the plugin.
Check your browser console (F12) for errors. Make sure you’re clicking Save or pressing Ctrl+S. If the save button spins indefinitely, your server may have a timeout issue β contact your hosting provider.
Check your API key in Funnelium β Settings β click Test Connection. Also confirm you’ve entered the List UID (not the list ID number) in your opt-in step settings.
Your API key is probably wrong. Copy it fresh from MailerWave β Settings β API Keys. Make sure there are no extra spaces when pasting.
In MailerWave, go to Lists and click on your list. Look at the URL in your browser β the UID is the alphanumeric code in the URL, not the name of the list.
WordPress sends emails on a timer that only runs when someone visits your site. On quiet sites, emails can be delayed. For testing, set the delay to 1 minute in Settings and visit your site a few minutes after the test sign-up.
You haven’t added MailerWave template IDs yet. The plain emails are a fallback. Create your templates in MailerWave and add the IDs to Funnelium β Settings.
Make sure you’ve added the WooCommerce recovery hook to your theme’s functions.php as shown in the developer reference section. Without it, purchases don’t automatically mark records as recovered.
Keyboard shortcuts
Quick actions available inside the full-screen Live Editor.
The sections below are for developers and technically advanced users. Average users can ignore everything from here down.
System requirements
| Requirement | Minimum | Recommended |
|---|---|---|
| WordPress | 5.8 | 6.4+ |
| PHP | 7.4 | 8.1+ |
| MySQL / MariaDB | 5.6 / 10.0 | 8.0+ / 10.5+ |
| WooCommerce (optional) | 6.0 | Latest stable |
| Permalink structure | Any non-Plain | Post name (/slug/) |
URL routing architecture
The fn_step CPT is registered with rewrite => false. Routing is handled via the request filter in Funnelium_CPT::intercept_step_request(). No rewrite rules are written to the database. The filter checks for an existing WP page/post at the slug first (giving them priority), then queries wp_posts for a matching fn_step by post_name. If found, it rewrites query vars to ['post_type'=>'fn_step','p'=>$ID].
The post_type_link filter in Funnelium_Funnel::clean_step_permalink() ensures get_permalink() for fn_step posts returns the clean root URL.
Hooks & Filters
Actions
// Fires after a step is fully loaded
add_action( 'funnelium_step_loaded', function( $step, $funnel ){}, 10, 2 );
// Fires after a successful opt-in submission
add_action( 'funnelium_optin_success', function( $email, $first_name, $funnel_id ){}, 10, 3 );
// Fires before a template file is included
add_action( 'funnelium_before_render_template', function( $path, $step_type, $slug ){}, 10, 3 );PHPFilters
// Modify step settings before template renders
add_filter( 'funnelium_step_settings', function( $settings, $step_type, $post_id ){
return $settings;
}, 10, 3 );
// Override the resolved template file path
add_filter( 'funnelium_template_path', function( $path, $step_type, $slug ){
return $path;
}, 10, 3 );
// Override the redirect URL after a successful opt-in
add_filter( 'funnelium_optin_redirect', function( $url, $email, $funnel_id ){
return $url;
}, 10, 3 );PHPDatabase tables
7 tables created on activation. All prefixed with your WordPress table prefix (default: wp_).
| Table | What it stores |
|---|---|
fn_funnels | Funnel name, status, timestamps |
fn_funnel_steps | Step type, template, sort order, settings JSON (including builder_layout), linked wp_posts ID |
fn_analytics | View / optin / purchase events with timestamps and session hashes |
fn_abandonment | Captured emails, recovery tokens, email sent flags, recovered status, cart data |
fn_order_bumps | WooCommerce order bump configuration per checkout step |
fn_upsell_offers | Upsell / downsell offer configuration, accept/decline routing |
fn_ab_tests | A/B test definitions (reserved for future use) |
AJAX API quick reference
All admin endpoints require nonce: fn_nonce. All return standard WP JSON.
| Action | Auth | Description |
|---|---|---|
fn_save_funnel | Admin | Create / update a funnel |
fn_save_step | Admin | Create a new step |
fn_delete_step | Admin | Trash a step and its WP page |
fn_save_step_settings | Admin | Save template settings for a step |
fn_save_builder_layout | Admin | Save block builder JSON layout |
fn_load_builder_layout | Admin | Fetch saved block layout |
fn_upload_image | Admin | Upload image to WP media library |
fn_reorder_steps | Admin | Update step sort order |
fn_optin_submit | Public | Handle opt-in form; subscribe to MailerWave; return redirect URL |
fn_accept_upsell | Public | Accept one-click upsell; charge saved WC token |
fn_decline_upsell | Public | Decline upsell; redirect to decline step |
fn_capture_checkout_email | Public | Capture billing email on checkout page for abandonment tracking |
Building a custom template
Create a file at your-theme/funnelium/{step-type}/your-template-name.php. It will auto-appear in the template dropdown. The funnel wrapper handles the HTML shell β your file only outputs the body content.
// your-theme/funnelium/landing/my-template.php
<?php
defined( 'ABSPATH' ) || exit;
$step = Funnelium_Funnel::$active_step;
$settings = $step['settings'] ?? [];
// Read settings with sensible fallbacks
global $post;
$headline = $settings['headline'] ?? get_the_title( $post );
$cta_text = $settings['cta_text'] ?? 'Get Started β';
// Auto-get the next step URL
$steps = Funnelium_Funnel::get_funnel_steps( $step['funnel_id'] );
$cta_url = '#';
foreach ( $steps as $s ) {
if ( (int)$s->page_id === (int)$step['post_id'] ) {
$cta_url = Funnelium_Funnel::get_next_step_url( $step['funnel_id'], $s->sort_order ) ?: '#';
break;
}
}
?>
<div class="my-template">
<h1><?php echo wp_kses_post( $headline ); ?></h1>
<a href="<?php echo esc_url( $cta_url ); ?>"><?php echo esc_html( $cta_text ); ?></a>
</div>PHP