The LifterLMS Pricing Table: Block, Shortcode and Layouts

How the LifterLMS pricing table decides what to show, how to place it with the Pricing Table block or shortcode, how to structure plans that convert, and how to build multi-plan and multi-product layouts.

  • Add as a preferred source on Google
Illustration for “The LifterLMS Pricing Table: Block, Shortcode and Layouts”

The 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.

What the LifterLMS pricing table shows

Each access plan on a course or membership becomes a card in the table. From top to bottom, a card contains:

  1. A highlight banner, if the plan's Visibility is set to Featured.
  2. The Plan Title.
  3. The price, including sale price and billing frequency for recurring plans.
  4. Restrictions, such as a note that the plan is for members of a particular membership.
  5. The Plan Description, typically a short list of benefits.
  6. Trial details for plans with a trial.
  7. The button, using the plan's Enroll Button Text.

Plans set to Hidden are left out of the table, though their checkout links still work. A product can have six plans by default.

Column rules

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.

When the pricing table does not appear

A missing pricing table is one of the most common support questions, and it is usually working as designed:

  • The visitor is already enrolled. Enrolled students do not see the table for that product.
  • Enrollment is closed or the course is full. If the course has an enrollment period that has not started or has ended, or has reached its capacity, the table is replaced by the corresponding message you set in the course options.
  • No payment gateway is enabled. Paid plans need an active gateway. Without one, only free plans are shown, and if there are none, there is no table.
  • All plans are hidden, or the product has no plans at all.

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.

Adding a pricing table with the block

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:

  1. Insert the Pricing Table block from the LifterLMS Blocks category.
  2. In the block settings, choose whether you are showing a course or a membership, then select it. The searchable course and membership selection was added in LifterLMS 10.1.
  3. Optionally set the block to wide or full alignment for three-column tables.
  4. Optionally use Enrollment Visibility to show the block only to non-enrolled users or visitors.

The rest of the LifterLMS blocks are covered in our LifterLMS blocks guide.

Using the pricing table shortcode

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.

Designing plans that convert

The table only presents your offer. These choices in the plans themselves make the biggest difference.

Keep it to two or three choices

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.

Feature the plan you want chosen

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.

Write titles and descriptions for scanning

  • Titles that describe the choice: "Pay in full", "3 monthly payments", "Course + coaching".
  • Three to five short bullets in the description, aligned across plans so differences stand out.
  • Button text that says what happens: "Start now", "Join the cohort", "Start free trial". Avoid a generic "Buy" on every card.

Use pricing features deliberately

  • Payment plans show the per-payment price, which lowers the headline number. Show the total in the description so nobody feels misled.
  • Trials are for recurring plans and appear in the card footer.
  • Sales show the regular price struck through. On recurring plans, buyers keep the sale price for the life of the subscription, as the LifterLMS access plan options documentation explains, so do not use a sale where you mean an introductory first month.

For the strategy behind the numbers, see how to price an online course in LifterLMS.

Multi-plan and multi-product layouts

The built-in table compares the plans of one product. Sales pages often need more.

Course versus membership

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.

A comparison table with feature rows

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.

Different prices for different audiences

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.

Customizing the table (for developers)

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.

Common mistakes

  • Testing while enrolled and concluding the table is broken.
  • No gateway enabled on a new site, so paid plans silently disappear.
  • Treating Hidden as private. Hidden plans are only left out of the table; their checkout URL works for anyone who has it.
  • Two tables on one page because the course template already had one.
  • Inconsistent descriptions across plans, which makes comparison hard.
  • Too many plans. Choice overload costs sales.

Frequently asked questions

How do I show the pricing table on a different page?

Add the Pricing Table block and select the course or membership, or use [lifterlms_pricing_table product="ID"].

Why does my pricing table not show?

Usually because you are enrolled, enrollment is closed, the course is full, no gateway is enabled for paid plans, or all plans are hidden.

Can I show plans from several courses in one table?

Not in one built-in table. Use columns or a comparison table with Access Plan Buttons for each product.

How many access plans can a course have?

Six by default. Developers can change the limit with the llms_get_product_access_plan_limit filter.

What to do next

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.

Add LifterLMS Expert to your preferred sources

Add lifterlmsexpert.com as a preferred source on Google, or open this article in your AI assistant to use it as a source.

  • Add as a preferred source on Google
Free consultation

Prefer expert help over DIY?

Skip the trial and error. Get specialist LifterLMS help and ship faster.

Talk to a LifterLMS Expert Explore our services

Replies within one business day