Texas IDX Developer Documentation
Complete technical documentation for integrating and customizing the Texas IDX plugin for WordPress.
What is Texas IDX?
Texas IDX is a WordPress plugin that integrates with Bridge Interactive's RESO-compliant API to display real estate listings from any supported Texas MLS. It provides shortcodes for embedding property grids, search functionality, and detailed single property views.
Key Features
- RESO API Integration: Connects to Bridge DataOutput API for HAR MLS listings
- Flexible Layouts: Grid (1-8 columns) and list views with responsive breakpoints
- Advanced Search: Price range, beds, baths, property type filters with AJAX
- Google Maps: Split-screen map view with property markers
- Smart Caching: Database-backed caching with configurable TTL
- Dynamic Queries: Powerful
qparameter for CPT integration and custom solutions - Skeleton Loading: Smooth loading placeholders prevent layout shift
Requirements
| WordPress | 5.0+ |
| PHP | 7.4+ |
| Bridge Interactive API | Dataset ID + Server Token |
| Google Maps API | Optional, for map features |
Installation & Setup
1. Plugin Installation
# Upload to plugins directory
/wp-content/plugins/texas-idx/
# Or via WordPress admin
Plugins → Add New → Upload Plugin
2. API Configuration
Navigate to MDG Reso → Settings in WordPress admin:
| Setting | Description | Example |
|---|---|---|
| Dataset ID | Bridge Interactive dataset identifier | har |
| Server Token | API authentication token | abc123... |
| Cache Duration | Seconds to cache API responses | 3600 |
| Default Limit | Default listings per page | 12 |
3. Google Maps (Optional)
- Get API key from Google Cloud Console
- Enable "Maps JavaScript API"
- Enter key in MDG Reso → Settings
- Configure default center coordinates and zoom level
Shortcodes
Texas IDX provides three primary shortcodes for displaying listings:
[texas_idx]
The main shortcode for displaying property listings in grid or list format.
Basic Usage
[texas_idx]
Displays 12 active listings in a 3-column grid.
With Search & Map
[texas_idx show_search="true" show_map="true" columns="4" limit="20"]
Office Listings
[texas_idx officeId="NWAG01" show_search="true"]
Agent Portfolio
[texas_idx agentId="AGENT123" columns="4"]
Multiple Specific Listings
[texas_idx id="12345;67890;11223" columns="3"]
Rental Listings
[texas_idx propertyType="Leases" limit="12"]
Note: When propertyType="Leases", the status filter is automatically removed to show all rental listings (available and leased).
Card Layout Styles
[texas_idx card_layout="overlay"] // Details overlay on image
[texas_idx card_layout="standard"] // Details below image (default)
[texas_idx_search]
Standalone search form shortcode (legacy, typically use show_search="true" instead).
[texas_idx_search]
[texas_idx_single]
Display a single property by listing ID.
[texas_idx_single id="12345678"]
Parameters Reference
Complete list of all shortcode parameters for [texas_idx]:
Filtering Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
id |
string | - | Filter by listing ID(s). Separate multiple with semicolons. |
listing_id |
string | - | Alias for id parameter. |
q |
string | - | Powerful query parameter for address search with wildcard support. Ideal for CPT integration. Supports semicolon-separated values. |
officeId |
string | - | Filter by office MLS ID. Multiple: ID1;ID2 |
agentId |
string | - | Filter by agent (searches MlsId, FullName, Key). |
status |
string | Active | Property status (Active, Pending, Sold, etc.). |
city |
string | - | Filter by city name. |
postalCode |
string | - | Filter by ZIP code. |
minPrice |
number | 0 | Minimum list price. |
maxPrice |
number | 0 | Maximum list price (0 = no limit). |
beds |
number | 0 | Minimum bedrooms. |
baths |
number | 0 | Minimum bathrooms. |
propertyType |
string | - | Property type: Residential, Residential Lease, Land, etc. |
Display Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit |
number | 12 | Results per page (max 200). |
offset |
number | 0 | Starting offset for pagination. |
layout |
string | grid | Display layout: grid or list. |
columns |
number | 3 | Grid columns (1-8). |
card_layout |
string | standard | Card style: standard or overlay. |
show_search |
boolean | false | Display search form above listings. |
show_map |
boolean | false | Show map toggle switch. |
map_open |
boolean | false | Start with map view open. |
map_columns |
number | 2 | Grid columns when map view is active. |
The q Parameter (Dynamic Queries)
The q parameter is one of the most powerful features for building custom real estate solutions. It enables dynamic address-based searches with wildcard support and semicolon-separated values.
Basic Wildcard Syntax
[texas_idx q="85* Tulane"] // Starts with "85", contains "Tulane"
[texas_idx q="* Oak Street"] // Any address on Oak Street
[texas_idx q="123 Main"] // Contains "123 Main" (case-insensitive)
Multiple Address Matching (Semicolon Separated)
Pass multiple addresses or patterns separated by semicolons to display a specific group of listings:
[texas_idx q="123 Oak Lane;456 Pine Street;789 Maple Ave"]
This is especially useful for showcasing developments, builder inventory, or curated collections.
CPT Integration Use Case
The q parameter is designed to work seamlessly with Custom Post Types (CPTs). Store address patterns in a custom field, then pass it dynamically to the shortcode.
Example: New Development CPT
Create a "Development" CPT with a custom field for listing addresses:
// In your CPT template or page builder:
$addresses = get_field('development_addresses'); // ACF field
// Field value: "* Sunset Boulevard;1245 Harbor View;8800 Marina*"
echo do_shortcode('[texas_idx q="' . esc_attr($addresses) . '" columns="3"]');
Example: Builder Inventory
A builder selling homes in multiple subdivisions:
// Custom field stores: "* Oakwood Estates;* Riverdale Heights;* Pine Valley"
$builder_communities = get_post_meta(get_the_ID(), 'builder_communities', true);
echo do_shortcode('[texas_idx q="' . esc_attr($builder_communities) . '"
columns="4"
show_search="false"
card_layout="overlay"]');
Example: Street-Level Marketing
Display all homes on a specific street or in a specific area:
[texas_idx q="* Memorial Drive" columns="3" limit="24"]
Combining with Other Filters
The q parameter can be combined with other filters for more refined results:
[texas_idx q="* Downtown*" minPrice="500000" beds="2" propertyType="Residential"]
How Wildcard Matching Works
| Pattern | Matches |
|---|---|
* Oak Street | Any address containing "Oak Street" |
123* | Addresses starting with "123" |
*Heights | Addresses ending with "Heights" |
123 Main | Contains "123 Main" (no wildcards) |
Performance Tip
When using multiple semicolon-separated values, each generates an OR condition. For large lists (10+ addresses), consider breaking into multiple shortcodes for better performance.
Single Property Template
The plugin registers a rewrite rule for single property pages:
URL Structure
Pretty permalinks: /property/{listing_key}
Plain permalinks: /?mdg_property={listing_key}
Template Location
/wp-content/plugins/texas-idx/templates/single-property.php
Accessing Property Data
// In template
$property = get_query_var('mdg_property_data');
// Available data
echo $property['address'];
echo $property['price'];
echo $property['beds'] . ' beds, ' . $property['baths'] . ' baths';
// Images
foreach ($property['images'] as $image) {
echo '<img src="' . esc_url($image) . '">';
}
Customizing the Template
To override, copy to your theme:
/wp-content/themes/your-theme/texas-idx/single-property.php
Note: Template override functionality requires additional hooks to be added.
Debugging
Enable Debug Mode
Navigate to MDG Reso → Settings → Enable Debug Logging
PHP Debug Logs
Location: /wp-content/debug.log
MDG RESO - Shortcode reso_shortcode() called
MDG RESO API - Processing q parameter: Houston
MDG RESO API - Office Filter Applied: ListOfficeMlsId eq 'NWAG01'
MDG RESO API - Full Filter Query: StandardStatus eq 'Active' and ListOfficeMlsId eq 'NWAG01'
MDG RESO API - Total count returned: 45
MDG RESO - Cache HIT! Returning slice from offset 0 with limit 12
JavaScript Console Logs
MDG RESO JS - Initial container params: {"q":"","limit":12,"offset":0}
MDG RESO JS - Loading listings with params: {...}
MDG RESO JS - Pagination: Loading with params: {offset: 12, limit: 12}
Visual Debug Info
When debug mode is enabled, property cards display:
- Office ID
- Agent ID
- Office Name
- Agent Name
Common Debug Patterns
| Log Message | Meaning |
|---|---|
Cache HIT! | Results served from cache |
Cache MISS! | Fresh API request made |
API Error Code: 401 | Invalid server token |
WARNING: No filters applied! | All properties will return |
Production Warning
Always disable debug logging in production. Debug mode adds significant logging overhead and exposes internal data.
Performance Optimization
Asset Loading
The plugin conditionally loads assets:
- CSS: Always loaded (small, needed for styling)
- JavaScript: Always loaded (needed for AJAX/interactions)
- Google Maps: Only loaded when
show_map="true"
Lazy Loading
- Images use
loading="lazy"attribute - API and Cache classes instantiated only when needed
- Thumbnail slider loads images on interaction
Caching Benefits
Without caching: 100 page views = 100 API calls
With caching: 100 page views = 1 API call (first request)
Batch caching: 10 pages × 12 items = 1 API call (100 items cached)
Optimization Tips
- Increase cache duration in admin settings for stable listings
- Use specific filters to reduce result sets
- Limit columns on mobile (responsive CSS handles this automatically)
- Disable debug logging in production