📄 Plugin Documentation

WebTend — Service Catalog Builder
for Elementor

Complete service catalog, pricing table builder, and inquiry system for agencies, consultants, SaaS businesses, and freelancers — zero SaaS dependencies, 100% GPL.

● GPL v2 Licensed ● WordPress 6.3+ ● Elementor Ready ● Gutenberg Blocks ● WooCommerce Optional ● Schema Markup
01 — Introduction

What is WebTend Service Catalog Builder?

WebTend Service Catalog Builder gives service-based businesses everything they need to showcase their offerings, present pricing plans, and capture qualified leads — all in one lightweight, self-hosted plugin. No SaaS subscriptions, no phone-home, no third-party dependencies beyond WordPress itself.

The plugin ships with a custom Services post type, a visual Pricing Table builder, an Inquiry Form with spam protection and email notifications, Gutenberg blocks, Elementor widgets, and shortcodes for any page builder.

🗂️
Services CPT
Custom Post Type with categories, tags, icon support (image / SVG / font class), gallery, features list, FAQ accordion, and related services.
Free
💰
Pricing Table Builder
Visual drag-and-drop plan builder with monthly/annual billing toggle, highlighted plan styling, feature comparison, and custom CTAs.
Free
📬
Service Inquiry Form
AJAX form with honeypot spam protection, budget range selector, email notifications with Reply-To, and full DB submission log.
Free
🔌
Gutenberg + Elementor
Native Gutenberg blocks and Elementor widgets for Services Grid, Pricing Table, and Inquiry Form. Shortcodes work with any page builder.
Free
🔍
SEO & Schema Markup
Automatic JSON-LD schema.org/Service and FAQPage markup. SEO-friendly customisable URL slugs per service.
Free
🛒
WooCommerce Integration
Optionally link any service to a WooCommerce product for live price display and a Buy button — activates only when WC is installed.
Free
🧩
Pattern Library
Three ready-made service page layouts (Corporate, Medical, Agency Grid) as block patterns, with one-click page creation for the Block Editor or Elementor.
Free
💬
Client Testimonials
Curated client quotes with photo, rating and related service. Grid, masonry or carousel, plus schema.org/Review markup.
Free
🟢
Availability Badge & CSV Export
Show “Accepting Clients”, “Limited Slots” and more on each service, and export inquiries to CSV in one click.
Free
wp-admin → Service Builder → Dashboard
Dashboard
All Services
Pricing Tables
Inquiries
Settings
Dashboard v1.0.6
🗂️
Services CPT
Custom post type with full meta
💰
Pricing Builder
Drag-and-drop plan builder
📬
Inquiries
3 new submissions
02 — Requirements

System Requirements

Service Catalog Builder is lightweight with minimal hard dependencies. Elementor and WooCommerce are both optional — the plugin fully works without them.

ComponentMinimumRecommended
WordPress6.37.1
PHP7.48.2+
MySQL / MariaDB5.6 / 10.08.0 / 10.6
ElementorOptional — Free or Pro (3.5+ for one-click layout import)Latest stable
WooCommerceOptional — any version8.0+
Browser (admin)Chrome 90+, Firefox 88+, Safari 14+Latest stable
🎨
Elementor
Free & Pro — optional
📦
Gutenberg Blocks
WordPress core, no plugin needed
🛒
WooCommerce
Optional product linking
🏗️
Classic & Block Themes
All theme types
🔄
WPML / Polylang
Translation ready
⚡
Any Page Builder
Via shortcodes
03 — Installation

Installation

Method A — WordPress Plugin Directory (Recommended)

1

Search in WordPress Admin

Go to Plugins → Add New and search for WebTend Service Catalog Builder or webtend-service-catalog-builder.

2

Install & Activate

Click Install Now on the plugin card, then click Activate. The plugin creates its database table and flushes rewrite rules on first activation.

3

Create Your First Service

Navigate to Service Builder → Add New Service in the admin menu to create your first service entry.

Method B — Manual Upload

1

Download & Upload

Download webtend-service-catalog-builder.zip from wordpress.org/plugins. Go to Plugins → Add New → Upload Plugin and install the ZIP.

2

Activate

Click Activate Plugin. You will see the Service Builder menu appear in your WordPress admin sidebar.

3

Re-save Permalinks

Go to Settings → Permalinks and click Save Changes to ensure service URLs work correctly.

💡
Template overrides Copy any file from plugins/webtend-service-catalog-builder/templates/ into {your-theme}/webtend-service-catalog-builder/ and edit freely. Your changes survive plugin updates.
04 — Quick Start

Quick Start

After activation you will find Service Builder in your WordPress admin menu. Follow this order to get your service catalog live in minutes.

  • Go to Service Builder → Add New Service and create your first service with a tagline, icon, and feature list
  • Go to Service Builder → Pricing Tables and build a pricing table with 2–3 plans using the visual builder
  • Attach the pricing table to your service in the Service Details meta box
  • Add the [wscb_services] shortcode (or the Gutenberg block) to any page to display the services grid
  • Embed [wscb_pricing_table id="X"] on your pricing page
  • Configure notification email in Service Builder → Settings → Inquiry Form
  • Shortcut: go to Service Builder → Pattern Library and click Create page to get a complete, ready-made service page (with optional sample services) in one click
✅
No WooCommerce? No problem. The plugin works completely independently of WooCommerce. The WooCommerce integration activates automatically only when WC is installed and active — you never need to configure it manually.
05 — Feature

Services Custom Post Type

The plugin registers a wscb_service Custom Post Type with full meta box support. Each service has its own URL (/services/web-design/), archive page, and single template — all overridable from your theme.

Service Meta Fields

FieldDescriptionExample
Short TaglineOne-line description shown on cards and schema markupProfessional web design for modern brands
Duration / Delivery TimeEstimated project timeline shown on the card2–4 weeks
Starting Price LabelDisplay price text — freeform, not connected to WooCommerce unless linkedFrom $299
CTA Button TextDefault: "Learn More". Overridable per-service or via shortcodeGet Started
CTA Button URLURL for the CTA — falls back to the service permalinkhttps://example.com/contact
Service IconImage upload, inline SVG code, or icon font class (e.g. dashicons-admin-site)SVG / image / font class
Feature ListRepeatable bullet rows with configurable icon style (check, star, bolt, etc.)Up to 4 shown on card
GalleryMulti-image gallery via WP Media Libraryportfolio shots, process images
FAQ AccordionRepeatable Q&A pairs — rendered as an accordion with FAQPage schemaHow long does it take? / 2–4 weeks
Related ServicesMulti-select of other services to display in the "You may also like" section—
Linked Pricing TableAttach a pricing table post to display on the single service pageID of wscb_pricing_table post
WooCommerce ProductLink to a WC product for live price + Buy button (optional)Product ID

Taxonomies

TaxonomySlugUsage
Service Categorywscb_service_catGroup services by type (Design, Development, Marketing, etc.)
Service Tagwscb_service_tagCross-cutting labels (e.g. "Fast turnaround", "Enterprise ready")
💡
SVG security All SVG code entered in the Service Icon field is run through the built-in WSCB_SVG_Sanitizer class before saving. This strips disallowed elements and attributes to prevent XSS.
06 — Feature

Pricing Table Builder

Create pricing plans with a visual drag-and-drop interface. Each pricing table is a separate post type (wscb_pricing_table) that can be embedded on any page and attached to any service.

Plan Builder Features

  • Drag-and-drop reordering of plans
  • Monthly / Annual billing toggle with automatic savings badge calculation
  • Mark any plan as "Highlighted / Recommended" — gets accent styling automatically
  • Per-plan feature list with tooltip-ready rows
  • Feature comparison table across plans
  • Custom CTA per plan: open a URL or trigger the inquiry form for that plan
wp-admin → Service Builder → Pricing Tables → Edit
Dashboard
All Services
Pricing Tables
Inquiries
Edit Pricing Table Web Design Plans
⠿
Starter
$299 / mo
⠿
Professional Recommended
$599 / mo
⠿
Enterprise
Custom pricing
07 — Feature

Service Inquiry Form

A fully self-hosted inquiry and lead capture form. Submissions are stored in a custom database table (wp_wscb_inquiries) and optionally emailed to your notification address. No third-party form plugins required.

Form Fields

FieldRequiredNotes
NameYesStored as submitted
EmailYesUsed as Reply-To in notification email
PhoneNoOptional contact number
Budget RangeNoDropdown — fixed ranges from Under $1k to $25k+
TimelineNoProject timeline selector — stored on submission and shown in admin Inquiries panel
MessageYesFree-text enquiry body
Service / PlanAutoPre-filled from service_id and plan_id shortcode attributes
HoneypotHiddenInvisible field — bots fill it, humans don't. Submissions with a value are silently discarded.
Frontend — [wscb_inquiry_form service_id="12" plan_id="pro"]
Get in touch about Web Design — Professional Plan
Jane Smith
jane@example.com
+1 555 000 1234
$1,000 – $5,000 ▾
ASAP — within 2 weeks ▾
Hi, I'd like to discuss a redesign for our company website...

Inquiries Admin Panel

All submissions appear under Service Builder → Inquiries with status tracking (New / Read). Opening an inquiry marks it as read, and you can filter the list by All, New or Read.

Exporting inquiries (CSV)

Click Export CSV on the Inquiries screen to download your inquiries as a spreadsheet. The export follows the filter you have selected, so choosing New exports only new inquiries.

  • Columns: ID, date, name, email, phone, service, plan, timeline, budget, message and status
  • Excel-friendly: UTF-8 with a byte-order mark, so accented and non-Latin characters open correctly
  • Safe: only administrators can export, the download link is nonce-protected, and values that start with =, +, - or @ are neutralised so spreadsheets cannot run them as formulas
  • Private: IP addresses are never included in the export
wp-admin → Service Builder → Inquiries
#NameServicePlanBudget / TimelineDateStatus
3Jane SmithWeb DesignProfessional$1k–$5k
ASAP
TodayNew
2Mark OwensSEO AuditStarterUnder $1k
1–3 months
YesterdayRead
1Lisa ChenBrandingEnterprise$10k+
—
2 days agoRead
⚠️
AJAX submission only The inquiry form submits via AJAX — there is no full page reload. Ensure your theme does not disable wp_footer(), as the plugin enqueues its scripts there. Classic themes and all tested modern themes work correctly.
08 — Feature

Display Options

The plugin offers three ways to embed content — use whichever fits your workflow.

Gutenberg Blocks

Search for "WebTend" in the Gutenberg block inserter to find three native blocks:

  • Services Grid — filterable by category/tag, configurable columns and display options
  • Pricing Table — select any saved pricing table to embed it
  • Inquiry Form — select a service and optionally pre-select a plan

Elementor Widgets

When Elementor is active, three widgets appear in the WebTend widget category:

  • Services Grid Widget — same options as the Gutenberg block with live Elementor preview
  • Pricing Table Widget — select table by ID, toggle billing switch visibility
  • Inquiry Form Widget — embed form with service and plan pre-selection
✅
Elementor is optional Elementor widgets are loaded lazily — only when Elementor fires its elementor/loaded action. If Elementor is not installed, no Elementor code runs at all.
09 — Feature

Pattern Library

Build a complete service page in one click. The Pattern Library ships three professionally structured layouts that use your own services, pricing tables and inquiry form, so the page is ready as soon as it is created.

LayoutBest forWhat is on the page
Corporate Service PageConsultancies, finance, IT and B2B firmsDark hero, stats strip, services grid, three-step process, call-to-action band and quote form
Medical Service PageClinics, dentists, therapy and wellness practicesHero with opening-hours card, trust badges, services grid, “why choose us” cards and appointment form
Agency Service GridDesign, development and marketing agenciesBold intro, tinted services grid, stats band, four-step process, call-to-action and project brief form

Option 1 — One-click page (recommended)

  • Go to Service Builder → Pattern Library
  • Choose a layout. Leave Add sample services if I have fewer than 3 ticked if you want the page to look complete straight away
  • Click Create page (Block Editor) or Create page (Elementor)
  • The page is created as a draft and opens in the editor — change the text, buttons and colours, then publish

Option 2 — Insert inside the block editor

Open any page, click the block inserter, choose Patterns → Service Catalog Builder and click a layout. This works in block themes (Site Editor) and classic themes.

🧩
Elementor import The Elementor button needs Elementor 3.5 or newer and is disabled otherwise. The page is built from native Elementor widgets plus the plugin’s own Services Grid and Inquiry Form widgets, using Flexbox Containers when your site has them enabled and classic Sections otherwise. On block themes the page uses the Elementor Canvas template; on classic themes it uses the Header & Footer layout.
💡
Sample services Sample services are only created when you have fewer than three published services, six per layout (matching the industry). They are normal services, so edit or delete them under Service Builder → All Services. The page’s buttons link to on-page anchors such as #services and #request-quote, which you can change.

Free and Pro

The three layouts above are included in the free plugin. The Pattern Library screen also shows a preview of additional layouts that are part of Service Catalog Builder Pro; these are previews only and nothing is locked or removed from your free layouts.

For developers

Add-ons can register their own layouts with the wscb_pattern_catalog filter and supply Elementor element trees with wscb_elementor_layout_elements. See Hooks & Filters.

10 — Feature

Client Testimonials

Show curated client quotes that you control. Testimonials are separate from visitor-submitted reviews, so only the quotes you add are published. Manage them under Service Builder → Testimonials.

Testimonial fields

FieldPurpose
Client name, job title, companyWho said it. Shown under the quote
Website URLOptional link to the client’s site
PhotoChosen from the media library. Initials are shown automatically if no photo is added
Star ratingOptional, 1–5 stars
Related serviceLets you show only the testimonials for one service
Featured & display orderPick which quotes appear in featured-only sliders and in what order

Showing testimonials

Shortcodes

[wscb_testimonials]


[wscb_testimonials layout="carousel" featured="yes"]


[wscb_testimonial_single id="42" style="quote"]
  • Layouts: grid, masonry or carousel (keyboard navigation, prev/next buttons, dots, autoplay that pauses on hover)
  • Pull-quote styles: card, quote or minimal
  • SEO: schema.org/Review markup is added to every testimonial for Google rich results (turn it off with show_schema="no")
  • Admin list: photo, client, rating, featured and related-service columns; rating and featured are sortable

All attributes are listed in the Shortcodes reference.

11 — Feature

Availability Badge

Tell visitors at a glance whether you are taking on work. Each service can show a coloured badge with a status dot.

StatusMeaning
Accepting ClientsYou are open for new work
Limited SlotsOnly a few places left
Fully BookedNo capacity right now
Coming SoonThe service is not live yet
By Referral OnlyYou only take clients on recommendation
  • Set the status in the Availability dropdown when editing a service. It appears on service cards and on the single service page
  • Place a badge anywhere with [wscb_availability service_id="X"] (defaults to the current service)
  • The status is added to the service’s JSON-LD as the schema.org availability property
  • Turn badges on or off for the whole site under Settings → Service Availability
12 — Feature

SEO & Schema Markup

Service Catalog Builder outputs structured data automatically on every single service page. No Yoast or RankMath required — though both are compatible.

schema.org/Service

Injected into <head> on single service pages as a application/ld+json script block.

JSON-LD — Single Service Page
{
  "@context":    "https://schema.org",
  "@type":       "Service",
  "name":        "Web Design",
  "description": "Professional web design for modern brands",
  "url":         "https://example.com/services/web-design/",
  "serviceType": "Design, Development",
  "provider": {
    "@type": "Organization",
    "name": "Your Agency",
    "url":  "https://example.com"
  },
  "offers": {
    "@type":       "Offer",
    "description": "From $299"
  }
}

FAQPage Schema

If a service has FAQ accordion entries, a FAQPage schema block is also injected automatically — no configuration needed.

JSON-LD — FAQPage (auto-generated from FAQ accordion)
{
  "@context":   "https://schema.org",
  "@type":      "FAQPage",
  "mainEntity": [
    {
      "@type":  "Question",
      "name":   "How long does the project take?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text":  "Typically 2–4 weeks depending on scope."
      }
    }
  ]
}
💡
Custom URL slug Change the URL base from /services/ to anything you like in Service Builder → Settings → General → Service URL Slug. After saving, go to Settings → Permalinks and click Save to flush rewrite rules.
13 — Feature

WooCommerce Integration

The WooCommerce integration is completely optional and activates automatically when WooCommerce is installed. No manual configuration is required to enable it.

  • Link any service to a WooCommerce product using the WooCommerce Link meta box on the service editor
  • The service card and single page display the product's live WooCommerce price automatically
  • A Buy button is shown alongside the regular CTA — clicking it adds the product to the WooCommerce cart
  • The integration registers a Service product type in the WC product editor, letting you mark products as services for organisation
ℹ️
Variable products When a linked WooCommerce product is variable, the Buy button links to the product page rather than adding directly to cart. Simple products add to cart directly from the service page.
14 — Reference

Shortcodes

All shortcodes work in any editor — Gutenberg classic block, Elementor HTML widget, WPBakery, Divi, or the Classic Editor.

[wscb_services]
Display all published services in a responsive grid. Filter by category or tag, control columns, ordering, and which elements show.
categorySlug of wscb_service_cat. Comma-separated for multiple. Default: all
tagSlug of wscb_service_tag. Comma-separated. Default: all
columns2, 3, or 4. Default: 3
limitMax services to show. Default: -1 (all)
orderbymenu_order | date | title. Default: menu_order
show_excerptyes | no — show tagline/excerpt. Default: yes
show_priceyes | no — show price label. Default: yes
show_buttonyes | no — show CTA button. Default: yes
button_textOverride the CTA button text for all cards. Default: per-service value or "Learn More"
Examples

[wscb_services]


[wscb_services category="design" columns="2" show_price="no"]


[wscb_services limit="6" orderby="date"]
[wscb_pricing_table id="123"]
Embed a saved pricing table by its post ID. Get the ID from the URL when editing the pricing table: post=123.
idPost ID of the wscb_pricing_table post. Required.
[wscb_inquiry_form service_id="456"]
Embed the inquiry form. Pre-fills the service name and optionally pre-selects a pricing plan so the submission arrives with full context.
service_idPost ID of the service this form is for. Stored on the submission. Default: 0
plan_idSlug or ID of the pricing plan to pre-select. Default: empty
[wscb_multistep_form]
Display a 3-step inquiry wizard with inline validation, progress bar, and a review summary before final submission. Uses the same AJAX endpoint as [wscb_inquiry_form].
service_idPre-select a service. Default: 0
stepsComma-separated step labels. Default: About You, Project Details, Review & Send
[wscb_compare_services]
Adds a compare checkbox to each service card. When 2–3 services are selected, a sticky compare bar appears. Clicking Compare opens an AJAX-loaded side-by-side table.
idsComma-separated service IDs to include. Default: all published
[wscb_process_steps service_id="X"]
Render a "How It Works" timeline from process steps saved on a service. Supports vertical, horizontal, and numbered card layouts.
service_idPull steps from this service's meta. Required (or use auto-render hook).
layoutvertical | horizontal | cards. Default: vertical
[wscb_reviews service_id="X"]
Display visitor star ratings and reviews for a service, with an inline submission form. Reviews are held for approval before appearing publicly.
service_idService post ID. Required.
show_formyes | no — show the submission form. Default: yes
[wscb_whatsapp_btn]
Render a WhatsApp (or Telegram) contact button — floating or inline — with a configurable phone number and pre-filled message.
numberWhatsApp number in international format e.g. +14155550100. Required.
messagePre-filled message text. Default: empty
stylefloating | inline. Default: floating
[wscb_view_count id="X"]
Display the view count for a service. Auto-increments on each unique page visit. The count is also visible as a sortable column in the All Services admin list.
idService post ID. Defaults to the current post if used inside a service template.
[wscb_availability]
Show the availability badge (Accepting Clients, Limited Slots and so on) for a service.
service_idService post ID. Default: current post
[wscb_featured_services]
Grid of services you marked as Featured in the service editor, with an optional badge.
columns2, 3 or 4. Default: 3
limitMax services. Default: 6
show_badgeyes | no — show the “Featured” badge. Default: yes
badge_textBadge label. Default: Featured
show_excerptyes | no. Default: yes
show_priceyes | no. Default: yes
show_buttonyes | no. Default: yes
button_textOverride the button text. Default: per service
orderbymenu_order | date | title. Default: menu_order
[wscb_service_highlights]
Hero-style highlight strip: an icon, a big number and a label for each item (for example “10+ Years”).
itemsPipe-separated Icon|Number|Label items, e.g. ⭐|500+|Projects|🏆|12|Awards
columns2, 3 or 4. Default: automatic (based on the number of items)
styledefault | bordered | filled. Default: default
[wscb_carousel]
Touch-friendly service carousel built with CSS scroll-snap. Falls back to a static grid when the visitor prefers reduced motion.
categorySlug of wscb_service_cat. Default: all
tagSlug of wscb_service_tag. Default: all
limitMax services. Default: 12
slides_visibleSlides visible at once. Default: 3
autoplayyes | no. Default: no
autoplay_speedMilliseconds between slides. Default: 4000
loopyes | no. Default: yes
show_dotsyes | no. Default: yes
show_arrowsyes | no. Default: yes
show_excerptyes | no. Default: yes
show_priceyes | no. Default: yes
show_buttonyes | no. Default: yes
button_textOverride the button text. Default: per service
[wscb_filterable_services]
Services grid with live category tabs. Switching a tab loads the matching cards with AJAX — no page reload.
columns2, 3 or 4. Default: 3
limitMax services. Default: 9
taxonomyTaxonomy used for the tabs. Default: wscb_service_cat
show_all_tabyes | no — show an “All” tab. Default: yes
hide_emptyyes | no — hide empty categories. Default: yes
show_excerptyes | no. Default: yes
show_priceyes | no. Default: yes
show_buttonyes | no. Default: yes
button_textOverride the button text. Default: per service
[wscb_related_services]
Related services for a service: your hand-picked list first, then services from the same category.
idService post ID. Default: current post
limitMax services. Default: 3
[wscb_service_search]
Live service search box. Results appear as you type; pressing Enter falls back to the normal WordPress search. Also available as a sidebar widget.
limitMax results in the dropdown. Default: 5
[wscb_category_list]
List of service categories with optional counts. Also available as a sidebar widget (Appearance → Widgets).
titleHeading above the list. Default: none
show_countyes | no. Default: yes
hide_emptyyes | no. Default: yes
hierarchicalyes | no — nest child categories. Default: yes
orderbyname | count | slug. Default: name
[wscb_share_buttons]
Share buttons for Twitter/X, Facebook, LinkedIn, WhatsApp, Telegram and Copy Link. No tracking and no external scripts. Added automatically below single service pages.
idService post ID. Default: current post
[wscb_service_faq]
FAQ accordion for one service, using the FAQs you added in the service editor. Adds FAQPage schema.
service_idService post ID. Default: current service
show_titleyes | no. Default: yes
open_firstyes | no — open the first question. Default: yes
show_schemayes | no — FAQPage markup. Default: yes
classExtra CSS class. Default: none
[wscb_faq_library]
FAQ accordion from the global FAQ Library (Service Builder → FAQ Library).
categoryFAQ category slug. Default: all
idsComma-separated FAQ IDs to show. Default: all
limitMax items. Default: -1 (all)
searchyes | no — show a search box. Default: no
show_titleyes | no. Default: yes
open_firstyes | no. Default: no
show_schemayes | no — FAQPage markup. Default: yes
classExtra CSS class. Default: none
[wscb_testimonials]
Client testimonials as a grid, masonry layout or auto-rotating carousel, with schema.org/Review markup.
layoutgrid | masonry | carousel. Default: grid
columns2, 3 or 4. Default: 3
limitMax testimonials. Default: 9
featuredyes — show featured testimonials only. Default: all
service_idShow only testimonials linked to this service. Default: all
show_ratingyes | no. Default: yes
show_photoyes | no. Default: yes
show_schemayes | no — Review markup. Default: yes
classExtra CSS class. Default: none
[wscb_testimonial_single]
One testimonial as a full-width pull-quote.
idTestimonial post ID. Required.
stylecard | quote | minimal. Default: card
show_ratingyes | no. Default: yes
show_photoyes | no. Default: yes
show_schemayes | no. Default: yes
⭐
Pro previews The [wscb_portfolio], [wscb_portfolio_filter] and [wscb_portfolio_single] shortcodes and the Pipeline screen are part of Service Catalog Builder Pro. In the free plugin they show a short preview message instead of content.
15 — Reference

All Settings

All settings are stored in a single wscb_settings option as a serialized array. Access them at Service Builder → Settings.

General

SettingKeyDefault
Service URL Slugservice_slugservices
Archive Page Titlearchive_titleOur Services
Archive Grid Columnsarchive_cols3

Inquiry Form

SettingKeyDefault
Notification Emailinquiry_emailadmin email
Email Subjectinquiry_subjectNew Service Inquiry – {service_name}
Success Messageinquiry_successThank you! We'll be in touch within 24 hours.
Redirect After Submissioninquiry_redirectempty (show success message)

Schema / SEO

SettingKeyDefault
Enable Service Schema Markupschema_enableYes (1)
Service Provider Nameschema_providerSite name from WordPress
💡
Reading settings programmatically

Use get_option( 'wscb_settings', array() ) to read all settings. Missing keys always return safe defaults. Use placeholders {service_name} and {plan_name} in the email subject line.

16 — Reference

Hooks & Filters

Extend or customise the plugin without editing core files. All hooks are documented below.

Filters

HookArgumentsDescription
wscb_service_schema $schema, $post_id Modify the JSON-LD Service schema array before it is output to <head>. Return the modified array.
wscb_load_frontend_assets $load Return false to prevent frontend CSS/JS from loading on any given page. Useful for manual asset management.
wscb_pattern_catalog $catalog Add, remove or change layouts in the Pattern Library. Each entry has a title, description, keywords, a pro flag and a file (a PHP file that returns block markup) or a callback.
wscb_elementor_layout_elements $elements, $slug Return the Elementor element tree for a layout slug so it can be created with Create page (Elementor).
wscb_is_pro $is_pro Return true from a Pro add-on so Pro layouts are unlocked in the Pattern Library.
wscb_register_patterns_everywhere $register Block patterns are registered only in the admin and REST requests to keep front-end pages fast. Return true if your theme references the plugin’s patterns on the front end.

Actions

HookDescription
wscb_after_inquiry_savedFires after an inquiry is saved to the database. Passes one array, $inquiry_data, with name, email, phone, service_id, plan_id, budget, timeline and message.
wscb_after_service_ctaFires after the call-to-action on the single service page. Passes $post_id. Use it to append your own HTML (for example a wishlist button).
wscb_ensure_frontend_assetsFires when a plugin block or widget renders, so its stylesheet and scripts are loaded even outside normal post content. You can call do_action( 'wscb_ensure_frontend_assets' ) from your own template.

Example: extend the Service schema

PHP — functions.php or custom plugin
/**
 * Add areaServed to the Service schema.
 */
add_filter( 'wscb_service_schema', function( $schema, $post_id ) {
    $schema['areaServed'] = get_post_meta( $post_id, '_service_area', true ) ?: 'Worldwide';
    return $schema;
}, 10, 2 );

Example: hook into new inquiry submissions

PHP — functions.php or custom plugin
/**
 * Send a Slack notification when a new inquiry arrives.
 */
add_action( 'wscb_after_inquiry_saved', function( $data ) {
    $webhook = 'https://hooks.slack.com/services/YOUR/WEBHOOK';
    wp_remote_post( $webhook, [
        'body' => json_encode([
            'text' => 'New inquiry from ' . $data['name'] . ' — ' . $data['email'],
        ]),
        'headers' => [ 'Content-Type' => 'application/json' ],
    ]);
}, 10, 1 );
17 — Reference

Privacy & GDPR

The plugin is designed with privacy-first principles. All data stays on your server — nothing is sent to Webtend or any third-party service.

Data collected by the Inquiry Form

Data FieldPurposeStored Where
NameIdentify the submitterwp_wscb_inquiries
Email addressReply-To on notification; contactwp_wscb_inquiries
Phone numberOptional contact numberwp_wscb_inquiries
Budget rangeProject scopingwp_wscb_inquiries
Project timelineProject scopingwp_wscb_inquiries
MessageInquiry contentwp_wscb_inquiries
IP addressBasic spam/abuse mitigationwp_wscb_inquiries
Service ID & Plan IDContext for the inquirywp_wscb_inquiries
🔒
WordPress Privacy Tools integrated All personally identifiable fields are registered with WordPress's built-in Personal Data Export and Personal Data Erase tools (Settings → Privacy). Erasure anonymises identifying fields (name, email, phone, IP) while retaining the record for statistics.
📄
CSV export contains personal data The Export CSV file on the Inquiries screen contains names, email addresses, phone numbers and messages. Only administrators can download it. Store it securely and delete it when you no longer need it. IP addresses are not included.
⚠️
Add to your Privacy Policy Mention in your site's Privacy Policy that you collect name, email, phone, budget, timeline, and message data via the service inquiry form, and that this data is stored on your server and used only to respond to the enquiry.
18 — FAQ

Frequently Asked Questions

Does this work without Elementor?
Yes, completely. Elementor is optional. The plugin provides Gutenberg blocks and shortcodes that work with any page builder or the classic editor. Elementor widgets are loaded lazily and only when Elementor is detected.
Does this work without WooCommerce?
Yes. WooCommerce integration is optional. The WooCommerce-specific class is included only when WooCommerce is installed. All core features — services, pricing tables, inquiry forms, schema markup — work without WooCommerce.
Can I customise the service and pricing templates?
Yes. Copy any file from plugins/webtend-service-catalog-builder/templates/ into {your-theme}/webtend-service-catalog-builder/ (creating the folder if it does not exist). Your copied file takes precedence and will not be overwritten by plugin updates.
How do I change the /services/ URL slug?
Go to Service Builder → Settings → General and update the Service URL Slug field. After saving, go to Settings → Permalinks and click Save Changes (even without making a change) to flush WordPress's rewrite rules and make the new slug active.
Where are inquiry submissions stored?
Submissions are stored in a custom database table named {prefix}_wscb_inquiries, created on plugin activation using dbDelta(). They are visible under Service Builder → Inquiries and are included in WordPress's Personal Data Export/Erase tools.
Is the plugin translation ready?
Yes. All user-facing strings use the webtend-service-catalog-builder text domain and a .pot file is included. Load your translation files via the standard load_plugin_textdomain() path, or use Loco Translate / WPML's translation tools.
What happens to data when the plugin is uninstalled?
The uninstall.php file removes the wscb_settings option and drops the wp_wscb_inquiries table when the plugin is deleted via the Plugins screen. Deactivating (without deleting) does not remove any data.
How do I create a ready-made service page?
Go to Service Builder → Pattern Library, pick Corporate, Medical or Agency Grid, and click Create page (Block Editor) or Create page (Elementor). A draft page opens in the editor. You can also insert the same layouts from the block inserter under Patterns → Service Catalog Builder.
Why is the “Create page (Elementor)” button disabled?
The Elementor import needs Elementor 3.5 or newer to be installed and active. Without it, use the Block Editor button, which works with any theme.
The new page shows empty sections. What is missing?
The layouts display your own services. Tick Add sample services when creating the page (it adds six services if you have fewer than three), or add your services under Service Builder → Add New Service.
How do I export my inquiries?
Open Service Builder → Inquiries and click Export CSV. Choose New or Read first if you only want that group. The file opens correctly in Excel and Google Sheets.
How do I get support?
Free support is available on the WordPress.org support forum. Please include your WordPress version, PHP version, active theme name, and a clear description of the issue when posting.
19 — Changelog

Changelog

v1.0.0
June 2026
Initial Release
Initial release — Service Catalog Builder
Services CPT — custom post type with categories, tags, icon (image/SVG/font), gallery, feature list, FAQ accordion, and related services
Pricing Table Builder — drag-and-drop visual plan builder with monthly/annual toggle, highlighted plan, feature comparison, and per-plan CTAs
Service Inquiry Form — AJAX submission, honeypot spam protection, budget selector, email notifications with Reply-To, full DB log
Gutenberg blocks — Services Grid, Pricing Table, Inquiry Form blocks registered via register_block_type
Elementor widgets — Services Grid Widget, Pricing Table Widget, Inquiry Form Widget (lazy-loaded)
Shortcodes — [wscb_services], [wscb_pricing_table], [wscb_inquiry_form] with full attribute support
Schema markup — automatic JSON-LD schema.org/Service and FAQPage output on single service pages
WooCommerce integration — optional product linking with live price and Buy button (auto-detected)
SVG sanitizer — built-in SVG sanitization for service icon uploads
Privacy / GDPR — Personal Data Export and Erase integration; no data sent to external services
Template override — copy templates to {theme}/webtend-service-catalog-builder/ to customise
Translation ready — full .pot file included, text domain webtend-service-catalog-builder
GPL v2 licensed — no SaaS dependencies, no phone-home, fully open source
v1.0.1
July 2026
Patch
Service Search Widget — live AJAX search with 300ms debounce, keyboard arrow-key navigation, and ARIA expanded state
Share Buttons — Copy Link via Clipboard API with textarea fallback for older browsers
v1.0.2 JS/CSS — scoped additions file for search + share features without touching core assets
v1.0.2
July 2026
Feature
Multi-Step Inquiry Form — 3-step wizard with inline validation, progress bar, and review summary. Shortcode: [wscb_multistep_form]
Service Comparison — up to 3 services side-by-side via sticky compare bar and AJAX modal. Shortcode: [wscb_compare_services]
Process Steps — "How It Works" timeline widget with vertical, horizontal, and numbered card layouts. Shortcode: [wscb_process_steps]
v1.0.3
August 2026
Feature
Star Rating Reviews — visitor reviews with star picker, approval queue, and aggregate rating display. Shortcode: [wscb_reviews]
WhatsApp / Telegram Button — floating or inline contact button with configurable number and message. Shortcode: [wscb_whatsapp_btn]
View Counter — tracks single service page views, sortable admin column, and bulk reset. Shortcode: [wscb_view_count]
Elementor editor assets — plugin CSS now loaded inside the Elementor editor iframe for accurate live preview
v1.0.4
September 2026
Compliance
WP.org compliance — removed Requires Plugins: elementor header; plugin now declares Elementor as optional (works independently via Gutenberg blocks and shortcodes)
load_plugin_textdomain — translation loading now correctly hooked to plugins_loaded
Duplicate require_once removed — admin class files were being included twice on admin requests
Script dependency order — wscb-v103-additions.js now registered before wscb-v104-additions.js (which depends on it)
View Counter frontend load — WSCB_View_Counter correctly loads on frontend so the wp hook fires and [wscb_view_count] renders
Project Timeline field — multistep form timeline selection now saved to DB, included in notification emails, and displayed in the Inquiries admin panel
Tested up to: 7.1 — updated in both plugin header and readme.txt
v1.0.5
October 2026
Feature
Service Availability Badge — per-service status (Accepting Clients, Limited Slots, Fully Booked, Coming Soon, By Referral Only) shown on service cards and single service pages
Availability schema — the status is added to the service JSON-LD as schema.org availability
[wscb_availability] shortcode and a global on/off toggle under Settings → Service Availability
Inquiry CSV Export — Export CSV button on the Inquiries screen, with UTF-8 BOM for Excel, nonce and capability checks
v1.0.6
October 2026
Feature
Pattern Library — Corporate, Medical and Agency Grid service page layouts as block patterns under “Service Catalog Builder”
One-click page creation — Service Builder → Pattern Library creates a draft page for the Block Editor or Elementor (Flexbox Containers or Sections)
Sample services — optional demo services when you have fewer than three
Client Testimonials — new Testimonials post type, [wscb_testimonials] (grid, masonry, carousel) and [wscb_testimonial_single], with schema.org/Review markup
Developer filters — wscb_pattern_catalog, wscb_elementor_layout_elements, wscb_is_pro, wscb_register_patterns_everywhere
Inquiries screen fatal error — the Export CSV button called a missing method. Export CSV now works: only administrators can use it, formulas are neutralised, IP addresses are not exported
Block pages unstyled — frontend CSS/JS now loads on pages built with the Gutenberg blocks, not only shortcodes
Inquiry Form block — form fields were being stripped from the block output; they are now preserved while scripts and event handlers are still removed
Elementor widgets — fixed fatal errors in the Services Grid, Pricing Table and Inquiry Form widgets
Admin menu — Dashboard no longer links to Testimonials, and Testimonials is no longer listed twice
Translations — widget text is loaded at the right time (fixes the “translations loaded too early” notice on WordPress 6.7+)
Minimum WordPress is now 6.3