{"id":358702,"date":"2026-11-13T02:46:21","date_gmt":"2026-11-13T02:46:21","guid":{"rendered":"https:\/\/es-ec.wordpress.org\/plugins\/kg-openestate\/"},"modified":"2026-11-13T02:46:09","modified_gmt":"2026-11-13T02:46:09","slug":"kg-restate","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/kg-restate\/","author":21124662,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.4","stable_tag":"1.1.4","tested":"7.1.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"KG rEstate - Real Estate","header_author":"Kenneth Gil","header_description":"Potente plugin inmobiliario gratuito, ultraligero y agn\u00f3stico al dise\u00f1o para gestionar propiedades, cat\u00e1logos interactivos, filtros din\u00e1micos y captaci\u00f3n de leads.","last_updated":"2026-11-13 02:46:09","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/ko-fi.com\/openestate","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":75,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.4":{"tag":"1.1.4","author":"kenneth3d","date":"2026-11-13 02:46:09","revision":3799567}},"upgrade_notice":{"1.1.4":"<p>Before upgrading from an older version, replace <code>kg_openestate_<\/code> with <code>kgrestate_<\/code> in KG rEstate shortcodes in pages, widgets, builders and theme templates. Keep each shortcode&#039;s attributes.<\/p>","1.1.1":"<p>Fixes the home contact card surface when the theme removes its outer background. Use the private ZIP with the existing kg-openestate folder; back up before updating.<\/p>","1.1.0":"<p>Back up files and database before updating. Existing private installations must keep the matching plugin folder. Storage migrations are separate reviewed maintenance actions; directory renaming is not automatic. Verify forms, email delivery and theme\/cache integration after deployment.<\/p>","1.0.3":"<p>Recommended update featuring security hardening, full bilingual support, and enhancements to the administrative properties table.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3801247,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3801247,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3801315,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3801315,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.4"],"block_files":[],"assets_screenshots":{"screenshot-1-es.png":{"filename":"screenshot-1-es.png","revision":3799625,"resolution":"1","location":"assets","locale":"es","width":1512,"height":920},"screenshot-1.png":{"filename":"screenshot-1.png","revision":3799625,"resolution":"1","location":"assets","locale":"","width":1512,"height":920},"screenshot-2-es.png":{"filename":"screenshot-2-es.png","revision":3799625,"resolution":"2","location":"assets","locale":"es","width":1512,"height":1060},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3799625,"resolution":"2","location":"assets","locale":"","width":1512,"height":1060},"screenshot-3-es.png":{"filename":"screenshot-3-es.png","revision":3799625,"resolution":"3","location":"assets","locale":"es","width":1512,"height":760},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3799625,"resolution":"3","location":"assets","locale":"","width":1512,"height":760},"screenshot-4-es.png":{"filename":"screenshot-4-es.png","revision":3799625,"resolution":"4","location":"assets","locale":"es","width":1512,"height":1060},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3799625,"resolution":"4","location":"assets","locale":"","width":1512,"height":1060},"screenshot-5-es.png":{"filename":"screenshot-5-es.png","revision":3799625,"resolution":"5","location":"assets","locale":"es","width":1512,"height":1060},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3799625,"resolution":"5","location":"assets","locale":"","width":1512,"height":1060},"screenshot-6-es.png":{"filename":"screenshot-6-es.png","revision":3801315,"resolution":"6","location":"assets","locale":"es","width":1270,"height":808},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3801315,"resolution":"6","location":"assets","locale":"","width":1270,"height":808}},"screenshots":{"1":"Interactive public catalog with instant search, pill filters, and grid layout.","2":"Single property listing page with high-resolution image carousel, map, and contact form.","3":"Modern SaaS admin dashboard to manage all properties with real-time fuzzy filtering.","4":"Interactive Shortcode Generator with live Desktop and Mobile previews.","5":"General settings panel: branding colors, advisor profile, currency, watermarks, and email notifications."}},"plugin_section":[],"plugin_tags":[4528,5069,5071,2199,5074],"plugin_category":[],"plugin_contributors":[292449],"plugin_business_model":[],"class_list":["post-358702","plugin","type-plugin","status-publish","hentry","plugin_tags-listings","plugin_tags-properties","plugin_tags-property-management","plugin_tags-real-estate","plugin_tags-realtor","plugin_contributors-kenneth3d","plugin_committers-kenneth3d"],"banners":{"banner":"https:\/\/ps.w.org\/kg-restate\/assets\/banner-772x250.png?rev=3801315","banner_2x":"https:\/\/ps.w.org\/kg-restate\/assets\/banner-1544x500.png?rev=3801315","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kg-restate\/assets\/icon-128x128.gif?rev=3801247","icon_2x":"https:\/\/ps.w.org\/kg-restate\/assets\/icon-256x256.gif?rev=3801247","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kg-restate\/assets\/screenshot-1.png?rev=3799625","caption":"Interactive public catalog with instant search, pill filters, and grid layout."},{"src":"https:\/\/ps.w.org\/kg-restate\/assets\/screenshot-2.png?rev=3799625","caption":"Single property listing page with high-resolution image carousel, map, and contact form."},{"src":"https:\/\/ps.w.org\/kg-restate\/assets\/screenshot-3.png?rev=3799625","caption":"Modern SaaS admin dashboard to manage all properties with real-time fuzzy filtering."},{"src":"https:\/\/ps.w.org\/kg-restate\/assets\/screenshot-4.png?rev=3799625","caption":"Interactive Shortcode Generator with live Desktop and Mobile previews."},{"src":"https:\/\/ps.w.org\/kg-restate\/assets\/screenshot-5.png?rev=3799625","caption":"General settings panel: branding colors, advisor profile, currency, watermarks, and email notifications."},{"src":"https:\/\/ps.w.org\/kg-restate\/assets\/screenshot-6.png?rev=3801315","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>KG rEstate<\/strong> helps independent real estate advisors manage properties, publish searchable catalogs and receive client inquiries in WordPress.<\/p>\n\n<p>Catalogs and contact forms can be placed through WordPress shortcodes. Check their layout and behavior with your theme, page builder and optimization tools before deploying an update. The plugin does not require Elementor.<\/p>\n\n<h3>Key Features:<\/h3>\n\n<ul>\n<li><strong>Complete Property Management<\/strong>: Publish and manage listings with prices, operation types (Sale, Rent, Lease), HOA\/maintenance fees, built area and land size, bedrooms, bathrooms, and garages.<\/li>\n<li><strong>Interactive Catalog with Dynamic AJAX Filters<\/strong>: Real-time search by keyword, property type, operation status, and price sorting without full-page reloads.<\/li>\n<li><strong>Integrated OpenStreetMap &amp; Leaflet Maps<\/strong>: Interactive geolocation with custom pins, mobile touch navigation, and real-time synchronization with property cards.<\/li>\n<li><strong>Sliders &amp; Carousels<\/strong>: Image sliders with touch gestures, optional autoplay and a full-screen lightbox.<\/li>\n<li><strong>Direct Lead Capture<\/strong>: Floating contact form on single property pages and instant direct WhatsApp chat buttons with zero third-party commissions.<\/li>\n<li><strong>Modern SaaS Admin Dashboard<\/strong>: Intuitive admin interface with quick view, fuzzy search, bulk status actions, and streamlined property editor.<\/li>\n<li><strong>Visual Shortcode Generator<\/strong>: Create custom grid, carousel, or complete catalog configurations with live real-time previews (Desktop and Mobile) and 1-click shortcode copying.<\/li>\n<li><strong>Photo Protection &amp; Watermarks<\/strong>: Customizable image watermarks with position, opacity, and size controls, plus optional right-click save protection.<\/li>\n<li><strong>Spanish and English Interface<\/strong>: Includes a bilingual dictionary and gettext strings. Validate translations with your site's language configuration.<\/li>\n<\/ul>\n\n<h3>Bundled Resources<\/h3>\n\n<p>The plugin is licensed under GPLv2 or later. Its full GPL version 2 text is included in LICENSE.txt. Third-party copyright notices and licenses remain separate.<\/p>\n\n<p>Leaflet 1.9.4 is included locally under the BSD 2-Clause license. Its copyright and license are retained in public\/licenses\/leaflet-LICENSE.txt. The package includes the required images next to the Leaflet stylesheet and readable JavaScript in public\/js\/leaflet-src.js. Source and distribution: https:\/\/github.com\/Leaflet\/Leaflet\/tree\/v1.9.4 and https:\/\/leafletjs.com\/download.html. See THIRD-PARTY-NOTICES.txt for file locations and provenance.<\/p>\n\n<p>The original local sample illustrations have their notice in public\/images\/LICENSE.txt.<\/p>\n\n<p>Inline interface icons use Feather 4.29.2 (MIT) and Lucide 0.468.0 (ISC, including Feather-derived portions). Social platform SVGs use Bootstrap Icons 1.11.3 (MIT). The 27 local country flags use flag-icons 7.2.3 (MIT). Complete notices are retained in public\/licenses\/; sources and adaptations are described in THIRD-PARTY-NOTICES.txt. Only the SVG artwork is used; Bootstrap and flag-icons JavaScript, CSS and icon fonts are not loaded. Icon software licenses do not grant general rights to platform trademarks or imply endorsement.<\/p>\n\n<p>The complete reference icon catalogs and development audit tools are not shipped. WordPress-provided assets such as jQuery and Dashicons are used through WordPress rather than copied into the plugin. The distributed CSS has no remote font import or bundled font files.<\/p>\n\n<h3>Third-Party Services<\/h3>\n\n<p>The plugin uses the following external services when their features are used. No paid map API key is required. Leaflet code and the plugin's sample illustrations are included locally.<\/p>\n\n<ul>\n<li><p><strong>OpenStreetMap Tile Service<\/strong>:<\/p>\n\n<ul>\n<li><strong>Service Provider<\/strong>: OpenStreetMap Foundation (OSMF)<\/li>\n<li><strong>Purpose<\/strong>: Provides map tile images to visually display property locations on catalog and single listing maps.<\/li>\n<li><strong>Data Transmitted and Timing<\/strong>: When an interactive map loads or its view changes, the browser requests tiles from <code>tile.openstreetmap.org<\/code>, sending tile coordinates (<code>x<\/code>, <code>y<\/code>, <code>z<\/code>), its IP address and standard HTTP metadata such as browser information and, depending on browser policy, a referrer. Tile coordinates describe the map area being viewed. The plugin does not send lead form fields to the tile service.<\/li>\n<li><strong>Tile Usage Policy<\/strong>: https:\/\/operations.osmfoundation.org\/policies\/tiles\/<\/li>\n<li><strong>Terms of Use<\/strong>: https:\/\/wiki.osmfoundation.org\/wiki\/Terms_of_Use<\/li>\n<li><strong>Privacy Policy<\/strong>: https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy<\/li>\n<\/ul><\/li>\n<li><p><strong>OpenStreetMap Nominatim<\/strong>:<\/p>\n\n<ul>\n<li><strong>Service Provider<\/strong>: OpenStreetMap Foundation (OSMF).<\/li>\n<li><strong>Purpose<\/strong>: Converts an address or place name entered in an administrator's map search into coordinates.<\/li>\n<li><strong>Activation<\/strong>: External address search is disabled until an administrator chooses and saves a provider in Settings &gt; Catalog, Search &amp; Map &gt; Map. Selecting public Nominatim also requires an explicit acknowledgement of its usage policy. Manual pin placement and saved locations remain available. This applies to existing installations without a provider selection as well as new installations.<\/li>\n<li><strong>Data Transmitted and Timing<\/strong>: A property editor's explicit Search\/Enter action sends the text to an authenticated WordPress REST endpoint. On a cache miss, the server sends it to <code>nominatim.openstreetmap.org<\/code>, with a language preference and a User-Agent identifying KG rEstate, its version and the site's home URL. The provider receives the hosting server's IP address and normal HTTP metadata, rather than a direct browser search request. Contact form fields are not included. Do not submit personal or confidential information.<\/li>\n<li><strong>Request Handling<\/strong>: One outgoing search at a time per WordPress site, followed by a cooldown exceeding one second. Successful results are cached locally for 24 hours; empty results for 10 minutes. Provider errors are not cached as search results. There is no autocomplete, scheduled search or bulk geocoding. Search results only change the editor's form when selected by its search action; they do not save a property automatically.<\/li>\n<li><strong>Provider Choice<\/strong>: The administrator can disable search or switch to a public HTTPS Nominatim-compatible endpoint without updating the plugin. Custom providers must accept q, format=jsonv2 and limit, and return a JSON list with lat, lon and display_name. Their own terms, privacy policy and access requirements apply. Query-string credentials and private network endpoints are not supported.<\/li>\n<li><strong>Account<\/strong>: Public Nominatim needs no API key but has limited capacity and is intended here for occasional, moderate manual use. Its usage policy and availability must be considered when choosing it for a commercial site. OpenStreetMap attribution links are displayed on the maps.<\/li>\n<li><strong>Terms of Use<\/strong>: https:\/\/wiki.osmfoundation.org\/wiki\/Terms_of_Use<\/li>\n<li><strong>Usage Policy<\/strong>: https:\/\/operations.osmfoundation.org\/policies\/nominatim\/<\/li>\n<li><strong>Privacy Policy<\/strong>: https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy<\/li>\n<\/ul><\/li>\n<li><p><strong>WhatsApp<\/strong>:<\/p>\n\n<ul>\n<li><strong>Purpose<\/strong>: Opens a conversation with the configured advisor, or a customer when an administrator follows a reply link.<\/li>\n<li><strong>Data Transmitted and Timing<\/strong>: Only when a WhatsApp link is followed, <code>api.whatsapp.com<\/code> or <code>wa.me<\/code> receives the destination phone number and any prefilled message encoded in that link. The message can include the property title and URL, and text entered by the visitor. WhatsApp also receives normal connection metadata. Opening a link does not itself send the prefilled message to the recipient; sending is controlled in WhatsApp.<\/li>\n<li><strong>Account<\/strong>: Messaging is subject to WhatsApp's account and service requirements. The plugin does not request WhatsApp credentials or use the paid Business API.<\/li>\n<li><strong>Terms of Service<\/strong>: https:\/\/www.whatsapp.com\/legal\/terms-of-service<\/li>\n<li><strong>Privacy Policy<\/strong>: https:\/\/www.whatsapp.com\/legal\/privacy-policy<\/li>\n<\/ul><\/li>\n<li><p><strong>YouTube<\/strong>:<\/p>\n\n<ul>\n<li><strong>Purpose<\/strong>: Displays a video when a YouTube URL has been configured for a property.<\/li>\n<li><strong>Data Transmitted and Timing<\/strong>: The page shows a local notice and a play button. When the visitor activates the button, the browser loads the privacy-enhanced player from <code>www.youtube-nocookie.com<\/code> and may connect to associated media servers. Requests include the video identifier, IP address and browser metadata. YouTube handles any cookies and account information according to its policies.<\/li>\n<li><strong>Account<\/strong>: The plugin requires no YouTube API key; playback remains subject to YouTube's restrictions.<\/li>\n<li><strong>Terms of Service<\/strong>: https:\/\/www.youtube.com\/static?template=terms<\/li>\n<li><strong>Privacy Policy<\/strong>: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<p>Configured social profile links open their destination when clicked. Icons are rendered locally, rather than using embedded social feeds. Site owners should describe the services they enable in their site's privacy notice and configure consent controls where needed.<\/p>\n\n<p>Advisor avatars, watermark images and property media can use URLs chosen by the site owner. If these point to another host, the browser may send that host its connection metadata and referrer according to browser policy when the image is displayed. The plugin does not supply an external stock-photo provider for its sample illustrations. Review any image\/CDN providers and rights for the media you configure; they are separate from the plugin's bundled resources. Watermarks and right-click controls are presentation aids, not access control for original uploads.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the provided plugin ZIP through <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>, or upload its <code>kg-restate<\/code> folder to <code>\/wp-content\/plugins\/<\/code>. For an existing private installation, use the package whose folder matches the installed plugin and choose WordPress's replacement option. Installation through the WordPress Plugin Directory is available only after publication under the assigned slug.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in the WordPress admin dashboard.<\/li>\n<li>Follow the 3-step Welcome Wizard to set up your advisor profile, preferred currency, and automatically generate your main catalog page.<\/li>\n<li>Start adding listings via <strong>KG rEstate &gt; Add Property<\/strong>.<\/li>\n<li>Insert your catalog anywhere using the shortcode <code>[kgrestate_properties]<\/code> or build tailored shortcodes via <strong>KG rEstate &gt; Shortcodes<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20kg%20restate%20compatible%20with%20visual%20page%20builders%20like%20elementor%20or%20divi%3F\"><h3>Is KG rEstate compatible with visual page builders like Elementor or Divi?<\/h3><\/dt>\n<dd><p>KG rEstate provides shortcodes usable in WordPress content and in builders that render WordPress shortcodes. Validate the specific theme\/builder combination and its styles; compatibility with every configuration is not guaranteed.<\/p><\/dd>\n<dt id=\"does%20kg%20restate%20require%20paid%20api%20keys%20for%20maps%3F\"><h3>Does KG rEstate require paid API keys for maps?<\/h3><\/dt>\n<dd><p>No. KG rEstate uses OpenStreetMap and Leaflet out of the box, meaning you don't need to register credit cards or configure Google Maps API keys to get fully interactive maps.<\/p><\/dd>\n<dt id=\"can%20i%20configure%20custom%20currencies%20and%20measurement%20units%3F\"><h3>Can I configure custom currencies and measurement units?<\/h3><\/dt>\n<dd><p>Yes. You can customize the currency symbol, ISO code (USD, EUR, GBP, CAD, MXN, etc.), price formatting style, and area measurement units (m\u00b2, sq ft, yd\u00b2, v\u00b2, or hectares) in <strong>KG rEstate &gt; Settings<\/strong>.<\/p><\/dd>\n<dt id=\"where%20are%20client%20inquiries%20delivered%3F\"><h3>Where are client inquiries delivered?<\/h3><\/dt>\n<dd><p>Inquiries are sent directly to the configured advisor's email address and securely stored in the WordPress database under the <strong>KG rEstate &gt; Inquiries<\/strong> inbox.<\/p><\/dd>\n<dt id=\"what%20inquiry%20data%20and%20submission%20controls%20does%20the%20plugin%20use%3F\"><h3>What inquiry data and submission controls does the plugin use?<\/h3><\/dt>\n<dd><p>The inbox stores the submitted name, email, phone, message, property context and submission\/mail status. An inquiry is saved before attempting email. Mail transport acceptance does not guarantee delivery. General inquiries use this site's name and home URL; property inquiries use the published property's title and URL from WordPress.<\/p>\n\n<p>Public submissions require POST and a valid nonce, with server-side type and length validation. A hidden optional trap field supplements these checks. Existing custom forms without that field remain supported. Names allow up to 120 Unicode characters and messages up to 5,000; oversized data is rejected rather than truncated. Phone input remains optional at the server boundary for compatibility with custom forms.<\/p>\n\n<p>Fixed ten-minute windows allow five validated attempts per contact email, thirty per connection address, and 120 site-wide. Limits are shared across concurrent requests. A limited request receives a retry interval and does not save an inquiry or send email. An admitted attempt consumes allowance even if inbox storage or mail later fails. These controls reduce repeated submissions; they do not identify every bot or guarantee protection against distributed attacks.<\/p>\n\n<p>The rate-control option stores window-specific HMAC identifiers derived from the email and connection address using a site secret, plus counts; it adds no clear IP address or clear email to those counters. These identifiers are pseudonymous, not guaranteed anonymous. The bounded option is replaced when a valid attempt reaches a later window; expiry does not itself erase it at exactly ten minutes. Inbox inquiries remain until manual deletion unless an administrator explicitly enables a reviewed retention policy. There is no automatic deletion at 300 inquiries.<\/p>\n\n<p>Connection limits use the web server's REMOTE_ADDR, not client-supplied forwarding headers. Shared networks or reverse proxies can share an allowance. Before deployment, verify the hosting server's trusted-proxy configuration and actual form behavior. No external CAPTCHA service is contacted. Site owners should describe inquiry storage, email handling and these controls in their privacy notice.<\/p><\/dd>\n<dt id=\"can%20wordpress%20export%20or%20erase%20a%20contact%27s%20inquiry%20data%3F\"><h3>Can WordPress export or erase a contact's inquiry data?<\/h3><\/dt>\n<dd><p>Yes. KG rEstate registers providers for <strong>Tools &gt; Export Personal Data<\/strong> and <strong>Tools &gt; Erase Personal Data<\/strong>. These use WordPress capabilities, request records and nonce checks. The plugin adds no public export or deletion URL. Follow the native request\/confirmation workflow; authorized administrators retain WordPress's ability to force a request. Generating an export requires the ZipArchive support used by WordPress itself.<\/p>\n\n<p>The exporter includes the plugin's contact fields, inquiry dates, property context, read\/mail status and that email's submission count when present. It excludes the advisor's separate address, other contacts and shared network counters. Extension-defined fields need their own exporter. Reports are paginated in groups of fifty. If the requested contact's data changes between pages, export stops and must be restarted from the beginning; unrelated contacts do not invalidate it. User text is escaped for WordPress's HTML report.<\/p>\n\n<p>Erasure removes matching inquiry records, including additional fields on those records, in batches without skipping a shrinking list. It preserves other contacts. An active pseudonymous submission counter is reported as retained so erasure cannot immediately bypass the submission limit. A later explicit erasure can safely clean expired counter state. Repeated erasure is safe. These callbacks do not erase sent mail, backups, other providers' data or WordPress-managed privacy reports and request records. WordPress manages those reports separately.<\/p>\n\n<p>The plugin also offers editable text in the WordPress privacy policy guide. It does not publish or replace your policy page. Review its purposes, providers and actual retention practices before publishing a policy.<\/p><\/dd>\n<dt id=\"can%20i%20configure%20inquiry%20retention%3F\"><h3>Can I configure inquiry retention?<\/h3><\/dt>\n<dd><p>Automatic cleanup is <strong>disabled by default<\/strong>. In <strong>KG rEstate &gt; Inquiries &gt; Inquiry retention<\/strong>, propose a period from 1 to 3650 days, review the current eligible\/protected counts, then explicitly confirm and enable the reviewed policy. The displayed proposal of 90 days is not an enabled policy or a legal recommendation. Review tokens expire after ten minutes and are tied to the operator, site, inbox and policy. Saving does not itself delete inquiries. A changed review must be prepared again.<\/p>\n\n<p>New public inquiries record a server-generated UTC timestamp, also included in privacy exports. Only records with a valid integer UTC timestamp are automatically eligible. Older inquiries that have only a local date, invalid dates and future timestamps are preserved. They can still be deleted manually or through the native privacy tools. No legacy dates are guessed or backfilled during an update.<\/p>\n\n<p>When opted in, an hourly WP-Cron event removes at most fifty inquiries older than the chosen period per execution, including unread inquiries. Ages use 24-hour UTC days; a record exactly on the cutoff is preserved until it becomes older. More batches may be needed after a backlog. Scheduling depends on WordPress traffic or a configured server cron and does not guarantee deletion at the exact expiry time. Scheduling failures and the last advisory result are shown in the private controls. Inspect the real hosting configuration before deployment.<\/p>\n\n<p>Disable cleanup directly to stop future deletion. Each write compares both the inquiry snapshot and the active policy bytes atomically, so an obsolete worker cannot continue after a policy change commits. Plugin deactivation removes its future cleanup events while preserving policy and inquiries; reactivation can resume a previously enabled policy. Updating from an installation without this policy leaves it disabled. The cleaner does not erase sent emails, backups, WordPress privacy reports or other services' data. Keep a recoverable backup and review your actual privacy policy before opting in.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Register shortcodes with the <code>kgrestate_<\/code> prefix across the catalog, galleries and contact forms.<\/li>\n<li>Use the same names when detecting catalog pages and loading frontend assets.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Use the official OpenStreetMap tile endpoint and display attribution on each interactive map.<\/li>\n<li>Isolate bundled Leaflet and distinguish legacy KG rEstate records from unrelated property post types.<\/li>\n<li>Load the privacy-enhanced YouTube player only after the visitor chooses to play a video.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Validate custom colors, card radii and contact form widths before rendering CSS.<\/li>\n<li>Use the kgrestate prefix for new identifiers and preserve existing storage, shortcodes and endpoints during upgrades.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Preserve the contact form's own white surface on the home page when the theme's outer panel is transparent, keeping advisor details readable.<\/li>\n<li>Verify the supplied Astra child home with the contact shortcode at five desktop\/mobile viewport widths.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Harden administrative and REST permissions, metadata synchronization and native property input validation.<\/li>\n<li>Preserve legacy shortcodes, API aliases and data identifiers for existing installations.<\/li>\n<li>Add reviewed, explicit migrations to prefixed storage identifiers; updating plugin files does not automatically convert an existing catalog.<\/li>\n<li>Load styles and scripts through WordPress APIs with conditional loading and explicit dependencies.<\/li>\n<li>Bundle static map, icon, flag and sample resources locally with license\/source notices.<\/li>\n<li>Document external services and require an explicit geocoding provider choice.<\/li>\n<li>Improve inquiry storage concurrency, submission limits, CSV safety, privacy export\/erasure and optional reviewed retention.<\/li>\n<li>Correct VIP controls, saved map locations, gallery indicators\/transitions and contact form rendering, including mobile social links.<\/li>\n<li>Improve localization and error handling in setup, previews and forms.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Refined the home contact shortcode layout for social links and removed its duplicate inner card surface.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed the contact form shortcode to display the configured agent profile photo.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Improved VIP property distinction with a more visible but restrained gold border.<\/li>\n<li>Fixed VIP toggle state refresh and property location restoration in the modern editor.<\/li>\n<li>Refined property gallery image indicators and their initial display.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Complete optimization and coverage of English and Spanish built-in translations.<\/li>\n<li>Added dedicated Operation column with badges (Sale \/ Rent \/ Lease) in the admin properties table.<\/li>\n<li>Smart text truncation with ellipsis for long property titles to maintain table layout consistency.<\/li>\n<li>Native pluralization support via <code>ngettext<\/code> filters.<\/li>\n<li>Security enhancements, input unslashing, output escaping, and database query preparation adhering to WordPress.org standards.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Enhanced mobile responsiveness for map controls and filter toggles.<\/li>\n<li>Performance optimizations for AJAX search queries.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed calculation and display logic for maintenance\/HOA fees on rental properties.<\/li>\n<li>Added support for customized direct WhatsApp chat message links.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial stable release of KG OpenEstate.<\/li>\n<\/ul>","raw_excerpt":"Property listings, searchable catalogs, maps and inquiry management for independent real estate advisors.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358702"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kenneth3d"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358702"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358702"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358702"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358702"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358702"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}