LifterLMS Blocks: A Complete Guide to the Block Editor
Every LifterLMS block in the WordPress block editor, what each one shows, where it works, how enrollment visibility controls work, and practical…
Read articleThe pricing table is where a visitor decides. In LifterLMS it is generated from a course's or membership's access plans, so most of the work is in how you set up those plans, and where and how you display them.
This tutorial covers the LifterLMS pricing table in detail: what it shows and when it hides, how to place it anywhere with the Pricing Table block or the [lifterlms_pricing_table] shortcode, how to arrange plans so the right one gets chosen, and how to build layouts that compare several products. It is for course owners and site builders, and every label and rule was checked against the LifterLMS 10.3 source.
If you are still deciding what to sell, start with LifterLMS memberships and access plans explained, then come back here.
Each access plan on a course or membership becomes a card in the table. From top to bottom, a card contains:
Plans set to Hidden are left out of the table, though their checkout links still work. A product can have six plans by default.
Since LifterLMS 10.1 the table shows at most three plans per row. With exactly four plans it uses two columns, giving two rows of two instead of three plus a lonely fourth. One plan fills the row.
A missing pricing table is one of the most common support questions, and it is usually working as designed:
Test as a logged-out visitor in a private window. As an enrolled admin, you will not see the table on the front end even though it is there for everyone else. In the block editor, the Pricing Table block always shows a preview, so you can design it while enrolled.
On course and membership pages built in the block editor, a Pricing Table block is included in the default layout. To add one anywhere else, such as a custom sales page or your home page:
The rest of the LifterLMS blocks are covered in our LifterLMS blocks guide.
Where blocks are not available, for example in a page builder text module or a classic widget, use the shortcode:
[lifterlms_pricing_table product="123"]
Replace 123 with the course or membership ID, shown in the Course ID column on the Courses screen. On a course or membership page itself you can leave out product and it uses the current one. The same rules apply as for the block: no table for enrolled students, closed courses or plans with no gateway.
For a single button rather than a whole table, use the access plan button shortcode with the plan's ID:
[lifterlms_access_plan_button id="456" size="large" type="primary"]Join the spring cohort[/lifterlms_access_plan_button]
size accepts small or large, type accepts primary, secondary, action or danger, and classes adds your own CSS classes. The text between the tags replaces the plan's button text. The block version is the Access Plan Button block. Elementor and Beaver Builder users get pricing table widgets or modules from LifterLMS as well.
The table only presents your offer. These choices in the plans themselves make the biggest difference.
Every extra plan adds thinking time. A common, effective set is pay in full, a payment plan, and possibly a premium tier with coaching or a community. If you need more variants, such as a team price or a returning-student discount, make them hidden or members-only plans and link to them directly.
Set one plan's Visibility to Featured. In a three-plan table, put it in the middle by ordering plans in the Access Plans box, and make it the one with the best value for both of you.
For the strategy behind the numbers, see how to price an online course in LifterLMS.
The built-in table compares the plans of one product. Sales pages often need more.
To show "this course" next to "all-access membership", use a Columns block. Put a short heading and benefit list in each column and an Access Plan Button for the relevant plan at the bottom. This gives you control over alignment that two separate pricing tables cannot.
For tier comparisons with ticks and crosses, build a normal table with the core Table block, then place an Access Plan Button for each tier under its column. Set the underlying plans to Hidden if you do not want them repeated in the automatic table on the course page.
Give the course a public plan and a members-only plan. Members see the members-only plan as available; non-members see it with a link to the membership they need. Combined with Enrollment Visibility, you can show a separate "Members save 30%" message to people who are not members yet.
The cards are built from template parts in templates/product/, which you can override in your theme, and from two actions you can hook into without overriding anything. Note the hook names: they really are spelled llms_acces_plan_content and llms_acces_plan_footer, with one "s" in "acces". Core adds the title at priority 10, pricing at 20, restrictions at 30 and the description at 40 on the content hook, and the trial at 10 and the button at 20 on the footer hook.
This snippet adds a guarantee line under the button on paid plans:
<?php
add_action( 'llms_acces_plan_footer', 'llmsx_plan_guarantee', 30 );
function llmsx_plan_guarantee( $plan ) {
if ( $plan->is_free() ) {
return;
}
echo '<p class="llmsx-plan-guarantee">' . esc_html__( '30-day money-back guarantee', 'llmsx' ) . '</p>';
}
Two filters are also useful. llms_get_product_pricing_table_columns_count changes the number of columns, and llms_get_product_access_plan_limit changes the six-plan limit, though more than six plans is rarely a good idea. Keep customizations in a small plugin, as described in how to customize LifterLMS without breaking updates.
Add the Pricing Table block and select the course or membership, or use [lifterlms_pricing_table product="ID"].
Usually because you are enrolled, enrollment is closed, the course is full, no gateway is enabled for paid plans, or all plans are hidden.
Not in one built-in table. Use columns or a comparison table with Access Plan Buttons for each product.
Six by default. Developers can change the limit with the llms_get_product_access_plan_limit filter.
Open your best-selling course in a private window and look at the table as a buyer would: are there more than three choices, is one featured, and do the descriptions line up? Fix those three things first, then test a purchase on every plan.
If your offer needs more than the built-in table can show, such as tiered comparisons, upgrade paths or region-specific pricing, our LifterLMS customization team builds sales pages and pricing logic that stay update-safe. Share your current pricing page and we will suggest improvements.
Every LifterLMS block in the WordPress block editor, what each one shows, where it works, how enrollment visibility controls work, and practical…
Read article
How to export a LifterLMS course to a JSON file, import it on another site, clone a course in one click, and reuse lessons with Add Existing Lesson…
Read article
How the LifterLMS forms editor works: the three core forms, which fields are required, editing fields with blocks, visibility and reusable fields…
Read articleSkip the trial and error. Get specialist LifterLMS help and ship faster.