=== Domain For Sale – Landing Page Per Domain, Domain Mapping, Offers & Listings ===
Contributors: themeatelier, faysal61, shshakib2001, tamimaziz
Tags: domain, marketplace, domain name, domain mapping, wordpress domain names
Requires at least: 5.9
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 3.8.0
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

List every domain you own, give each its own landing page and real mapped domain, and manage offers from WordPress.

== Description ==

**Domain For Sale** is a WordPress plugin that lets you create professional **domain for sale landing pages** and sell unused domains directly from your website. Accept offers and inquiries, manage negotiations, and handle domain sales entirely from your WordPress dashboard—without relying on third-party marketplaces.

With this plugin, you can showcase domains using customizable landing page templates and built-in offer forms. Every domain renders either the shared single page or its own template design, whichever you pick for it. Buyers can submit offers or inquiries directly, while you manage all submissions from a centralized **offer management dashboard** inside WordPress. Perfect for domain investors who want full control over offers, negotiations, and buyer communication in one place.

Built-in **domain mapping** lets you point a real domain you own directly at one of your listings — visitors who type that domain see your listing with no redirect, the domain staying in their address bar the whole time. No separate WordPress install needed for every domain in your portfolio.

A visual **form builder** lets you decide what buyers are asked: reorder and pair fields, hide the ones you do not need, choose which are required, and reword every label, button and validation message — no code, and nothing a buyer types goes unchecked on the server.

Each offer includes detailed buyer information such as contact details, proposed amount, message, and submission context, helping you evaluate leads with confidence. Automatic email notifications keep both admins and buyers informed at every stage, with customizable templates for a professional sales experience.

Use the plugin as a full domain sale theme replacement or embed listings anywhere using shortcodes. It works with any WordPress theme and supports Gutenberg, Elementor, and popular page builders. Fully responsive layouts ensure your sale pages look great on all devices.

Designed for domain investors, agencies, and website owners, this tool offers a simple interface for beginners and flexible customization options for advanced users. Regular updates, multisite support, and clear documentation make it easy to manage multiple listings at scale.

Turn your unused domains into opportunities with **Domain For Sale** — a flexible WordPress plugin to sell domains with landing pages, offers, and inquiries.

**👁️[Plugin Demo](https://wpdomainforsale.com/#demo) | 🚀[Pro Version](https://wpdomainforsale.com/) | 📖[Documentation](https://wpdomainforsale.com/docs/) | 👩🏼‍💻[Support](https://wordpress.org/support/plugin/domain-for-sale/) | 🌟[Rate this plugin](https://wordpress.org/support/plugin/domain-for-sale/reviews/#new-post)**

== Video demo ==
[youtube https://youtu.be/jnYCZffVfDk]

== Key Features: ==

* **Domain Listing & Showcase** – Showcase multiple domains using elegant layouts with powerful customization options.

* **Landing Pages** – Create professional landing pages for individual domains. Each domain chooses its own page — the standard single page, or the design of the template built for it — with a site-wide default for domains that have not chosen. These pages can also be used as single pages when domains are displayed in listings.

* **Domain Mapping** – Point a real domain you own directly at one of your listings. Visitors who type that domain see your listing with no redirect, the domain staying in their address bar the whole time — no separate WordPress install needed for every domain in your portfolio.

* **Unlimited Templates** – Create and manage unlimited sale templates using a dedicated custom post type.

* **Bulk Import (CSV, XML, JSON)** – Upload multiple domains at once and manage large portfolios easily.

* **Flexible Display Options** – Use the plugin as a full theme replacement or embed sale pages anywhere using shortcodes.

* **Built-in Offer & Inquiry Form** – Allow buyers to submit offers and inquiries directly from your sale pages.

* **Visual Form Builder** – Drag fields to reorder them or pair them side by side, hide the ones you do not need, choose which are required, and reword every label, placeholder, help line and button — separately for Fixed price and Make an offer domains. Phone numbers are accepted in international format. Custom questions of your own (text, dropdown, choices, date, a consent checkbox with a link) come with Pro.

* **Centralized Offer Management Dashboard** – View, search, filter, and manage all incoming submissions from one place inside WordPress.

* **Detailed Offer & Buyer Information** – Each offer includes buyer name, email, phone number, proposal message, domain name, date, and submission context.

* **Automatic Admin Email Notifications** – Receive instant email notifications when a new offer or inquiry is submitted.

* **Bidder Confirmation Emails** – Automatically send confirmation emails to buyers after they submit an offer.

* **Customizable Email Templates** – Customize admin and bidder email subjects and messages using dynamic tags such as `{domain}`, `{name}`, `{email}`, `{phone}`, `{offer}`, `{proposal}`, `{date}`, `{siteTitle}`, `{currentURL}`, and `{all_fields}` for every answer at once. An Insert tag picker lists what each email accepts — or type `{` to pick one as you write — and a hidden field's line is left out of the email automatically.

* **Price Display Options** – Display prices using dynamic placeholders like `{price}` or `{{price}}`.

* **Currency Selection** – Choose your preferred currency for displaying prices.

* **Responsive & Mobile-Friendly Design** – Sale pages automatically adapt to desktops, tablets, and mobile devices.

* **Pre-Designed Layouts** – Choose from ready-made layouts to quickly launch professional pages.

* **Advanced Design Controls** – Customize container width, column spacing, background images, overlays, and color schemes without coding.

* **Typography Controls** – Control fonts, sizes, colors, line height, and text styles for names, titles, content, and forms.

* **Multiple Color Schemes** – Select from predefined color schemes to match your brand instantly.

* **Custom Contact Information Blocks** – Add multiple contact details such as email addresses and phone numbers with icons.

* **AJAX-Powered Forms** – Fast, smooth form submissions without page reloads.

* **Custom Success & Error Messages** – Customize form success messages, error messages, validation messages and button labels, site-wide or for a single field.

* **Custom CSS & JavaScript Panels** – Add your own CSS or JavaScript directly from the plugin settings.

* **SEO-Friendly Structure** – Clean markup and lightweight output designed to work well with SEO plugins.

* **Page Builder Compatibility** – Works seamlessly with Gutenberg, Elementor, Classic Editor, WPBakery, Divi, Beaver Builder, Bricks, Oxygen, and more.

* **Theme-Agnostic** – Compatible with all WordPress themes including Astra, Blocksy, Kadence, Neve, OceanWP, Avada, and Divi.

* **Multilingual & RTL Ready** – Translation-ready and compatible with WPML, Polylang, Loco Translate, and RTL languages.

* **Multisite Compatible** – Fully functional in WordPress Multisite environments.

* **Import & Export Domains (CSV, XML, JSON)** – Easily upload and download domain data in bulk.

* **Import & Export Listings (CSV, XML, JSON)** – Transfer and manage listing data across websites.

* **Settings Import & Export (JSON)** – Backup and restore plugin settings quickly.

* **No Coding Required** – Beginner-friendly UI—install, activate, create a template, and start receiving offers.

* **Developer-Friendly Architecture** – Clean, extensible codebase suitable for customization and advanced use cases.

* **Cross-Browser Compatibility** – Works smoothly on Chrome, Firefox, Safari, Edge, and Opera.

* **Comprehensive Documentation** – Step-by-step guides and tutorials for easy setup and usage.

* **Regular Updates & Active Support** – Ongoing improvements, security updates, and responsive support.

== Other plugins by ThemeAtelier ==

* [Darkify Dark Mode](https://wordpress.org/plugins/darkify/) - Lightweight, customizable WordPress dark mode plugin for a sleek, accessible, and eye-friendly experience.
* [WhatsApp Chat Help](https://wordpress.org/plugins/chat-help/) - A flexible WhatsApp chat plugin that helps website visitors start instant conversations with you directly from your site.
* [Eventful – Events Showcase and Filter Bar](https://wordpress.org/plugins/eventful/) - An event display plugin for The Events Calendar that helps you showcase events in clean, modern, responsive layouts.
* [Greet – Video Bubble Warm Welcome Plugin](https://wordpress.org/plugins/greet-bubble/) - A video welcome bubble plugin that helps you greet visitors warmly and provide quick contact options.
* [Eventful for Elementor](https://wordpress.org/plugins/eventful-for-elementor/) - An Elementor addon for The Events Calendar that lets you design and display events using Elementor widgets.
* [Better Chat Support For Messenger](https://wordpress.org/plugins/better-chat-support/) - A Facebook Messenger chat plugin that allows visitors to contact you instantly through Messenger.

== External services ==

This plugin connects to the following external services. Each service is described below, including what data is sent and when.

**ipwhois.app API**

We use the ipwhois.app API to detect visitor location to personalize the message and offer form on sale pages.

* Data sent: The visitor's IP address.
* Data received: Public geolocation information based on IP, such as country, city, timezone, ISP/organization, and approximate latitude/longitude.
* When: On page load when a Domain For Sale page is displayed to a visitor.
* Service provider: ipwhois.app — [Terms](https://ipwhois.io/terms) | [Privacy Policy](https://ipwhois.io/privacy)

Example response includes publicly available location data like country and city — no personal account information is collected.

**Appsero SDK**

Domain For Sale uses the [Appsero](https://appsero.com) SDK to collect basic telemetry data, but only after the user explicitly opts in via an admin notice.

* Data sent: Basic site and plugin telemetry (only after user confirmation).
* When: Only after the user explicitly allows it via the admin notice. The SDK does not gather any data by default.
* Service provider: Appsero — [Privacy Policy](https://appsero.com/privacy-policy/)

Integrating the Appsero SDK does NOT immediately start gathering data without user confirmation in any case.

== Installation ==
= AUTOMATIC INSTALLATION (EASIEST WAY) =

* Visit **Plugins > Add New**.
* Search for **Domain For Sale**.
* Install and activate the plugin.

= MANUAL INSTALLATION =

**Uploading in WordPress Dashboard**

* Download domain-for-sale.zip
* Navigate to the ‘Add New’ in the plugins dashboard
* Navigate to the ‘Upload’ area
* Select domain-for-sale.zip from your computer
* Click ‘Install Now’
* Activate the plugin in the Plugin dashboard

**Using FTP**

* Download domain-for-sale.zip
* Extract the domain-for-sale folder to your computer
* Upload the domain-for-sale folder to the /wp-content/plugins/ directory
* Activate the plugin in the Plugin dashboard

= After activation =
* Go 'Domain For Sale' Menu from the left panel of admin
* Configure settings as you want.

[For basic usage, have a look at the quick start guide](https://wpdomainforsale.com/docs/quick-start-guide/)

== Screenshots ==

1. Domain portfolio grid listing on the front end - responsive domain-for-sale cards showing price, Buy now, Place a bid and Make an offer calls to action, with search and sort built in.
2. Domain portfolio list layout - a compact table view of every domain for sale with attributes, description, price and a one-click action column, ideal for large portfolios.
3. Buyer filter panel on the domain listing - visitors narrow the portfolio by sale type, status, extension, character length, price range and category to find the right domain fast.
4. Single domain sale page with a fixed price - asking price, domain story, keyword tags and a proposal form in one conversion-focused layout, plus related domains to keep buyers browsing.
5. Make an offer landing page - a "Name your price" form that captures buyer name, email, phone, offer amount and proposal, so no lead is lost on a domain without a public price.
6. Ready-made Layout 01 domain landing page - a bold dark hero with the price badge, sale copy, contact details and an inline Make an Offer form for instant parking-page conversions.
7. Domain For Sale admin dashboard - total domains, offers, impressions and listings at a glance, with a domain performance trendline and per-domain results table.
8. Domains manager in the WordPress admin - search, filter by extension, sale method and status, bulk import or export, and edit or publish any domain landing page in a click.
9. Domain Options editor - set the domain name, listing tagline, description, logo, category, landing page design and choose fixed price, make an offer or accepting bids for each domain.
10. Offers inbox for a single domain - review the submitted form data alongside buyer IP, device, browser, platform, screen, language and referrer, then export or start an escrow payment.
11. Domain listing builder, Domains tab - include or exclude domains and filter the listing by sale status, sale method, category and extension, then paste the generated shortcode anywhere.
12. Domain listing builder, Layout and style tab - set columns per device, card gap, style presets, card description source and attribute chips for a pixel-perfect responsive domain grid.
13. Domain listing builder, Buyer controls tab - turn the search and filter bar on or off and pick exactly which filters visitors can use on your domain marketplace.
14. Landing page template editor, Content Options - pick a template layout, link a domain, and control the offer tag and price tag copy with dynamic price placeholders.
15. Landing page template editor, Style Options - choose a predefined or custom colour scheme, container width, column gap and a body background image with full position and repeat control.
16. Landing page template editor, Typography - set font family, weight, size, line height and colour for body text and the domain name, with separate tablet and mobile values.
17. All domain offers in one inbox - filter by domain, extension or date range, search leads, expand full submission details and export every offer for follow-up.
18. General settings - choose the currency used across offer and Escrow.com forms and set the primary and secondary brand colours applied to every button, badge and link.
19. Sales form builder - rename every label and placeholder on the offer, bid and purchase forms so the buying experience matches your brand and language.
20. Offer email notification settings - send new offer alerts to one or more addresses and customise the subject line and email body with dynamic tags such as {domain}, {offer} and {name}.
21. Single page settings - control the header and footer on domain pages, set the single domain URL slug for clean SEO-friendly permalinks and adjust the content width.
22. Assign Template rules - decide by rule which landing page design renders which domains, with an ordered, first-match-wins list and a standard page fallback.
23. Import and export tools - back up or migrate domains, templates, domain listings and settings between WordPress sites as CSV, XML or JSON.

== Upgrade Notice ==

= 3.8.0 =
Adds the Form Builder: reorder, pair, hide or require the fields on the Fixed price and Make an offer forms, and reword labels, buttons and validation messages. Phone now accepts international numbers. Your wording carries over; nothing changes until you save.

= 3.7.0 =
Adds Domain Mapping (Settings → Domain Mapping): point any domain you own directly at a Domain listing or Template, with the mapped domain staying in the visitor's address bar and no redirect. Also fixes the offer form failing to submit from a mapped domain, and offer-form fields rendering with no visible background or border under some themes, including Blocksy.

= 3.6.1 =
Fixes pages that could not be edited with Elementor while the plugin was active ("Sorry, the content area was not found in your page"). Recommended for every site that builds pages with Elementor or another page builder.

= 3.6.0 =
Fixes domains whose landing page was designed by a template rendering without that design. Adds a per-domain Landing page choice and Settings → Single Page → Assign Template, which decides by rule which design draws your domains. Each domain's current design is written down on upgrade, so every page renders as it did. Recommended for any site that split domains and templates.

= 3.5.2 =
Security release: fixes a broken access control issue in the Offers and Dashboard REST endpoints. Updating is strongly recommended for all sites.

This update includes the latest features, bug fixes, and improvements.

== Frequently Asked Questions ==

= Who should use Domain For Sale? =
This plugin is ideal for domain owners, investors, agencies, and businesses who want to create a professional landing page and receive offers or inquiries directly through their WordPress website.

= Do I need coding skills to use this plugin? =
No coding skills are required. The plugin provides a user-friendly interface with visual controls and simple settings to create and manage sale pages.

= Is the plugin responsive? =
Yes. All layouts are fully responsive and automatically adapt to desktops, tablets, and mobile devices.

= Can I add a sale page anywhere on my website? =
Yes. You can display layouts using shortcodes, Gutenberg blocks, or Elementor widgets, allowing you to place them on any page or post.

= Can I create multiple sale layouts with different settings? =
Yes. You can create multiple layouts, each with its own design, content, and configuration options.

= Will it work with my WordPress theme? =
Yes. The plugin works with most modern WordPress themes that follow WordPress coding standards and does not rely on theme-specific functionality.

= How can buyers contact me about purchasing a domain? =
Interested buyers can submit offers or inquiries using the built-in form. All submissions are stored in the Offers section of the plugin, and email notifications can be enabled. You may also display your email address or phone number on the page for direct contact.

= Can I use this plugin for commercial purposes? =
Yes. The plugin is free to use for both personal and commercial projects.

= I configured everything correctly, but I am not receiving emails. Why? =
Some hosting providers restrict the default PHP mail function. To improve email delivery, we recommend using an SMTP plugin such as WP Mail SMTP or Fluent SMTP.

= Is it multilingual ready? =
Yes. The plugin is translation-ready and works with popular multilingual plugins such as WPML, Polylang, GTranslate, Loco Translate, and WPGlobus.

= Is it compatible with WordPress Multisite? =
Yes. The plugin is fully compatible with WordPress Multisite environments.

= How can I get support? =
You can ask questions or report issues in the official WordPress.org support forum:
https://wordpress.org/support/plugin/domain-for-sale/

= I have suggestions or feature requests. How can I share them? =
We welcome feedback and suggestions. You can share ideas or report bugs through the support forum. We actively review user feedback to improve the plugin.

= Can each domain use a different landing page design? =
Yes. Every domain has a Landing page control under its name: Standard page renders the shared single page, Template design renders the template built for that domain. Settings → Single Page sets the default for domains that have not chosen. Selecting which template when a domain has several, and applying a choice across the whole catalogue, are Pro features.

= I want more features. Is there a Pro version available? =
Yes. A Pro version is available and includes additional features and enhancements. You can learn more on the official website:
https://wpdomainforsale.com/pricing/

== Changelog ==
= 3.8.0 - 11 September 2026 =
* New: Form Builder, under Settings → Sales Forms → Form Builder → Form fields. Build the Fixed price and Make an offer forms visually: drag fields to reorder them or pair them side by side, hide the ones you do not need, choose which a buyer must fill in, and reword every label, placeholder, help line and button. Name, Phone and Proposal can each be hidden or made optional; Email and the amount always stay, because confirmation mail and the minimum-offer check depend on them. Your existing labels, field order and button wording carry over as they are, and nothing on the site changes until you save.
* New: Fixed-price domains have a form layout of their own, separate from Make an offer. Its Offer field appears only on domains that also accept offers below the asking price, and its button takes over from the old "Send proposal button label" setting.
* New: The browser's own validation messages ("Please enter a valid email address.") now use your wording. Set it once under Messages & Errors → Required Field Error and Invalid Field Error, or give any field its own error message in the builder; the same text is shown whether the browser or the server catches the mistake.
* New: Insert tag, on every email setting under Notifications and on the messages that take tags. A small button opens a searchable list of the tags that field accepts, each named in plain words, or type `{` in the field to pick one as you write. The old "Available tags" lines are gone.
* New: `{all_fields}` lists every answer the buyer gave, one "Label: value" per line, and `{field:key}` inserts a single one. When a field is hidden, a line such as "Phone: {phone}" is removed from your emails automatically instead of arriving empty.
* Changed: The phone field accepts international numbers — a leading +, spaces, brackets and dashes — and no longer shows number spinner arrows. It was a number input, which rejected "+44 20 7946 0958" outright.
* Changed: The Make an offer button reads "Send offer" by default rather than "Send proposal" — the buyer is naming a price, and with the Proposal field hidden there is no proposal to send. The Fixed price form keeps "Send proposal". A site that has set its own button wording keeps it.
* Changed: The name field accepts accented letters and apostrophes. "José" and "O'Neil" were rejected by a pattern that allowed only unaccented letters and digits.
* Changed: Required fields are now checked on the server as well as in the browser, and an offer only records the fields its form actually asks for. Previously any extra value posted to the form was stored and mailed along with the offer.
* Changed: The Field labels group, the Make an offer Button Label and the Fixed price "Send proposal button label" settings are replaced by the builder, which carries their saved wording.
* Fixed: Help text under a field was white on the light form card in the shortcode layouts, and so unreadable.
* Fixed: Uneven spacing between fields — a field paired beside another left a gap under its row that a field on its own did not.

= 3.7.0 - 04 September 2026 =
* New: Domain Mapping, under Settings → Domain Mapping. Point any domain you own directly at a Domain listing or Template — visitors who type that domain in see the listing with no redirect, the domain staying in their address bar the whole time, and no separate WordPress install to run for it. The domain's own DNS still has to point at this server, and your hosting account still has to be told the domain shares this site's files; the field itself documents both. Add, edit and remove mappings from one screen, with a search picker to find what to map and an on-demand check for whether a mapped hostname is currently reachable. Canonical URLs and Yoast/Rank Math's own canonical output are set to the mapped domain automatically, so search engines are told the mapped address is the real one rather than treating it as duplicate content.
* Fixed: The offer/proposal form's Name, Email, Phone and Proposal fields could render with no visible background or border under some themes, Blocksy among them — the fields blended invisibly into the card behind them. Their styling depended on CSS custom properties that a theme's own form reset could stop from resolving, and a custom property failing to resolve drops the whole declaration it appears in rather than falling back to anything. The fields now carry fallback values of their own and are protected against a theme's global form styling overriding them.
* Fixed: The offer form could not be submitted from a mapped domain — it failed with an empty "Error" dialog. The form posted to admin-ajax.php on the site's own configured domain, which from a mapped domain is a different origin, so the browser blocked the response before the page ever saw it. It now posts to the host the visitor is actually on, which the same WordPress install already answers, and mapped hostnames are additionally registered as allowed origins so a host that refuses to serve /wp-admin/ on anything but the primary domain still works.
* Changed: An offer no longer records the buyer's approximate location. It came from a third-party IP lookup (ipwhois.app) called on every page view, which had begun returning 403 on its free tier and logged an error in the browser console. Offers still record the buyer's IP address, device, browser, platform, screen, language, page and referrer, and offers taken before this update keep the location they were saved with.

= 3.6.1 - 01 September 2026 =
* Fixed: Pages could not be edited with Elementor while the plugin was active — the editor stopped on "Sorry, the content area was not found in your page." A template set to replace the theme took over every front-end request, including the one Elementor loads to find the content area it attaches to, so the editor never saw a page to edit. The takeover now stands down inside a page builder's editor and its editing preview — Elementor, Beaver Builder, Divi, WPBakery, Oxygen, Bricks, Brizy, Thrive Architect, Breakdance, Zion Builder and SiteOrigin — while the public front end renders exactly as before.
* Fixed: A listing had nowhere to copy its shortcode from. It was suppressed on the grounds that the Publishing card carried it instead, which only ever held true for templates. Every record that has a shortcode now shows it in one place.
* Fixed: The Offers filter bar left the right half of a wide card empty — three fixed-width selects huddled on one line with the date range and search dropped to the next. The filters now share the row evenly and reflow to fewer per line, then to one, as the screen narrows.
* Fixed: The editor's loading skeleton drew a screen the editor stopped having several releases ago — a 220px nav rail down the left and a single card. It now draws the sidebar the editor actually paints.
* Changed: The editor's sidebar is one card. Everything it used to spread over three or four panels — the preview controls, status, where the record is placed and the shortcode that places it, and a domain's landing page, logo and categories — reads top to bottom in Publishing, above the Move to Trash / Reset / Update row. Each panel had been a card header restating the label of the single control beneath it.
* Changed: That card stays pinned as the form scrolls past it, so Preview and Update are reachable from anywhere in a long form. On a window too short to hold it, the rows inside it scroll while the actions stay on its bottom edge, rather than the card being cut off at the fold.
* Changed: The preview toggle is no longer a button floating over the bottom-right corner of the screen, where it covered whatever sat beneath it and stood two cards away from "Open preview in new tab". Both preview controls sit together at the top of the Publishing card.
* Changed: The placeholder reference — {domain}, {price} and the rest — moves from a sidebar panel into a "Dynamic placeholders" button that opens the full list on click. It is a lookup read once while writing the copy, and as a panel it was the longest thing in the sidebar, pushing everything actually edited further down the page.
* Changed: The Pro features card no longer shows in the Template and Listing editors, whose Publishing card is pinned — a second card under a pinned one leaves the upsell on screen while the record being edited scrolls away. It stays in the Domain editor, whose sidebar scrolls with the form and is not pinned for that reason.
* Changed: The "Upgrade to Pro!" menu item opens in a new tab. It is the one item in that menu that leaves the site, and following it in place cost the admin whatever screen they were on, an unsaved editor included.

= 3.6.0 - 24 August 2026 =
* Fixed: A domain whose landing page was designed by a template rendered without that design — no sale title, no offer tag, no contact block. A template and the domain it draws share a slug, the domain wins that URL, and a domain's own record carries none of the copy the template holds. The domain's page now renders the template built for it. Sites left with blank-looking landing pages after the domain/template split are the ones this fixes.
* Fixed: The template editor's preview pane showed the domain's page instead of the template being edited, for the same reason — the preview URL is the one the domain owns. The pane now pins the template it is previewing.
* Fixed: Layout 01 opened on Make an Offer rather than Purchase Now on any site that had never opened Settings → Payments, contradicting "Make as Toggle Form", which is on by default.
* Fixed: Templates rendered in the Elementor editor fell back to the browser's serif instead of the font they were set to. The widget renders after the page has printed its font stylesheet, so the fonts were never requested; the editor preview now loads them, and every font setting carries a sans-serif fallback for when a web font cannot load.
* Fixed: Importing a CSV that matched a draft domain or listing inserted a second copy beside it on every run, because the "does this already exist?" lookup only searched publicly readable posts.
* New: Landing page, per domain — the standard single page, or the design of the template that selects it. It sits under the domain name, in its own sidebar card.
* New: Default landing page, under Settings → Single Page, deciding for domains that have not chosen one. Existing domains keep the page they already render.
* New: A Domain Listing block for the block editor. Pick a listing in the sidebar and it renders in place — cards, search, sort and pagination — and the preview behaves exactly as the published page does, so a listing can be arranged without leaving the editor.
* Changed: The listing tagline is a single-line field, being a single-line value; the asking and reduced prices share one row with the currency named once on its heading; and the tagline and description now say where they are read, since the Landing page choice governs neither.
* Security: Exported CSVs neutralize values a spreadsheet would run as a formula. Offer proposals and domain names are typed on a public form, so an export opened in Excel, LibreOffice or Sheets was a path from a stranger's keyboard into the seller's machine. Applies to the offers export and to every domain/listing export.
* Security: The "resend verification" and "send congratulations" admin actions now require a request token as well as the capability, so a page an administrator merely visits can no longer make their browser send those emails.
* Security: The Escrow API key is no longer printed into the admin page. Only whether one is configured is sent to the browser, which is all the screen ever asked.
* Security: Added the missing direct-access guard to fourteen PHP files, so requesting one by URL exits instead of executing.
* Improved: Uninstall honours "Clean-up Data on Deletion" as before, but now clears everything the plugin created — including posts left behind by earlier releases, per-user screen preferences, scheduled events, and every site on a multisite network. It no longer loads the plugin to do it, so an error elsewhere cannot leave the cleanup half-finished. Options belonging to the Pro plugin are deliberately left alone.
* New: Settings → Single Page → Assign Template decides which design draws your domains, as a rule rather than a setting written onto each one. Point every domain at one design and changing that rule changes every page it covers; changing it back restores them. Replaces the site-wide default landing page and the "apply to all domains" sweep. Rules that segment a catalogue — by category, or by domains named one by one — and lists of rules read top-down are available in the Pro version.
* New: {length} and {extension} placeholders, so a description can say "a 7-character .com" and stay true as the catalogue changes. Bare-number forms — {lengthChars} — are there for copy that supplies its own wording, and a domain with no name yet resolves them to nothing rather than to a guess. {age}, which reads the registration date from the domain registry, is available in the Pro version.
* New: Bulk editing on the Domains screen — select any number of domains, pick a field, set one value, apply. Available in the Pro version.
* Changed: A domain's Landing page now offers Automatic as well as Standard and Template. Automatic is the default and hands the question to the assignment rules; the other two answer for that domain alone and outrank every rule. There was previously no way back: picking either side once excluded a domain from every rule thereafter.
* Changed: A template no longer has to name a domain. It is a design, and one design can draw a whole portfolio with each page still showing its own name, price and status. The Domain field stays as the preview subject and as the live source wherever a template is placed by shortcode, by replacing the theme, or on specific pages.
* Changed: Where a design is placed — shortcode, theme replacement, specific pages — moves into a Placement card in the template editor's sidebar, with the shortcode itself at the foot of that card rather than three rows away under Publishing.
* Fixed: Opening a domain and saving it silently re-pointed its page. The editor pre-filled the Landing page field with whatever the domain currently resolved to and wrote that back on save, turning an unstated answer into a stated one — which, once assignment rules existed, opted the domain out of them for good. The field now keeps whatever is stored, blank included, and says in words what draws the page and where that came from.
* Fixed: A segmented control lit its first segment before anything was chosen, so a control that appeared to be set to "Automatic" saved no such thing. Nothing is lit until a choice is made, and an unanswered control now draws as buttons rather than as flat words.
* Fixed: A dialog taller than the window could not be scrolled — its head and foot stayed off-screen with no way to reach them.
* Fixed: A dropdown opened inside a dialog ignored the mouse wheel; its list could only be moved by dragging the scrollbar.
* Fixed: A select with nothing chosen rendered as an empty box, saying neither what it was for nor that it was unset.
* Fixed: Font size and line height inputs clipped their own digits behind the "px" badge on a narrow column — "40" reading as "4" — and the background position selects overlapped their neighbours.
* Improved: On upgrade, each domain's current design is written down explicitly before anything changes, so every page renders exactly as it did. Domains carrying their own design are counted on the Assign Template screen, with one action to hand them back to the rules. Domains that had been stamped with "standard page" without anyone choosing it are unstamped, so the rules can reach them.
* Improved: Design pickers are searchable, which on a portfolio of hundreds of near-identical names is the difference between typing and hunting.

= 3.5.2 - 24 July 2026 =
* Security: Fixed a broken access control issue where the Offers and Dashboard REST endpoints could be read or deleted without authentication because the permission check returned the required capability name instead of verifying it.
* Security: The "resend verification" and "send congratulations" admin actions now require the dashboard capability instead of being reachable while logged out.
* Security: Hardened unserialize() calls storing offer data against PHP object-injection.
* Security: Added missing sanitization/unslashing on request data across the admin and frontend, and moved raw SQL table-name interpolation onto prepared statements where supported.
* Improved: Replaced direct filesystem calls in CSV import/export with the WordPress Filesystem API, and standardized on wp_json_encode() throughout.
* Credit: Thanks to Labda for responsibly disclosing the broken access control issue in the Offers and Dashboard REST endpoints.

= 3.5.1 - 08 July 2026 =
* Fixed: The Domains, Offers, and Analytics screens showing no data when the permalink structure is set to "Plain" — a malformed REST request URL was silently failing.

= 3.5.0 - 30 June 2026 =
* New: Completely redesigned admin area, rebuilt as a modern React single-page application.
* New: Migrated the entire admin away from the legacy Codestar options framework to a native React + REST API architecture, removing ~35,000 lines of legacy framework code for a lighter, faster plugin.
* New: React-based Settings, Offers, Transactions, Import/Export, Help, and License pages, all powered by a unified REST API and shared schema registry.
* New: Reworked Post List and Post Editor screens with bulk actions, one-click shortcode copy, and an integrated rich text editor.
* New: shadcn/ui component system across the admin (calendar, popover, hover card, dialogs, dropdowns, toast notifications, and more) for a consistent, accessible UI.
* New: Frontend single Domain Listing template for displaying listings on their own page.
* Improved: Admin navigation now intercepts WordPress menu clicks and routes through the React SPA, eliminating page reloads and menu flickering.
* Improved: Replaced Toastify with shadcn/ui Toast for consistent in-app notifications.
* Improved: Added internationalization (i18n) support throughout the React admin.
* Fixed: Hash-based route navigation for Offers, Transactions, Settings, and Help pages.

= 3.4.5 - 23 May 2026 =
* Fixed: PHP notice triggered on fresh plugin activation — `map_meta_cap` called on unregistered `dfs_template` post type during `wp_insert_post`.
* Updated: `Tested up to` set to WordPress 6.9.
* Updated: `Requires PHP` bumped to 8.0.

= 3.4.4 - 20 May 2026 =
* Updated: Admin preview now displays correctly on responsive devices.
* Fixed: Minor CSS issues in the admin panel.


= 3.4.3 - 19 May 2026 =
* Fixed: An issue where domain titles were being automatically normalized to lowercase
* Tested: WordPress 7.0

= 3.4.2 - 13 May 2026 =
* Fixed: The Dashboard link now navigates via hash routing, consistent with all other React sub-pages.
* Cleanup: Removed unused file to reduce plugin size.

= 3.4.1 - 7 May 2026 =
* Fixed: Critical bug in 3.3.0 migration that blanked domain_name when old key was absent — loop now skips keys that don't exist.
* Fixed: Recovery script restores domain_name from post_title for any template where domain_name was wiped by the 3.3.0 migration.

= 3.4.0 - 7 May 2026 =
* Added: React-based Dashboard page for the free version with live stat cards (Total Domains, Total Offers, Total Impressions, Domain Listings).
* Added: REST endpoint GET /domain-for-sale/v1/dashboard returning live plugin stats.
* Added: Pro upgrade preview section on the Dashboard with blurred analytics screenshot and upgrade CTA.
* Added: Domain view/impression tracking — creates wp_dfs_domain_views table and records views for shortcode, replace_theme, and singular dfs_template modes automatically.
* Fixed: Help page slug conflict — renamed internal slug from domain-for-sale to dfs-help so Dashboard and Get Help pages no longer collide.
* Improved: Admin submenu order — Dashboard, All Domains, Add New Domain, Domain Listing, Offers, Settings, Tools, Recommended, Lite vs Pro, Get Help.

= 3.3.2 - 30 April 2026 =
* Update: Refactored domain meta keys for improved consistency.
* Cleanup: Removed unnecessary files to reduce plugin size.

= 3.3.1 - 29 April 2026 =
* Update: Domain name meta key.

= 3.3.0 - 28 April 2026 =
* Added: Full CSV, XML, and JSON import/export support for Domains.
* Added: Full CSV, XML, and JSON import/export support for Listings.
* Improved: Enhanced conflict detection for more accurate import behavior.
* Updated: Settings backup import/export option moved under the Tools tab.

= 3.2.3 - 11 April 2026 =
* Fixed: Issue where textarea input containing emojis was not being saved in the database.

= 3.2.2 - 09 April 2026 =
* Added: Option to show or hide content under the listing domain.
* Added: Content length setting under the listing domain.
* Fixed: Domain extension filter issue.

= 3.2.1 – 14 March, 2026 =
* Fixed: Issue causing duplicate domain offers.
* Added: Conditional logic to hide the price tag when the sale price or starting price is not set.

= 3.2.0 - 11 March 2026 =
* Added: Domain Listing feature to showcase multiple domains.
* Added: Option to upload and display a Domain Logo.
* Added: Option to show or hide the Header and Footer on single domain pages.
* Added: Custom URL slug field for individual domain pages.
* Update: Reorganized domain settings into a new Domain Panel for improved usability.
* Update: Moved Currency setting to the General tab.

= 3.1.12 - 20 January 2026 =
* Updated: Plugins readme.

= 3.1.11 - 01 January 2026 =
* Added: Duplicate option for the Domain For Sale shortcode.
* Fixed: Removed externally hosted WebFont Loader script and replaced it with a self-hosted version to comply with Plugin Check requirements.
* Improved: Ensured all enqueued scripts are locally hosted for better privacy, reliability, and WordPress.org compatibility.
* Security: Ensured all data is properly sanitized, validated, and escaped.

= 3.1.10 - 21 December 2025 =
* Fixed: Minor coding issues.

= 3.1.9 - 08 December 2025 =
* Tested: WordPress 6.9 compatibility.
* Fixed: Export/import issues.
* Added: RTL (Right-to-Left) CSS support.

= 3.1.8 - 26 November 2025 =
* Fixed: PHP notice where `map_meta_cap()` was called before the `dfs_template` post type was registered.
* Updated: Admin panel UI for a more intuitive user experience.

= 3.1.7 - 24 November 2025 =
* Added: Tools export/import option.
* Fixed: Confirmation email delivery issue.
* Security: Improved data handling by ensuring all content is properly escaped.

= 3.1.6 - 13 November 2025 =
* Improved: Optimized database footprint.

= 3.1.5 - 12 November 2025 =
* Fixed: Critical Broken Access Control vulnerability in the REST API.
* Security: Ensured all data is properly sanitized, validated, and escaped.

= 3.1.4 - 31 October 2025 =
* Fixed: Missing `composer.json` file when using Composer.
* Fixed: Removed remote file calls and bundled required assets locally.
* Fixed: Internationalization issues (removed variables from text domain and context).
* Fixed: Updated text domain to match plugin slug.
* Updated: Replaced outdated SweetAlert script with a compliant version.
* Updated: Code improvements for compliance with the latest WordPress Plugin Review Guidelines.
* Security: Ensured all data is properly sanitized, validated, and escaped.
* Security: Escaped all variables and options before output.
* Added: Documentation for all external services used.

= 3.1.3 - 30 October 2025 =
* Added: New currency options: Pounds Sterling (GBP) and Canadian Dollars (CAD).
* Updated: Enhanced admin dashboard UI for managing offers and sales.
* Fixed: Offer currency symbol stored and retrieved incorrectly from the database.
* Fixed: Minor styling inconsistencies in the offer management table.
* Fixed: Tooltip alignment issues in the settings panel.
* Fixed: PHP warning caused by empty bidder email fields.

= 3.1.2 - 20 September 2025 =
* Added: Typography settings for the form title.
* Fixed: reCAPTCHA token being stored with form submissions.
* Fixed: Google Fonts loading issue.
* Fixed: Minor CSS issues in the admin panel.

= 3.1.1 - 13 September 2025 =
* Updated: Improved default option values for better usability.
* Fixed: Minor CSS issues in the admin panel.

= 3.1.0 - 10 September 2025 =
* Added: Price and Sale Price options in the domain layout.
* Added: `{price}` and `{{price}}` variables for use inside the Price Tag.
* Added: Offer Management to view, filter, and manage offers from the dashboard.
* Added: Currency settings in the options panel.
* Added: Phone Number field.
* Added: New email variables: `{phone}`, `{domain}`, `{offer}`, `{adminEmail}`.
* Added: Bidder confirmation emails on offer submission.
* Added: Demo and Docs links within fields for quick guidance.
* Added: Help and Video Tutorials tabs.
* Updated: Admin panel UI for improved usability.

= 3.0.13 - 31 July 2025 =
* Improved: Enforced a single “Replace Current Theme” template to prevent conflicts.
* Added: Apply with admin column option.
* Fixed: Form submission issues.
* Fixed: reCAPTCHA verification issues.
* Added: `{currentURL}`, `{siteTitle}`, `{currentTitle}` email variables.
* Added: Clean-up data on deletion option.
* Updated: Admin UI colors for improved readability.
* Added: Domain admin column.
* Updated: Layout post options for better usability.
* Fixed: Default layout not created on plugin activation.

= 3.0.12 - 04 July 2025 =
* Updated: Readme content.

= 3.0.11 - 04 June 2025 =
* Fixed: Data escaping issue.
* Fixed: Text domain warning.

= 3.0.10 - 29 May 2025 =
* Tested: WordPress 6.8.1 compatibility.

= 3.0.9 - 20 February 2025 =
* Added: Form validation.
* Tested: WordPress 6.7.2 compatibility.

= 3.0.8 - 25 June 2024 =
* Updated: Gutenberg block name.

= 3.0.7 - 01 June 2024 =
* Fixed: Text domain warning.

= 3.0.6 - 22 December 2024 =
* Fixed: Form submission issue.

= 3.0.5 - 15 December 2024 =
* Tested: WordPress 6.7.1 compatibility.

= 3.0.4 - 19 November 2024 =
* Tested: WordPress 6.7 compatibility.

= 3.0.3 - 29 October 2024 =
* Added: Gutenberg block support for embedding the shortcode.

= 3.0.2 - 21 October 2024 =
* Added: Elementor widget for displaying the Domain For Sale template shortcode.
* Fixed: PHP warning when saving templates.

= 3.0.1 - 19 October 2024 =
* Updated: Folder structure.

= 3.0.0 - 16 October 2024 =
* Added: DFS Template custom post type.
* Added: Template application options.
* Added: Custom container width setting.
* Added: Column gap customization.
* Added: Enhanced typography fields.
* Updated: Replaced Bootstrap CSS with custom CSS.
* Updated: Transitioned options panel to metabox-based settings.
* Updated: AJAX-based contact form submission.
* Updated: CSS structure overhaul for performance and maintainability.

= 2.0.5 - 24 September 2024 =
* Added: All icons from the Icofont library.
* Fixed: Checkmark icon not loading in the admin panel.
* Tested: WordPress 6.6.2 compatibility.

= 2.0.4 - 14 September 2024 =
* Updated: Plugin UI.

= 2.0.3 - 11 September 2024 =
* Fixed: Admin panel icon issue.
* Fixed: PHP 8.1.12 compatibility issue.
* Fixed: WordPress 6.6.1 compatibility issue.
* Added: Help area in the admin panel.

= 2.0.2 - 10 August 2024 =
* Added: New icon fonts.
* Fixed: Activation debug errors.

= 2.0.1 - 09 August 2024 =
* Fixed: PHP warning on activation.
* Fixed: PHP compatibility issues.

= 2.0.0 - 08 August 2024 =
* Updated: Code structure.
* Updated: Compatibility with the latest WordPress version.
* Updated: Compatibility with the latest PHP version.
* Updated: Plugin description.

= 1.5.2 =
* Updated: Default background handling to prevent disappearing issues in the Pro version.
* Added: Subtitle fields in the admin panel.
* Added: Pro version feature instructions in option fields.

= 1.5.1 =
* Tested: WordPress 6.5.4 compatibility.
* Updated: Removed banner advertising.
* Updated: Added plugin action and settings links.

= 1.4.17 =
* Added: Support for third-party contact form shortcodes.
* Added: Help text for selected fields.
* Tested: Compatibility with the latest WordPress and PHP versions.

= 1.4.16 =
* Fixed: Subject variable handling in email templates.
* Added: IP address variable for email templates.

= 1.4.15 =
* Added: Custom CSS option.
* Added: Custom JavaScript option.

= 1.4.14 =
* Fixed: CSS issues.

= 1.4.13 =
* Fixed: Compatibility issues.

= 1.4.12 =
* Updated: Refactored codebase from functional to class-based architecture.
* Tested: WordPress 6.4.1 compatibility.
* Added: Help page for users.

= 1.4.11 =
* Updated: Domain For Sale framework class to prevent plugin conflicts.

= 1.4.10 =
* Added: Missing translation strings.
* Added: Help page for easier access.
* Added: Redirection option after plugin activation.
* Fixed: PHP warning.
* Tested: WordPress 6.3.2 compatibility.

= 1.4.9 =
* Fixed: PHP warning.
* Tested: WordPress 6.3 compatibility.

= 1.4.8 =
* Updated: Default placeholder email template text.
* Added: New email tags `{subject}`, `{siteURL}`.
* Improved: Automatically populate domain name and admin email fields.

= 1.3.8 =
* Fixed: PHP and WordPress compatibility issues.

= 1.3.7 =
* Updated: Plugin content direction.

= 1.3.6 =
* Fixed: PHP and WordPress compatibility issues.

= 1.3.2 =
* Fixed: Responsive layout issues.
* Added: Turkish language file.

= 1.1.0 =
* Updated: Readme for guideline compliance.

= 1.0.0 =
* Initial release.