b6df4dbb92
MLS plugin fixes from this session: - Fix silent insert failures: location column NOT NULL was rejecting wpdb->insert calls, causing ~18k new properties since Dec 2025 to be lost. Inserts now build raw SQL with ST_PointFromText so the spatial column is populated atomically. - Auto-refresh expired media URLs in MLS_Media_Handler::fetch_and_cache(), guarded by a property-level GET_LOCK so concurrent fetches share one API refresh. - Normalize WP_Error to null in mls_get_property_image() so callers can rely on the documented string|null contract. - Support comma-separated property_type filters in MLS_Query and MLS_Cluster so the homepage "View All Commercial" link (?property_type=Commercial+Sale,Land,Farm) actually filters correctly. - Incremental sync now looks back 10 minutes past the latest modification timestamp as a safety margin against missed records. - Smart sync exits silently (info-level, not warning) when a full sync is in progress. Operational: - New cron: weekly full sync Sundays at 3 AM (/usr/local/bin/mls-full-sync). - New cron: hourly 2GB cap on mls-thumbnails/ and cache/transformed-images/ (/usr/local/bin/mls-image-cache-cap). - Logrotate config for wp-content/debug.log (2-day retention, daily rotation, delaycompress). Repo policy: - CLAUDE.md updated with explicit "commit everything except build artifacts" policy. - .gitignore: untrack runtime image caches and debug.log rotations. Other modifications in this snapshot are pre-existing in-flight theme/plugin/db_content_updates work. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
78 lines
2.8 KiB
Markdown
Executable File
78 lines
2.8 KiB
Markdown
Executable File
# Manual Property Entry System
|
|
|
|
**Date**: 2026-01-21
|
|
**Type**: Schema Change + New Feature
|
|
|
|
## Summary
|
|
|
|
Added the ability to manually enter properties that integrate seamlessly with MLS-synced listings. Manual properties can override MLS listings (same MLS ID), support cloning from existing MLS data, and include geocoding for addresses.
|
|
|
|
## Schema Changes
|
|
|
|
New table `wp_mls_properties_manual` created automatically by the MLS plugin on activation/upgrade.
|
|
|
|
The table will be created automatically when the plugin runs - no manual SQL needed.
|
|
|
|
## New Custom Post Type
|
|
|
|
**CPT**: `manual_property`
|
|
**Menu**: "Manual Properties" in WordPress admin
|
|
|
|
## ACF Field Group
|
|
|
|
ACF fields are registered programmatically (no JSON import needed). Fields will appear automatically on the Manual Property edit screen.
|
|
|
|
## How to Use
|
|
|
|
### Add a Manual Property
|
|
|
|
1. Go to **Manual Properties > Add Property** in WordPress admin
|
|
2. Fill in property details across the tabs:
|
|
- Basic Info: Status, Price, Type, HomeProz checkbox, Featured toggle
|
|
- Location: Address (geocoded automatically), City, State, ZIP
|
|
- Details: Beds, Baths, Square Feet, etc.
|
|
- Description: Public remarks
|
|
- Media: Upload property photos
|
|
- Agent: Select from Agent CPT
|
|
- Dates: List date, close date, etc.
|
|
3. Publish the property
|
|
|
|
### Clone from MLS
|
|
|
|
1. Go to **Manual Properties > Add Property**
|
|
2. Enter an MLS # in the "Clone from MLS Listing" box
|
|
3. Click "Clone Listing"
|
|
4. Images will be downloaded and fields pre-populated
|
|
5. Review and modify as needed, then publish
|
|
|
|
### Override an MLS Listing
|
|
|
|
1. Create a manual property
|
|
2. Set the MLS # field to the MLS ID you want to override
|
|
3. Publish
|
|
4. The manual version will appear in search results instead of the MLS-synced version
|
|
|
|
## Dependencies
|
|
|
|
- ACF Pro (already installed)
|
|
- MLS by HansonXyz plugin (updated in this release)
|
|
|
|
## Files Changed
|
|
|
|
Plugin files (MLS plugin):
|
|
- `mls-by-hansonxyz.php` - Added table constant, class includes
|
|
- `includes/class-mls-db.php` - Added manual properties table schema
|
|
- `includes/class-mls-query.php` - Modified to include manual properties in queries
|
|
- `includes/class-mls-image-endpoint.php` - Handle manual property images
|
|
- `includes/class-mls-manual-property.php` - NEW: CPT, ACF fields, sync logic
|
|
- `includes/class-mls-geocoder.php` - NEW: Address geocoding via Nominatim
|
|
- `admin/js/manual-property.js` - NEW: Clone from MLS functionality
|
|
- `admin/css/manual-property.css` - NEW: Admin styles
|
|
|
|
## Notes
|
|
|
|
- Manual properties use WordPress Media Library for images (not MLS media cache)
|
|
- Geocoding uses free Nominatim API (rate limited, cached for 30 days)
|
|
- Manual property listing keys follow format: `MANUAL-{post_id}`
|
|
- Properties with `listing_id` set will override MLS listings with matching ID
|