# 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