| @@ -3,9 +3,9 @@ | ||
| 3 | 3 | Tags: idx, idx-plugin, mls, real-estate, wordpress-idx |
| 4 | 4 | Requires at least: 5.2 |
| 5 | 5 | Tested up to: 7.0.2 |
| 6 | 6 | Requires PHP: 7.4 |
| 7 | -Stable tag: 7.0.6 | |
| 7 | +Stable tag: 7.2.1 | |
| 8 | 8 | License: GPLv3 |
| 9 | 9 | License URI: https://www.gnu.org/licenses/gpl-3.0.html |
| 10 | 10 | |
| 11 | 11 | IDX and MLS plugin for WordPress. Import and sync real estate listings from 800+ MLS via the RESO Web API, on any theme. |
| @@ -107,8 +107,40 @@ | ||
| 107 | 107 | |
| 108 | 108 | See `docs/standalone-hooks-guide.md` for the detailed guide (a worked example for every hook), `docs/standalone-hooks.md` for the at-a-glance signature tables, `includes/standalone/mlsimport-hooks.php` for the canonical machine-readable list, and `docs/adr/0006-standalone-hook-conventions.md` for the naming/argument conventions. Themes override templates by copying them into a `mlsimport/` sub-directory (the WooCommerce pattern). |
| 109 | 109 | |
| 110 | 110 | == Changelog == |
| 111 | += 7.2.1 = | |
| 112 | +* The "Data last updated" date on a property page now shows the hour and minute too (for example "March 4, 2026 1:03 am"), converted to your site's timezone. The "Updated" date in the property title bar and overview shows the same time. | |
| 113 | +* Fixed the Connections tab still showing your old MLS limit after a plan change - the number of MLS connections your plan allows is now re-checked with your MLSImport account every time you open the tab, so an upgrade on mlsimport.com unlocks "+ Add MLS" right away without signing in again. | |
| 114 | + | |
| 115 | += 7.2 = | |
| 116 | +* Multiple MLS connections on one site - you are no longer limited to a single MLS. A new Connections tab lists every MLS you have connected with its live status, when it was last tested, and how many listings it brought in; you can add another MLS from the same screen, test or disconnect one at a time, and drag the rows to set which MLS takes precedence. How many connections you can add is set by your MLSImport plan. | |
| 117 | +* Adding a second MLS does not disturb the first - each connection keeps its own credentials, its own field mapping and its own sync settings, and your existing MLS is carried over automatically on update as your first connection, with its current mapping and settings intact. Nothing needs to be re-entered or re-imported. | |
| 118 | +* Each import task belongs to one MLS - when you create an import task you pick which connection it pulls from, and its search filters come from that MLS's own values. Existing tasks keep working exactly as before. | |
| 119 | +* One broken MLS no longer stops the others - if a connection's credentials expire or its provider goes down, only that connection's tasks pause (with the reason recorded); tasks on your other MLSs keep importing on the same hourly run. Daily reconciliation is likewise done per connection, so a feed that cannot be read is skipped instead of putting your listings at risk. | |
| 120 | +* The same property from two MLSs is shown once - when overlapping feeds carry the same address twice, the copy from your higher-priority connection is displayed and the other is hidden from search, sliders, maps and feeds. Hidden never means deleted: if the shown copy is removed or unpublished, the other one is brought back automatically. | |
| 121 | + | |
| 122 | += 7.1.2 = | |
| 123 | +* Fixed feature links on a listing all pointing to one empty page - when an MLS sends a multi-value field (lot features, appliances, views...) as one comma-glued text instead of a list, each value now becomes its own term with its own working archive page. A one-time automatic repair also splits the glued terms that earlier imports already created, so existing sites are fixed without re-importing. | |
| 124 | +* Updated the bundled Action Scheduler library to 3.9.3 - removes the PHP 8.4 deprecation notices it produced on every admin page (which could quickly fill debug.log on sites with logging enabled) and slims the plugin package. | |
| 125 | + | |
| 126 | += 7.1.1 = | |
| 127 | +* Fixed featured properties losing their images - saving a property in wp-admin could blank its internal ListingKey (WordPress treats the meta keys ListingKey and the theme custom field listingkey as the same database row), so the next import could not find the listing and imported it again as a duplicate; the new post got the photos while the original featured post kept dead image references. The listing identity is now stored in protected meta (_mlsimport_listing_key) that theme edit screens cannot touch, theme field projection no longer writes the identity as an editable custom field, the importer refuses to create a listing without an identity, and a one-time automatic migration copies the identity for all existing listings so they keep updating in place. | |
| 128 | +* Fixed listing deletion removing a property's images before the property itself - when the final post deletion failed, the site was left with a published listing whose gallery pointed at deleted images. Deletion now removes the property post first and deletes its photos only after that succeeds, on both the reconciliation path and the admin delete tool; a failed deletion now leaves the listing completely untouched (and the delete tool no longer records a deletion that did not happen). | |
| 129 | + | |
| 130 | += 7.1 = | |
| 131 | +* Import task health at a glance - new status column in the Import Tasks list showing each task's live state (synced, importing, sync overdue, stuck, failed, auto-sync off, never imported). | |
| 132 | +* Sturdier imports - manual imports are now resumable, chunked runs with a watchdog; the hourly sync picks tasks in starvation order so no task is left behind; a completed manual import now seeds the sync watermark so new tasks start hourly-syncing right away. | |
| 133 | +* Automatic incident alerts and import-health heartbeats to the MLSImport service, plus automatic token / activation recovery - so a stopped cron or failing import can be detected before it affects your site. | |
| 134 | +* Import fields are gathered automatically - as soon as your MLSImport account and MLS connection are both confirmed, the plugin fetches your MLS's field metadata silently in the background instead of making you wait on the "Stand By" page. | |
| 135 | +* Setup wizard fixes - an unrecognised theme no longer fails the system-requirements check (standalone mode works with any theme), the theme selector now pre-selects the site's own detected theme instead of defaulting to the first option, and the PHP memory requirement label was corrected to 256M. | |
| 136 | +* Redesigned admin - the whole plugin admin was restyled to match the mlsimport.com portal design: unified field sizing and focus states, one active-state colour, and a cleaned-up Tools tab. | |
| 137 | +* Provider adapters - dedicated Bright MLS and Centris (Quebec) adapter classes, and provider credential fields now only appear for the selected MLS's provider family. | |
| 138 | +* Internal rebuild of the import engine - import task execution, daily reconciliation, stored-listing writing and field-mapping persistence were consolidated into dedicated, unit- and integration-tested modules. | |
| 139 | + | |
| 140 | += 7.0.7 = | |
| 141 | +* Fixed the "search your MLS" field in the setup wizard not offering any suggestions — the wizard's scripts were not being loaded on the page, so the MLS autocomplete never started. | |
| 142 | + | |
| 111 | 143 | = 7.0.6 = |
| 112 | 144 | * Fixed a fatal error on plugin activation ("Failed opening required ... myclabs/deep-copy") caused by a development autoloader being included in the release package. |
| 113 | 145 | |
| 114 | 146 | = 7.0.4 = |