🔥 Mega Sale — Up to 70% OFF Ends Soon!
00
Day
00
Hours
00
Minutes
00
Seconds
Grab Your Special Ramadan Deal!
Domain For Sale

Changelogs

3.9.0

Latest
  • Fixed Issue where the default background image was still displayed even when a custom body background image was set in the Style Options tab.
  • Compatibility WordPress 7.1.3 compatibility.

3.8.2

  • Fixed Google Search Console reported “Either ‘price’ or ‘priceSpecification’ should be specified (in ‘offers’)” and “Either ‘offers’, ‘review’ or ‘aggregateRating’ should be specified” on Make an offer domains. Google only accepts a Product that states a price, a review or a rating, and a domain taking offers has none of those. A domain taking offers, running an auction, or set to Fixed price with no price entered is no longer described as a Product — on its own page or in any list — rather than with an incomplete Offer or an invented price. Fixed-price domains with a price are unchanged. A site that adds genuine reviews or ratings through dfs_pro_product_schema or dfs_pro_listing_product_schema keeps its Product.
  • Fixed The domains in the Related domains strip, in listings and in a layout’s More domains section were described to search engines with the card’s text — the Tagline, or a trimmed excerpt — rather than the domain’s Description. A domain with only a Description, or a listing set to show no card description, was described with none at all, which Google Search Console reported as a missing “description”. Each entry now carries the same description the domain’s own page shows: its Description, then its Sale Content, then the card’s text. A domain with none of these still has none. What the cards display is unchanged.

3.8.1

  • New Support for displaying individual domain logos in Related Domains cards across the Standard Page and all available layouts.
  • New Domain Attributes on the Standard Page, under Settings → Single Page → Standard Page. Choose which facts appear under the domain description, in what order and under what label — Age, Character Length, Extension, Offer Count, or a Custom value of your own — up to five, configured the same way as Layout 03’s Domain Attributes.
  • New Display style for Domain Attributes. Info boxes shows them as a row of labelled highlight boxes (Age · Length · Extension · Offers); Summary line shows them as one short sentence (“10 years old, 12 characters, .com, 3 offers”). Info boxes is the default. It replaces the previous facts table, and Show domain attributes keeps its saved on/off state.
  • New Your domains describe themselves to search engines as Products with Offers. Each single domain page carries its own Product, and every page that lists domains — the shortcode, a listing’s own page, the domains and category archives, the Related domains strip and a layout’s More domains recommendations — carries a list of them. Everything comes from what the page already shows: the name, description, logo, categories and price. A domain taking offers or running an auction states no price, because neither a blank nor a standing bid is an asking price. Switch it off under Settings → General → Output Product structured data if your SEO plugin already describes these pages, or filter it per page with dfs_pro_product_schema, dfs_pro_listing_schema and dfs_pro_listing_product_schema.
  • Fixed Issue where the default domain description was displayed instead of the domain’s own description. The domain’s custom description is now shown when available, with the default description used as a fallback.
  • Fixed A fixed-price domain selling through Buy now via Escrow.com showed its payment form with no heading at all — a bare “Buy Now” button with nothing above it to say what the form was. It now carries the Purchase Button title, as it does when it shares a card with the offer form.
  • Fixed A fixed-price domain whose Purchase method is Proposal Form headed that form “Purchase Now”, over a button reading “Send proposal” — it promised a checkout the form does not have. It now reads “Make an Offer”, as it already did on domains that also accept offers below the asking price. The invitation-to-pay page, where the buyer really is completing a payment, still reads “Purchase Now”.
  • Fixed A settings toggle whose description ran long pushed the row wider than the card it sat in, and the text was clipped at the edge. Descriptions now sit under the label and wrap.

3.8.0

  • New Form Builder, under Settings → Sales Forms → Form Builder → Form fields, with a tab for each sale method — Fixed price, Make an offer and Accepting bids. Drag fields to reorder them or pair up to four 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. Email and the amount always stay, because confirmation mail, outbid mail and the minimum-offer and minimum-bid checks 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 Custom fields. Ask buyers your own questions — text, paragraph, number, website, dropdown, single choice, multiple choice, date, or a consent checkbox with a link to your terms — on the Fixed price, Make an offer and bid forms. Answers are stored with the offer or bid, shown on the Offers screen, checked on the server like the built-in fields, and available in every email.
  • New The Escrow.com payment form has a builder of its own, under Settings → Escrow Settings → Payment form. Name and Email stay required there, because Escrow.com opens the buyer’s account with them; the rest of its wording, and the Buy Now button, is yours.
  • 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 — your own questions included, by their labels — 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.
  • New Developer hooks — dfs_sales_form_schema to adjust a form’s layout, dfs_sales_form_field_types to register a field type, dfs_sales_form_field_html to change one field’s markup, and dfs_sales_form_validate to add rules of your own.
  • 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, on the offer, bid and payment forms alike, and a submission only records the fields its form actually asks for. Previously any extra value posted to the offer form was stored and mailed along with the offer.
  • Changed A bid placed without a name, on a bid form that no longer asks for one, is listed by position (“Bidder 3”) even when bidders are not anonymised.
  • Changed The Field labels group, the Make an offer Button Label, the Fixed price “Send proposal button label”, the Bid button label, and the Payment form labels and Purchase Button Label under Payments are replaced by the builders, which carry their saved wording.
  • Security Invitation-to-pay links are now signed. The link used to carry only the offer’s number, and numbers count up, so anyone could try the next one and see another buyer’s name and email address filled into the checkout. Links now carry a key only the site can produce, and a link without it — or with the wrong one, or for a different domain — opens the page as anyone else sees it. Invitations emailed before this update need to be sent again.
  • Security The Escrow.com checkout now charges a price the server decides — the accepted offer’s amount for a genuine invitation, and the domain’s own Escrow price otherwise. It used to charge whatever amount the browser sent, so a crafted request could open a transaction for any figure.
  • Fixed “Invite to Buy via Escrow” did nothing on domains using the standard single page: the link opened the ordinary page at the asking price. It now opens a checkout for the accepted offer — the agreed amount, and the Buy Now form filled in with the buyer’s name and email — on the single page and every shortcode layout alike, and still opens when the domain has been marked Reserved while the sale goes through.
  • Fixed On the shortcode layouts an invitation’s Buy Now button showed the accepted amount but opened the Escrow.com transaction at the asking price, under a price tag still showing the asking price. The tag now reads “Your accepted offer: $300” while an invitation is open, and the form is titled “Complete your purchase”; everyone else sees the page as before.
  • Fixed Layout 03’s checkout for an invitation priced its summary at the asking price and still offered the Make an offer form beside it. It now shows the accepted amount in Domain price, Total and the Buy Now button, with the payment form alone.
  • Fixed Layout 03’s payment summary never added the buyer’s share of the Escrow.com fee to the Total — with the fee paid by the Buyer, or split 50/50, it showed the domain price alone. The Total and the Buy Now button now include it.
  • Fixed The invitation page showed the offer form’s title (“Make an Offer”) above the Buy Now form, with a PHP warning about an undefined variable.
  • Fixed When the payment form and the offer form shared a card, their Name and Email inputs had the same ids, so a label or a validation message could attach to the other form’s field.
  • 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.
  • Fixed Error messages in the bid form’s pop-up showed HTML entities, such as ' in place of an apostrophe.

3.7.0

  • New Domain Mapping, under Settings → Domain Mapping. Point any domain you own directly at a Domain listing, Template, Page, Post, or any other public content on the site — visitors who type that domain in see it with no redirect, the domain staying in their address bar the whole time, and no separate WordPress install to run for it. Free’s Domain Mapping is limited to Domains and Templates; Pro searches across every public post type the site has. 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

  • 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 The Bids tab’s table did not match the Offers tab beside it — the phone number hung under the email address, columns were squeezed to share the card’s width so a full name broke across four lines, and the date read 01/09/2026, 04:31:20 rather than “Today at 4:31 AM”. Bids now use the offers table’s columns, widths and date format, with Phone as a column of its own.
  • 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 and Bids 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 sidebar the editor no longer has — two cards of label/value rows — so the page rearranged itself the moment the real one painted. It now draws the card 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.

3.6.0

  • 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 A domain set to Template design still rendered the standard page when its template had been built while the site default was the standard page. The page a domain asks for is now drawn as asked, rather than the question being answered twice with different answers.
  • Fixed A domain with no template attached, but set to Template design, rendered an empty hero instead of the standard page.
  • Fixed The template editor’s preview pane showed the domain’s page instead of the template being edited, the preview URL being the one the domain owns. The pane now pins the template it is previewing.
  • Fixed Layouts 01 and 02 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 in the Elementor editor fell back to the browser’s serif instead of their chosen font, because the widget renders after the page has printed its font stylesheet.
  • Fixed The admin no longer stays light when the system switches to dark with the theme set to System.
  • New Landing page, per domain — the standard single page, or the design of the template that selects it — with a Template picker for domains carrying more than one design. Both sit under the domain name, in their own sidebar card.
  • New Default landing page, under Settings → Single Page, deciding for domains that have not chosen one, and “Apply to all domains” for stating the choice on an entire catalogue at once.
  • New Landing Page is a CSV column, so the choice survives an export and import.
  • New A domain is its own record, separate from the template that designs it. Several templates can sell one domain, its price and status are edited in one place, and its logo travels with it. Adds a Domains screen, a “Select Domain” field, and a drawer for creating one without leaving the template editor.
  • New Domain auctions. Bids are stored records, a new bid outbids the last, the minimum next bid is enforced, and the auction resolves to one winner at its deadline. Sellers get a per-domain auction panel and a Bids tab covering the whole site.
  • New Public pages without designing one first — every domain’s own URL, a /domains/ catalogue and a page per category, all using the listing’s cards, filter bar and pagination. Opt out per domain for a bespoke design.
  • New Embeddable purchase. Paste the button or checkout widget your payment provider gives you and it replaces the proposal form on a fixed-price domain, rendered exactly as the provider intended.
  • New Rebuilt listing block — filter bar (search, sale type, price, category), four card presets with previews, and a Buyer controls tab deciding what visitors may narrow themselves.
  • New A Domain Listing block for the block editor. Pick a listing in the sidebar and it renders in place — filter bar, cards and pagination — and the preview searches, filters, sorts and pages exactly as the published page does, so a listing can be arranged without leaving the editor.
  • New Sales Forms → Form Builder gathers every buyer-facing word in one screen: shared field labels, separate copy per sale method, a footnote per form, Reply-to details for bidder emails, and bidder anonymization by position.
  • New Dynamic placeholders in template copy — {domain}, {price}, {description} and the rest resolve against the domain a template points at, editor preview included. Extensible via domain_for_sale_pro_content_placeholders.
  • New Settings → Single Page for the global page’s slug, width, header and footer; site-wide brand colours; and colour schemes a template can follow. Domain Categories move into the admin app, with counts that report domains rather than raw terms.
  • New Escrow.com credentials are verified when saved rather than failing weeks later at Buy now. Escrow Settings now follow the Enable Escrow.com Payment switch, and checkout needs both the switch and credentials that authenticate.
  • New Import and export travel between sites — ids that mean nothing elsewhere are written as names and resolved back — and domains, templates and listings export together as one bundle.
  • New Recommended domains on Layout 02/03 can come from categories instead of a typed list, so they stay current as domains sell.
  • 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.
  • Changed One “sale method” replaces the old Form options / Price options pair, and prices are named for what they are. Existing domains convert on upgrade: sell price becomes asking price, starting price becomes minimum bid.
  • Changed Uninstall honours “Clean-up Data on Deletion”. Left off nothing is touched; turned on it now clears every post type, table, option and term the plugin made, including rows earlier releases stranded.
  • Security Exported CSVs neutralize values a spreadsheet would run as a formula, so text typed on a public form cannot execute when the seller opens the file.
  • Improved One shared bidding component, one place deciding where a template reads its domain data, and duplicate names caught consistently across manual entry and every import — three sources of screen-to-screen disagreement, gone. Categories are stored only as real terms, with the stale meta copy dropped on upgrade.
  • Improved Admin polish throughout — dark mode reaches the Template and Listing previews, Offers and Bids match the rest of the app, save confirmations name what was saved, and Help keeps the settings rail on screen.
  • Removed The legacy list template and the old listing layout metabox, both superseded by the listing block’s own controls.
  • New Settings → Single Page → Assign Template decides which design draws which domains, as one ordered list read top-down where the first match wins. A rule covers all domains, the domains in chosen categories, or domains named one by one. Nothing is written onto a domain, so changing a rule changes every page it covers and changing it back restores them. Replaces the site-wide default landing page, the default template, the per-category template and both “apply to all domains” sweeps — four controls that answered one question in three places, with the order they outranked each other visible only in the code.
  • New Bulk editing on the Domains screen. Select any number of domains, pick a field, set one value, apply. Sale method, prices, auction settings, sale status, sold date, featured, tagline, categories and the landing page can all be set at once; categories can be added to or removed from what each domain already has rather than only replaced. Every field renders the control the single-domain editor uses, so the labels and validation cannot drift apart.
  • New {age}, {length} and {extension} placeholders, so a description can say “a 7-character .com registered 12 years ago” and stay true as the catalogue changes. Age is read from the domain registry over RDAP and cached for a day; the lookup only runs when the copy actually asks for it. Bare-number forms — {ageYears}, {lengthChars} — are there for copy that supplies its own wording, and any fact that cannot be established resolves to nothing rather than to a guess.
  • 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 fields 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. Both fields now keep whatever is stored, blank included, and the picker 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 bulk edit that appeared to set “Automatic” reported “Nothing to change”. Nothing is lit until a choice is made, and an unanswered control now draws as buttons rather than as three 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 The field picker in bulk edit and the template pickers throughout are searchable, which on a portfolio of hundreds of near-identical names is the difference between typing and hunting.

3.5.4

  • 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.3

  • Fixed “Security Check Failed — Nonce verification failed” on sites using page caching — the form now fetches a fresh nonce right before submitting instead of relying on the (possibly cached and expired) one embedded in the page.
  • Fixed Blank error dialog on form submission failures — error responses were wrapped in a data envelope the frontend didn’t unwrap.
  • Improved Escrow API errors now report the actual cause (missing Escrow settings, connection failure, or an unexpected API response with its HTTP status) instead of a generic failure message, and connection details are written to the PHP error log.
  • Fixed Escrow API requests failing when the configured API URL has no trailing slash.

3.5.2

  • Fixed Escrow.com “Buy Now” transactions failing with “The title and description fields are required” — the domain description was never sent with the purchase request, and Template 2 didn’t include it at all.
  • Improved The Escrow transaction description now falls back to an auto-generated description when the sale content is empty, and is capped at Escrow’s 500-character limit.

3.5.1

  • 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

  • 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

  • Fixed Admin preview issue.
  • Fixed Minor CSS issues in the admin panel.

3.4.4

  • Fixed An issue where domain titles were being automatically normalized to lowercase

3.4.3

  • New Layout 03 — new domain landing page template with a modern, full-width design.
  • New Layout 03 includes a prominent hero section with domain name display, price, and call-to-action button.
  • New Layout 03 features a built-in inquiry/offer form with clean card-based layout.
  • 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.2

  • Fixed Fatal memory exhaustion in dfs_fetch_selected_page() caused by self-merging arrays growing exponentially on each loop iteration.
  • Fixed $single_page variable used before initialization inside the loop.
  • Fixed foreach() warning — “argument must be of type array|object, string given” — caused by dfs_fetch_selected_page() returning a flat array of strings instead of the expected array of arrays.
  • Improved Refactored dfs_fetch_selected_page() to collect each template’s multi_page and single_page values as separate sub-arrays, matching the structure expected by the page-selection field renderer.

3.4.1

  • Fixed Domain Name field blanked for all existing domains after updating to 3.3.0+ due to migration bug overwriting saved domain_name with empty string.
  • Fixed Update migration guard in 3.3.0 — old keys now only renamed when they actually exist in post meta.
  • New Automatic data recovery (update-3.3.2) restores domain_name from post title for any domain where it was wiped.

3.4.0

  • New Brand-new React-based Dashboard as the first admin menu item.
  • New Dashboard stat cards showing Total Domains, Total Offers, Total Impressions, and Domain Listings — all pulled live from the database.
  • New Domain Performance Trendline chart (Chart.js) with period selector (Today, This Week, This Month, This Year, etc.) and metric tabs (All, Impressions, Offers).
  • New Average Offers donut chart panel showing offer-to-impression conversion rate for the selected period.
  • New Domain Performance table listing top domains with individual impression and offer counts.
  • New Domain impression tracking — automatically records a view each time a domain page is visited, stored in a new wp_dfs_domain_views database table.
  • New REST API endpoint (/domain-for-sale-pro/v1/dashboard) to serve all dashboard data securely.
  • New Help page migrated to React with an interactive video player, playlist sidebar, and quick-links panel.
  • Improved Admin submenu order — Dashboard is now the first item, followed by All Domains and Add New Domain.
  • Fixed Active menu highlighting for all hash-based admin sub-pages (Offers, Transactions, Tools, Help).

3.3.1

  • Compatibility Refactored domain meta keys for improved consistency.

3.3.0

  • New Full CSV, XML, and JSON import/export support for Domains.
  • New Full CSV, XML, and JSON import/export support for Listings.
  • Improved Enhanced conflict detection for more accurate import behavior.
  • Compatibility Settings backup import/export option moved under the Tools tab.

3.2.3

  • Fixed Issue where textarea input containing emojis was not being saved in the database.

3.2.2

  • New Option to show or hide content under the listing domain.
  • New Content length setting under the listing domain.
  • Fixed Domain extension filter issue.
  • Fixed Escrow transactions information showcase issue.

3.2.1

  • Fixed Issue causing duplicate domain offers.
  • New Conditional logic to hide the price tag when the sale price or starting price is not set.

3.2.0

  • New Domain Listing feature to showcase multiple domains.
  • New Option to upload and display a Domain Logo.
  • New Option to show or hide the Header and Footer on single domain pages.
  • New Custom URL slug field for individual domain pages.
  • Compatibility Reorganized domain settings into a new Domain Panel for improved usability.
  • Compatibility Moved Currency setting to the General tab.

3.1.10

  • Removed Appsero integration.

3.1.9

  • New Domain for sale domain shortcode duplicate option.
  • New Support for RTL (Right-to-Left) CSS.
  • Fixed Replaced direct cURL usage warnings by aligning with WordPress coding standards where applicable.
  • Fixed Prevented direct stylesheets output by properly enqueueing styles.
  • Fixed Removed external CDN dependency by self-hosting WebFont Loader to comply with Plugin Check requirements.
  • Improved General code quality and compatibility with WordPress Coding Standards and Plugin Check.
  • Security Ensured all data is properly sanitized, validated, and escaped.

3.1.8

  • Compatibility WordPress 6.9 compatibility.
  • Fixed Export/import issues.

3.1.7

  • Fixed PHP notice where map_meta_cap() was called before the dfs_template post type registered.

3.1.6

  • New Tools export/import option.
  • Fixed Issue with resending verification emails.
  • Fixed Confirmation email delivery issue.
  • Security Improved data handling by ensuring all content is properly escaped.

3.1.5

  • Fixed Critical Broken Access Control vulnerability in the REST API.
  • Security Ensured all data is properly sanitized, validated, and escaped.

3.1.4

  • Fixed Missing composer.json file while using Composer
  • Fixed Removed remote file calls and bundled required assets locally
  • Fixed Corrected internationalization issues (no variables in text domain / context)
  • Fixed Updated text domain to match plugin slug
  • Compatibility Replaced outdated SweetAlert script with compliant version
  • Compatibility Code improvements and compliance with latest WordPress Plugin Review Guidelines
  • Security Ensured all data is properly sanitized, validated, and escaped
  • Security Escaped all variables and options before output
  • New Documentation for all external services used

3.1.3

  • New Escrow.com Integration for secure domain transactions.
  • New Option to enable Escrow.com form directly on domain listings.
  • New Send Escrow purchase invitations to offer senders via email.
  • New New Escrow email templates under Email Settings.
  • New Combined “Make Offer” and “Buy Now via Escrow” workflows.
  • New New currency options: Pounds Sterling (GBP) and Canadian Dollars (CAD)
  • Compatibility Enhanced admin dashboard UI for managing offers and sales.
  • Compatibility Improved email variable system for Escrow and offer notifications.
  • Fixed Offer currency shamble stored and used form database.
  • Fixed Minor styling inconsistencies in offer management table.
  • Fixed Tooltip alignment issues in settings panel.
  • Fixed Small PHP warning triggered by empty bidder email fields.

3.1.2

  • New Typography for form title.
  • Fixed ReCAPTCHA token was being stored with form submissions.
  • Fixed Google Fonts loading issue.
  • Fixed Minor CSS issues in the admin panel.

3.1.1

  • Compatibility Changed some option default values for better usability.
  • Fixed Minor CSS issues in the admin panel.

3.1.0

  • New Receive Offer system so users can bid their offers.
  • New Export Offers as CSV option.
  • New Bidder Email Verification feature.
  • New Price, Sale Price, and Receive Offer options in the domain layout.
  • New {price} and {{price}} variables for use inside the Price Tag.
  • New Offer Management – view, filter, and manage domain offers directly from the dashboard.
  • New Currency settings in the options panel.
  • New Phone Number field.
  • New New email variables: {phone}, {domain}, {offer}, {adminEmail}.
  • New Bidder Confirmation – users are now notified when they submit an offer.
  • New Demo/Docs link within each field for quick guidance.
  • New Help and Video Tutorials tabs.
  • Compatibility Full admin panel enhanced for a smoother, more user-friendly experience.

3.0.10

  • New Apply with single page option.
  • New Apply with admin column option.
  • Improved Automatic enforcement of single “Replace Current Theme” template.
  • Fixed Form Submission issue.
  • Fixed Recaptcha verification issues.
  • Aded {currentURL}, {siteTitle}, {currentTitle} variables for Email template.
  • New Clean-up Data on Deletion option.
  • New Domain admin column.
  • Compatibility Admin UI with new color for better readability.
  • Compatibility Layout post options improved for better usability.
  • Fixed Default layout not created on plugin activation.

3.0.9

  • New License option.
  • New Redirect to license page after activating plugin.

3.0.8

  • Fixed Escaping issue.
  • Fixed Textdomain warning.

3.0.7

  • New Form validation.
  • Compatibility WordPress 6.7.2 compatibility.

3.0.6

  • Fixed Textdomain wording.
  • Compatibility WordPress 6.7.1 compatibility.

3.0.5

  • New New Elementor widget to display the “Domain For Sale” template shortcode.
  • New Gutenberg block support for embedding the shortcode.
  • New Backend preview feature for shortcode display.
  • Fixed PHP warning during template saving.
  • Fixed Compliance with WordPress Coding Standards (WPCS).
  • Compatibility Complete overhaul of plugin code structure for improved functionality.

3.0.4

  • Compatibility Folder structure.

3.0.3

  • New DFS Template Custom Post Type.
  • New Template Application Options.
  • New Custom Container Width Setting.
  • New Column Gap Customization.
  • New Enhanced Typography Fields.
  • New Google reCAPTCHA v3 Support.
  • Compatibility Removed Bootstrap CSS, replaced with custom CSS.
  • Compatibility Options Panel → Metabox Transition.
  • Compatibility AJAX Contact Form Submission.
  • Compatibility CSS Structure Overhaul.

3.0.2

  • New All icons from Icofont library.
  • Fixed Check mark icon not loading in admin panel.
  • Compatibility WordPress 6.6.2 compatibility.

3.0.1

  • Fixed Icon issue in admin panel.
  • Fixed PHP 8.1.12 Compatibility Issue.
  • Fixed WordPress 6.6.1 Compatibility Issue.
  • New Help area for admin panel.

3.0.0

  • Compatibility Full plugin coding structure.
  • Compatibility Code compatibility with latest WordPress version.
  • Compatibility Code compatibility with latest PHP version.
  • Note Removed unused files to reduce plugin size.

2.0.5

  • New All icons from Icofont library.
  • Fixed Check mark icon not loading issue.
  • Compatibility WordPress 6.6.2 compatibility.

2.0.4

  • Compatibility Plugin UI.

2.0.3

  • Fixed Icon issue for admin panel.
  • Fixed PHP 8.1.12 Compatibility Issue.
  • Fixed WordPress 6.6.1 Compatibility Issue.
  • New Help area for admin panel.

2.0.2

  • New New icon fonts.
  • Fixed Activation debug errors.

2.0.1

  • Fixed PHP warning on activation.
  • Fixed Latest PHP compatibility.

2.0.0

  • Fixed Error.
  • Fixed Update code structure.
  • Compatibility Code compatibility with latest WordPress version.
  • Compatibility Code compatibility with latest PHP version.
  • Compatibility Plugin description.

1.5.2

  • Compatibility Default background removed from option field (avoids disappearing issue on Pro).
  • New Subtitle fields in admin sections for clarity.
  • New Pro version feature instructions on option fields.

1.5.1

  • New Compatibility with WordPress 6.5.4.
  • Compatibility Banner advertising removed.
  • Compatibility Unified plugin action link & setting link.

1.4.16

  • New Option to use contact form shortcode from third-party plugins.
  • New Help text on some fields.
  • Compatibility Compatibility with latest WordPress & PHP.
  • Fixed Subject variable receiving issue in email template.
  • New IP address option for email template.

1.4.15

  • New Custom CSS option.
  • New Custom JavaScript option.

1.4.14

  • Fixed CSS issues.

1.4.13

  • Fixed Compatibility issues.

1.4.12

  • Compatibility Converted plugin code to class-based structure.
  • New Compatibility for WordPress 6.4.1.
  • New Help page.

1.4.11

  • Compatibility Framework class to avoid conflicts with other plugins.

1.4.10

  • New Missing strings for translation.
  • New Help page for easy access.
  • New Redirection option after activation.
  • Fixed PHP warning.
  • Compatibility WordPress 6.3.2 compatibility.

1.4.9

  • Fixed PHP warning.
  • Compatibility WordPress 6.3 compatibility.

1.4.8

  • Note Changed default placeholder email template.
  • New {subject}, {siteURL} tags.
  • Note Auto-detect: Website URL as “Domain Name”.
  • Note Auto-detect: Admin email as “Target Email”.

1.3.8

  • Fixed PHP compatibility & WordPress latest compatibility.

1.3.7

  • Compatibility Plugin content direction.

1.3.6

  • Fixed PHP & WordPress version compatibility issues.

1.3.2

  • Fixed Responsive issue.
  • New Turkish language file.

1.1.0

  • Compatibility Readme for guidelines.

1.0.0

  • Note Initial release.