Salt & Cedar
Boutique brokerage demo with a custom listing CPT, custom-meta, and a shared server-rendered Gutenberg grid block reusable across any future catalog demo.

Overview
A boutique residential brokerage demo built on WordPress's CPT + custom-meta + faceted catalog pattern. Custom listing CPT lives in a demo-local mu-plugin, a home_style taxonomy with six seeded terms, nine show_in_rest meta fields, and a shared Gutenberg block (sfp-blocks/listing-grid) — server-rendered with configurable post type so a future vehicle / rentals / equipment demo reuses the block with zero changes.
Architectural split worth naming:
- The CPT lives in the demo, not the platform. Real estate has prices and beds; vehicles have mileage and drivetrains — coupling the platform to "what kind of catalog is this" would be the wrong abstraction
- The block is the generic primitive (query any post type, render cards); the CPT is the domain model
- A future vehicle-listings demo registers its own
vehicleCPT with its own meta, points the listing-grid block at it, and works
CPT details — saltcedar-listing-cpt.php (demo-local mu-plugin):
- CPT
listingwithhas_archive: 'listings', single permalinks at/listings/{slug}/ - Taxonomy
home_stylewith 6 seeded terms (mid-century, craftsman, contemporary, cottage, farmhouse, classic) - Nine meta fields registered with
register_post_meta(..., show_in_rest: true): price, beds, baths, sqft, lot_sqft, year_built, neighborhood, address, mls_id - Sanitize callbacks wrapped in single-arg closures (PHP 8 arity-safe)
FSE templates:
archive-listing.html— renders /listings/. Hero strip with eyebrow + intro paragraph; listing-grid block below set to query all listings sorted bymenu_order. Three-column grid.single-listing.html— renders /listings/{slug}/.core/post-featured-image(16:9),core/post-termsforhome_style,core/post-titlein Fraunces,core/post-content(which contains an inline facts panel + narrative authored in the seed)
Six fictional PNW listings: Bayview Mid-Century, Madrona Bluff Craftsman, Westcott Bay Cottage, Queen Anne Contemporary, Vashon Forest Cabin, Eastsound Farmhouse — each with structured facts and 200-word narrative.
The Challenge
Real estate brokerages skip WordPress on reflex — "MLS plugins are awful," "faceted search needs a SaaS," "we'll lose six months to plugin compatibility nightmares" — and end up on the bundled MLS site or a $200/month hosted real-estate CMS that ages badly. That narrative confuses boutique brokerages with twelve curated listings for MLS aggregators serving twenty thousand auto-feed listings.
The Solution
For boutique catalog sites — which is most real-estate work agencies actually get asked to build — WordPress's CPT + custom meta + taxonomy + block editor pipeline is more than sufficient. Architecturally clean split: shared generic block in the platform plugin, demo-local CPT in a per-demo mu-plugin. The block stays generic; the domain model lives where it belongs.
Results
Lighthouse 99 / 96 / 100 / 92 with placeholder photography
Shared
sfp-blocks/listing-gridblock reusable across any future CPT-driven catalog demoNine custom meta fields exposed via REST through
register_post_meta(..., show_in_rest: true)PHP 8 arity-safe sanitize callbacks wrapped in single-arg closures
number_format_i18nfor price rendering — correct thousands separators independent of system localeTwo custom FSE templates:
archive-listing.html+single-listing.html
Gallery


