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.
System Requirements
Service Catalog Builder is lightweight with minimal hard dependencies. Elementor and WooCommerce are both optional — the plugin fully works without them.
| Component | Minimum | Recommended |
|---|---|---|
| WordPress | 6.3 | 7.1 |
| PHP | 7.4 | 8.2+ |
| MySQL / MariaDB | 5.6 / 10.0 | 8.0 / 10.6 |
| Elementor | Optional — Free or Pro (3.5+ for one-click layout import) | Latest stable |
| WooCommerce | Optional — any version | 8.0+ |
| Browser (admin) | Chrome 90+, Firefox 88+, Safari 14+ | Latest stable |
Installation
Method A — WordPress Plugin Directory (Recommended)
Search in WordPress Admin
Go to Plugins → Add New and search for WebTend Service Catalog Builder or webtend-service-catalog-builder.
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.
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
Download & Upload
Download webtend-service-catalog-builder.zip from wordpress.org/plugins. Go to Plugins → Add New → Upload Plugin and install the ZIP.
Activate
Click Activate Plugin. You will see the Service Builder menu appear in your WordPress admin sidebar.
Re-save Permalinks
Go to Settings → Permalinks and click Save Changes to ensure service URLs work correctly.
plugins/webtend-service-catalog-builder/templates/ into {your-theme}/webtend-service-catalog-builder/ and edit freely. Your changes survive plugin updates.
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
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
| Field | Description | Example |
|---|---|---|
| Short Tagline | One-line description shown on cards and schema markup | Professional web design for modern brands |
| Duration / Delivery Time | Estimated project timeline shown on the card | 2–4 weeks |
| Starting Price Label | Display price text — freeform, not connected to WooCommerce unless linked | From $299 |
| CTA Button Text | Default: "Learn More". Overridable per-service or via shortcode | Get Started |
| CTA Button URL | URL for the CTA — falls back to the service permalink | https://example.com/contact |
| Service Icon | Image upload, inline SVG code, or icon font class (e.g. dashicons-admin-site) | SVG / image / font class |
| Feature List | Repeatable bullet rows with configurable icon style (check, star, bolt, etc.) | Up to 4 shown on card |
| Gallery | Multi-image gallery via WP Media Library | portfolio shots, process images |
| FAQ Accordion | Repeatable Q&A pairs — rendered as an accordion with FAQPage schema | How long does it take? / 2–4 weeks |
| Related Services | Multi-select of other services to display in the "You may also like" section | — |
| Linked Pricing Table | Attach a pricing table post to display on the single service page | ID of wscb_pricing_table post |
| WooCommerce Product | Link to a WC product for live price + Buy button (optional) | Product ID |
Taxonomies
| Taxonomy | Slug | Usage |
|---|---|---|
| Service Category | wscb_service_cat | Group services by type (Design, Development, Marketing, etc.) |
| Service Tag | wscb_service_tag | Cross-cutting labels (e.g. "Fast turnaround", "Enterprise ready") |
WSCB_SVG_Sanitizer class before saving. This strips disallowed elements and attributes to prevent XSS.
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
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
| Field | Required | Notes |
|---|---|---|
| Name | Yes | Stored as submitted |
| Yes | Used as Reply-To in notification email | |
| Phone | No | Optional contact number |
| Budget Range | No | Dropdown — fixed ranges from Under $1k to $25k+ |
| Timeline | No | Project timeline selector — stored on submission and shown in admin Inquiries panel |
| Message | Yes | Free-text enquiry body |
| Service / Plan | Auto | Pre-filled from service_id and plan_id shortcode attributes |
| Honeypot | Hidden | Invisible field — bots fill it, humans don't. Submissions with a value are silently discarded. |
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
| # | Name | Service | Plan | Budget / Timeline | Date | Status |
|---|---|---|---|---|---|---|
| 3 | Jane Smith | Web Design | Professional | $1k–$5k ASAP | Today | New |
| 2 | Mark Owens | SEO Audit | Starter | Under $1k 1–3 months | Yesterday | Read |
| 1 | Lisa Chen | Branding | Enterprise | $10k+ — | 2 days ago | Read |
wp_footer(), as the plugin enqueues its scripts there. Classic themes and all tested modern themes work correctly.
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/loaded action. If Elementor is not installed, no Elementor code runs at all.
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.
| Layout | Best for | What is on the page |
|---|---|---|
| Corporate Service Page | Consultancies, finance, IT and B2B firms | Dark hero, stats strip, services grid, three-step process, call-to-action band and quote form |
| Medical Service Page | Clinics, dentists, therapy and wellness practices | Hero with opening-hours card, trust badges, services grid, “why choose us” cards and appointment form |
| Agency Service Grid | Design, development and marketing agencies | Bold 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.
#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.
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
| Field | Purpose |
|---|---|
| Client name, job title, company | Who said it. Shown under the quote |
| Website URL | Optional link to the client’s site |
| Photo | Chosen from the media library. Initials are shown automatically if no photo is added |
| Star rating | Optional, 1–5 stars |
| Related service | Lets you show only the testimonials for one service |
| Featured & display order | Pick which quotes appear in featured-only sliders and in what order |
Showing testimonials
[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.
Availability Badge
Tell visitors at a glance whether you are taking on work. Each service can show a coloured badge with a status dot.
| Status | Meaning |
|---|---|
| Accepting Clients | You are open for new work |
| Limited Slots | Only a few places left |
| Fully Booked | No capacity right now |
| Coming Soon | The service is not live yet |
| By Referral Only | You 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
availabilityproperty - Turn badges on or off for the whole site under Settings → Service Availability
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.
{
"@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.
{
"@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."
}
}
]
}
/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.
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
Shortcodes
All shortcodes work in any editor — Gutenberg classic block, Elementor HTML widget, WPBakery, Divi, or the Classic Editor.
[wscb_services]
[wscb_services] [wscb_services category="design" columns="2" show_price="no"] [wscb_services limit="6" orderby="date"]
[wscb_pricing_table id="123"]
post=123.[wscb_inquiry_form service_id="456"]
[wscb_multistep_form]
[wscb_inquiry_form].[wscb_compare_services]
[wscb_process_steps service_id="X"]
[wscb_reviews service_id="X"]
[wscb_whatsapp_btn]
[wscb_view_count id="X"]
[wscb_availability]
[wscb_featured_services]
[wscb_service_highlights]
[wscb_carousel]
[wscb_filterable_services]
[wscb_related_services]
[wscb_service_search]
[wscb_category_list]
[wscb_share_buttons]
[wscb_service_faq]
[wscb_faq_library]
[wscb_testimonials]
[wscb_testimonial_single]
[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.
All Settings
All settings are stored in a single wscb_settings option as a serialized array. Access them at Service Builder → Settings.
General
| Setting | Key | Default |
|---|---|---|
| Service URL Slug | service_slug | services |
| Archive Page Title | archive_title | Our Services |
| Archive Grid Columns | archive_cols | 3 |
Inquiry Form
| Setting | Key | Default |
|---|---|---|
| Notification Email | inquiry_email | admin email |
| Email Subject | inquiry_subject | New Service Inquiry – {service_name} |
| Success Message | inquiry_success | Thank you! We'll be in touch within 24 hours. |
| Redirect After Submission | inquiry_redirect | empty (show success message) |
Schema / SEO
| Setting | Key | Default |
|---|---|---|
| Enable Service Schema Markup | schema_enable | Yes (1) |
| Service Provider Name | schema_provider | Site name from WordPress |
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.
Hooks & Filters
Extend or customise the plugin without editing core files. All hooks are documented below.
Filters
| Hook | Arguments | Description |
|---|---|---|
| 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
| Hook | Description |
|---|---|
| wscb_after_inquiry_saved | Fires 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_cta | Fires 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_assets | Fires 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
/** * 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
/** * 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 );
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 Field | Purpose | Stored Where |
|---|---|---|
| Name | Identify the submitter | wp_wscb_inquiries |
| Email address | Reply-To on notification; contact | wp_wscb_inquiries |
| Phone number | Optional contact number | wp_wscb_inquiries |
| Budget range | Project scoping | wp_wscb_inquiries |
| Project timeline | Project scoping | wp_wscb_inquiries |
| Message | Inquiry content | wp_wscb_inquiries |
| IP address | Basic spam/abuse mitigation | wp_wscb_inquiries |
| Service ID & Plan ID | Context for the inquiry | wp_wscb_inquiries |
Frequently Asked Questions
Does this work without Elementor?
Does this work without WooCommerce?
Can I customise the service and pricing templates?
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?
Where are inquiry submissions stored?
{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?
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?
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?
Why is the “Create page (Elementor)” button disabled?
The new page shows empty sections. What is missing?
How do I export my inquiries?
How do I get support?
Changelog
register_block_type[wscb_services], [wscb_pricing_table], [wscb_inquiry_form] with full attribute support{theme}/webtend-service-catalog-builder/ to customise.pot file included, text domain webtend-service-catalog-builder[wscb_multistep_form][wscb_compare_services][wscb_process_steps][wscb_reviews][wscb_whatsapp_btn][wscb_view_count]Requires Plugins: elementor header; plugin now declares Elementor as optional (works independently via Gutenberg blocks and shortcodes)plugins_loadedwscb-v103-additions.js now registered before wscb-v104-additions.js (which depends on it)WSCB_View_Counter correctly loads on frontend so the wp hook fires and [wscb_view_count] rendersavailability[wscb_testimonials] (grid, masonry, carousel) and [wscb_testimonial_single], with schema.org/Review markupwscb_pattern_catalog, wscb_elementor_layout_elements, wscb_is_pro, wscb_register_patterns_everywhere