Template Overrides
Override any WB Listora frontend or email template from your theme - WooCommerce-style. Drop a file at {theme}/wb-listora/{template-name}.php and your version wins. Works for block templates (cards, detail, dashboard), email templates (15 Free + 13 Pro), and the full-width page-template the plugin registers for its shortcode pages.
What it is
Section titled “What it is”Every template the plugin renders goes through wb_listora_locate_template() - defined in wb-listora/includes/class-template-helpers.php:23. The locator walks three paths in order:
- Child theme:
{stylesheet}/wb-listora/{name}.php - Parent theme:
{template}/wb-listora/{name}.php - Plugin default:
wb-listora/templates/{name}.php
The first hit wins. This is the same pattern WooCommerce, Easy Digital Downloads, and BuddyPress use - battle-tested, expected behaviour for WP devs.
Hookable: apply_filters( 'wb_listora_locate_template', $template, $template_name, $template_path ) lets you override the lookup result entirely (e.g. serve a tenant-specific template in a multisite).
Templates that respect the locator:
Block templates (frontend listing UI)
Section titled “Block templates (frontend listing UI)”templates/blocks/listing-card/card.phptemplates/blocks/listing-card/card-image.phptemplates/blocks/listing-card/card-meta.phptemplates/blocks/listing-card/card-actions.phptemplates/blocks/listing-detail/hero.phptemplates/blocks/listing-detail/sidebar.phptemplates/blocks/listing-detail/tabs.phptemplates/blocks/listing-detail/review-card.phptemplates/blocks/listing-grid/grid.phptemplates/blocks/listing-grid/toolbar.phptemplates/blocks/listing-grid/pagination.phptemplates/blocks/listing-search/search.phptemplates/blocks/listing-search/search-bar.phptemplates/blocks/listing-search/filters.phptemplates/blocks/listing-map/map.phptemplates/blocks/listing-submission/submission.phptemplates/blocks/listing-submission/step-type.phptemplates/blocks/listing-submission/step-basic.phptemplates/blocks/listing-submission/step-details.phptemplates/blocks/listing-submission/step-media.phptemplates/blocks/listing-submission/step-preview.phptemplates/blocks/listing-submission/step-duplicate-review.phptemplates/blocks/listing-submission/stepper.phptemplates/blocks/listing-submission/navigation.phptemplates/blocks/listing-reviews/reviews.phptemplates/blocks/listing-reviews/review-card.phptemplates/blocks/listing-categories/categories.phptemplates/blocks/listing-categories/category-card.phptemplates/blocks/listing-featured/featured.phptemplates/blocks/listing-calendar/calendar.phptemplates/blocks/user-dashboard/dashboard.phptemplates/blocks/user-dashboard/tab-listings.phptemplates/blocks/user-dashboard/tab-reviews.phptemplates/blocks/user-dashboard/tab-favorites.phptemplates/blocks/user-dashboard/tab-claims.phptemplates/blocks/user-dashboard/tab-credits.phptemplates/blocks/user-dashboard/tab-profile.phpSingle-listing + page templates
Section titled “Single-listing + page templates”templates/single-listora_listing.phptemplates/template-listora-full-width.phpEmail templates (15 Free)
Section titled “Email templates (15 Free)”templates/emails/parts/header.phptemplates/emails/parts/footer.phptemplates/emails/claim-approved.phptemplates/emails/claim-rejected.phptemplates/emails/claim-submitted.phptemplates/emails/draft-reminder.phptemplates/emails/listing-approved.phptemplates/emails/listing-expired.phptemplates/emails/listing-expiring-soon.phptemplates/emails/listing-pending-admin.phptemplates/emails/listing-rejected.phptemplates/emails/listing-renewed.phptemplates/emails/listing-submitted.phptemplates/emails/listing-verify-email.phptemplates/emails/review-helpful.phptemplates/emails/review-received.phptemplates/emails/review-reply.phpPro templates (13)
Section titled “Pro templates (13)”Pro templates live in wb-listora-pro/templates/ but use the same locator - overrides go in the same {theme}/wb-listora/ folder:
templates/blocks/comparison/comparison.phptemplates/blocks/credit-purchase/credit-purchase.phptemplates/blocks/needs-grid/needs-grid.phptemplates/blocks/needs-grid/need-card.phptemplates/blocks/need-detail/need-detail.phptemplates/blocks/post-need/post-need.phptemplates/dashboard/tab-needs.phptemplates/single-listora_need.phptemplates/emails/digest.phptemplates/emails/lead-notification.phptemplates/emails/listing-paused.phptemplates/emails/listing-resumed.phptemplates/emails/moderator-reassigned.phptemplates/emails/need-*.phptemplates/emails/response-*.phptemplates/emails/saved-search-alert.phpHow you use it
Section titled “How you use it”Override a single template
Section titled “Override a single template”- Pick the template you want to change - e.g.
wb-listora/templates/blocks/listing-card/card.php. - Create the matching path in your theme:
wp-content/themes/{your-theme}/wb-listora/blocks/listing-card/card.php. - Copy the plugin file’s contents as your starting point.
- Edit. Save. The next request renders your version.
Variables available
Section titled “Variables available”Every template starts with a docblock listing the variables passed in ($id, $title, $listing_url, $colors, $variant, etc.). The plugin extracts $view_data into template scope, so:
<?phpdefined( 'ABSPATH' ) || exit;/*** @var int $id Listing ID.* @var string $title Sanitized title.* @var string $excerpt Trimmed excerpt.* @var array $type ['slug','name','color','icon','schema'].* @var bool $show_rating Block attribute.* …*/?><article class="listora-card listora-card--<?php echo esc_attr( $layout ); ?> listora-type--<?php echo esc_attr( $type['slug'] ); ?>"><!-- your override --></article>Every template ships with the variable docblock at the top - the contract is explicit, not implied.
Best practices
Section titled “Best practices”- Don’t fork the whole template if you only need to add one line. Use the action hooks fired around the template instead (
wb_listora_before_card,wb_listora_after_card_actions, etc.). See Hooks Reference. - Keep override files small. If your override is 90% identical to the plugin’s template, the override is a maintenance burden - fork only the specific section that differs.
- Track plugin updates. When the plugin updates a template significantly, your override might diverge. Diff your version vs the new plugin version on each release.
- Email templates: keep variable docblock. Lots of plugins forget to update email-template variables across versions; the docblock at the top of each email template is the contract - don’t strip it.
Settings & options
Section titled “Settings & options”| Filter / hook | Purpose |
|---|---|
wb_listora_locate_template (filter) |
Override the located template path. |
wb_listora_template_args (filter) |
Modify the $args array passed into the template (before extract()). |
wb_listora_get_template (action) |
Fires after a template is loaded; useful for instrumentation. |
For block-level extension without forking the template, see the per-block action hooks documented in Hooks Reference.
Related
Section titled “Related”- Hooks Reference (Actions & Filters) - extend without forking.
- Email Templates - the email-specific override pattern + variables.
- Gutenberg Blocks Overview - which templates each block uses.

