Description
Web Directory plugin Free is a WordPress directory plugin that turns your site into a searchable business directory. Sort listings into categories and locations, build your own listing form, drop the directory onto any page with a shortcode, and let visitors search and browse – as a list, as cards, or on an interactive map.
In the free edition you add and edit listings from the WordPress admin, and visitors browse, search and view them on the front end.
AI that writes the listing, and search by sentence
Add a key for a free AI service and a Write button appears beside the listing description: it reads the entry name, its categories and its location, and drafts the text. Nothing is sent anywhere until you enter that key, and the fields a person has to state as fact – prices, phone numbers, dates, opening hours – are never generated, because a plausible invented price is worse than an empty one.
The free edition ships with Groq, which has a free tier that needs no payment card. The separate AI Assistant Add-on widens it: OpenAI, DeepSeek, Mistral, OpenRouter and Google Gemini as further services, a Write button on every text field on the form instead of the description alone, and one control that fills every empty field in a single request so the texts agree with each other.
The add-on also brings assisted search. A visitor writes what they are after as a sentence, “a cheap place open on Sunday that takes cards”, and it is read into the search form’s own filters rather than into the keyword box: the category, the location and the distance, the sliders and the dropdowns your form carries. Only values the form actually offers are set, every one of them is shown above the results as a chip the visitor can drop, and a filter they set or cleared themselves is left exactly as they left it. A one-word search is answered the way it always was, without asking the model at all. The add-on is a plugin of its own and is managed from the same AI settings tab.
Live demo: directory.salephpscripts.com
What you can build
A local business directory, a member or staff directory, a property or vehicle catalogue, a venue or event guide, a service-provider index, a classifieds board. Anything that is a list of places or things with fields, categories and a map.
Organise your listings
- Categories and locations are hierarchical, so Country, Region, City nests the way you expect, and each level gets its own page.
- Each category can carry its own marker icon and colour, so the map reads at a glance.
- Every category and location page is a real URL with its own listings, search and map.
Build the listing form yourself
The form builder is drag and drop: arrange fields in rows and columns, and add your own on top of the built-in ones. Field types included:
- Title, Content, Excerpt
- Categories
- Address and Map
- Images & Videos – photos plus YouTube or Vimeo links, shown in one gallery with a lightbox
- Contact info, Phone, Email, Website URL
- Text/string, Number, Price
- List – as a dropdown, radio buttons or checkboxes
- Date-Time
- Opening hours
- File upload
Every field can be placed independently on the listing card, the listing page, the search form and the map popup, so a field can be searchable without cluttering the card.
Put the directory anywhere
Each directory has a page builder: choose which elements appear on the home, category, location and listing pages, and in what order – search form, map, categories block, listings grid, slider, breadcrumbs, page title, buttons.
If you would rather place things by hand, every element is also a shortcode: [webdirectory], [webdirectory-search], [webdirectory-map], [webdirectory-listings], [webdirectory-categories], [webdirectory-locations], [webdirectory-slider], [webdirectory-breadcrumbs], [webdirectory-listing-page] and more. They work in the block editor, in Elementor and in WPBakery.
Maps
- Three engines: Google Maps, Mapbox and MapLibre with MapTiler tiles. Pick per site.
- Marker clustering, so thousands of listings stay usable.
- Per-category and per-listing marker icons.
- Rich popups built from the fields you chose, with the listing photo.
- A map sidebar that lists what is currently in view, and follows as the visitor pans.
- Radius search from an address, in miles or kilometres.
- Several layouts, including a full-width hero map and a sticky map beside the listings.
Search that finds things
The search form is built the same way as the listing form: drag in the elements you want.
- Keyword, categories, locations, address plus radius, rating.
- Any custom field you added becomes a filter – a price range, a number range, a date, a dropdown.
- A “More filters” separator to keep the visible form short.
- Sorting by newest, oldest, title, rating, random, or any numeric or date field you defined.
- Grid and list views, with the visitor’s choice remembered.
- With the AI Assistant Add-on, a whole sentence instead of a form: the filters above set themselves from it, and the visitor can drop any of them.
Ratings
Built in, no add-on: visitors rate a listing, the average shows on the card, the listing page and the map popup, and rating becomes a search filter and a sort option. Ratings can be switched off entirely.
Bulk work
- CSV import and export for listings, including categories, locations, custom fields, images and video links. Import creates or updates; export round-trips.
- Demo content: 5 ready-made directories with their maps and pages, and a listing form template, imported in one click.
- A thumbnail regeneration tool for when you change image sizes.
Plans and listing lifetime
- Plans decide what a listing gets: how many categories, locations, images and videos, which fields, a logo, the map, ratings, and a sticky badge that keeps it first in the lists you choose.
- An active period per plan – days, weeks, months or years – or none at all. A listing whose period ends leaves the site on its own.
- Reminder emails before a listing expires, once or several times (for example 7, 2 and 1 day before), and an email when it expires.
- After expiration, a plan can hand the listing to another plan instead of taking it down: a featured period that falls back to a basic listing.
- Pause takes a listing off the site without spending its period. Renew an expired listing, or give any listing a date of its own, from its edit screen.
Looks and setup
- An install wizard that creates the pages and the first directory for you.
- Colour palette controls so the directory matches your theme, with several presets.
- Translation ready: ships a POT file for any standard gettext or PO editor.
Emails and spam protection
- Email notifications with editable subjects and texts, each one switchable.
- Google reCAPTCHA (v2 or v3) on the listing contact form.
Ready for large directories
- A dedicated search index and sort index keep tens of thousands of listings responsive, and both rebuild in the background.
- A diagnostics page that checks the directory is wired up correctly and tells you what to fix if it is not.
This plugin uses external services: the map provider you choose, Groq for AI writing once you add a key, Google reCAPTCHA if you turn it on, and salephpscripts.com for the AI Assistant Add-on and the demo data. See the External Services section below.
What is not in the free edition
Front-end submission and payments. In the free edition listings are created and edited in the WordPress admin; visitors browse and search. The paid version adds front-end submission with a member dashboard, where members pick a plan, pause and renew their own listings, and WooCommerce checkout for paid listings, renewals, raise-ups and plan upgrades.
Get the full version: Web 2.0 Directory on CodeCanyon
External Services
Web Directory plugin Free uses the following third-party services. Nothing is sent until you use the matching feature:
- Map providers (Google Maps, Mapbox, MapTiler / MapLibre) – when a map loads or an address is geocoded, the request (coordinates, the address being searched, and your API key/token) is sent to the provider you chose. See that provider’s terms and privacy policy.
- Google reCAPTCHA – when you turn it on for the contact form, the visitor’s interaction is checked with Google. See Google’s terms and privacy policy.
- Groq (AI writing) – only when you have entered a Groq API key and pressed a Write button. What is sent is the text the draft is built from: the entry name, its categories, its location and the fields already filled in. Nothing is sent without a key, and no key ships with the plugin. See Groq’s terms (https://groq.com/terms-of-use/) and privacy policy (https://groq.com/privacy-policy/).
- salephpscripts.com (the plugin author) – when you open the AI tab of the settings, the plugin asks salephpscripts.com for the latest version of the AI Assistant Add-on, at most once an hour; only the add-on’s name is sent. When you press the button that installs the add-on or the one that downloads the demo data, the file comes from salephpscripts.com, and your site’s domain and the plugin version are sent with that request.
Updates come through WordPress.org. The free edition does no license or “phone-home” checks.
Screenshots



















Installation
- Upload the plugin folder to /wp-content/plugins/, or install the ZIP via Plugins -> Add New -> Upload Plugin.
- Activate Web Directory plugin Free from the Plugins menu.
- Open the settings page, pick your map engine and enter its API key/token (Google Maps API key, Mapbox token, or MapTiler key).
- Create your categories and locations, build the listing form, add listings, and place the directory on any page with the shortcode.
FAQ
-
Who can add listings in the free edition?
-
Listings are created and edited from the WordPress admin. Front-end submission (with optional moderation, expiration and renewal) is part of the full version.
-
Do I need API keys?
-
For maps, yes – each map provider needs its own key/token, entered on the settings page. Keys are stored on your site and are never sent to us.
-
Which map providers are supported?
-
Google Maps, Mapbox, and MapLibre with MapTiler tiles. You pick one on the settings page.
-
Is it translation ready?
-
Yes. A languages/w2dc.pot template is included; translate it with any standard gettext/PO editor.
-
How do paid listings and membership plans work?
-
Paid submission, membership plans and WooCommerce checkout come with the full version of Web 2.0 Directory, not the free edition.
Reviews
Contributors & Developers
“Web Directory plugin Free – AI powered” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Web Directory plugin Free – AI powered” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.3.5 – 2026-10-13
- Improvement: the directory Slider starts on Contain too, so the listing logos it shows are no longer cropped.
- Improvement: Quick Edit is back on the listings table, trimmed to what a listing needs: title, slug, author, tags and status. The publish date, the password and Allow Comments are not on it – a listing’s own dates, audience and reviews are set elsewhere.
- Improvement: the Status column names two more states instead of leaving the cell empty: awaiting activation (a guest has not clicked the link in the activation email) and draft (the author has not submitted it yet).
- Improvement: the pre-expiration email can go out more than once: enter the days as a list, for example 7,2,1 (2,1 by default).
- Improvement: the default pre-expiration email now links to the renewal, and both expiration emails accept a [price] tag.
- Improvement: a plan with an “After expiration” plan is no longer renewed, and its reminder email says which plan the listing moves to.
- Improvement: time a listing spends paused or waiting for moderation no longer counts against its period: its expiration date moves on by that time.
- Fix: replacing or removing a listing’s images now changes the picture it is shared with.
- Fix: images deleted from a listing no longer come back on sites moved over from the old version.
- Fix: directories no longer appear on their own. A directory sent to the trash counted as absent, so the next admin page load created a replacement named “Listings” and the trash filled up with them. The default directory is created once per site now, and never again.
- Fix: a company name made of very short words, like “AG of C”, is found. Words under three letters cannot be in the search index at all, so a phrase of nothing but those used to return nothing; the search now falls back to matching the listing title, and then its text.
- Fix: on a big site, a keyword search inside one directory could miss listings that belong to it. The search took its best 2000 matches across the whole site and narrowed to the directory afterwards; it narrows first now.
- Fix: the renew link in the expiration emails renews the listing, also when the owner has to log in first.
- Fix: when a listing gets a new expiration date (a payment, Mark as paid, a date set by hand, a plan change), the reminder and expiration emails are sent again for the new period.
- Fix: a listing in the trash no longer gets expiration emails, and is no longer taken out of the trash when its date passes.
- Fix: with renewal turned off, the link in the expiration emails opens the listing instead of a renewal that did nothing.
- Fix: in fullscreen, the directory search form no longer joins the map on top of the map’s own search form. When the map shows its own form, that one stays alone; without it, the directory form still comes along.
2.3.4 – 2026-10-07
- New: Print and Save as PDF buttons for the listing page (switch them on in the Buttons element of Edit Directory) open a clean printable copy of the listing.
- Improvement: the grid / list switch sits right after the number of listings found.
- Improvement: the listing gallery takes a Slide ratio and an Image fit in the grid too, and both displays now start on Contain, so a wide logo is no longer cropped.
- Fix: a listing waiting for approval is no longer published when its plan period ends or when it is renewed.
- Fix: no “your listing has expired” email when the listing moves straight to another plan and stays on the site.
- Fix: a map placed beside taller fields on the listing form no longer grows past its Height.
- Fix: listings saved through the listing form are found when searching by their location. Existing listings are repaired automatically.
- Fix: saving a directory after an update from an older version no longer removes its plans.
- Fix: a listing keeps its plan when its directories don’t offer that plan.
2.3.3 – 2026-10-01
- New: a Sort options table for the Listings element: choose which orders the visitor’s Sort control offers, in what order and direction, under what name, whether sticky listings go first, and which one the grid opens with.
- New: switching a directory’s Listing template rebuilds the settings that list its fields (card fields, sort options, Listing body, default filter, search form). Switching back brings the old template’s settings back.
- New: a Default image for listings that have none, shown on their card, in the map popup and in the map sidebar. A neutral built-in image by default; choose your own or switch it off. Sites moved over from the old Web 2.0 Directory keep their default logo.
- Improvement: sorting by title no longer puts sticky listings first by default. Turn it on for Title in Sort options if you want it.
- Improvement: more space between the fields of the listing form.
- Improvement: the demo maps import with “Save and follow map center” off, so moving one no longer rewrites the page address.
- Improvement: a field added to the listing form after the Listing body’s field list was saved now shows on the listing page too.
- Improvement: the Rating row of the Listing body starts switched off, so the listing page no longer shows the rating twice.
- Improvement: the map’s cookie-consent notice can be translated, names the consent plugin holding the map back (Borlabs Cookie, Complianz, Cookiebot or Avada Privacy) and, with Borlabs Cookie or Cookiebot, has an Open cookie settings button.
- Improvement: buttons and links in the Edit Directory boxes use the primary colour set in Customization instead of the WordPress admin blue.
- Improvement: a word limit for every text field on the listing cards: 10 words for the title and 20 for the others by default (0 shows the whole text).
- Improvement: categories, tags and list fields on the cards show 5 items by default (0 shows all) and end with …; hover it to see how many more there are.
- Improvement: in the field lists of Edit Directory and Edit Map the options line up in one column, and the Popups list’s “fill” switch matches the on/off one.
- Improvement: category markers, listing markers and image markers each have their own size in Edit Map (30-70 px, 40 by default). Existing maps keep their old size.
- Improvement: map popups and the map sidebar cut long content like the cards do: 20 words for text fields (10 for the title) and 5 items for categories, tags and lists, set per row in Edit Map (0 shows everything).
- Improvement: the translation template (.pot) now lists every string of the plugin, the new screens included, so the whole interface can be translated.
- Fix: a directory on any form template but the first showed the first template’s fields in the builder, on its cards and Sort control, and on its listing pages.
- Fix: a Mapbox or MapLibre map held back by a cookie-consent plugin says it is waiting for consent instead of “API key is not configured”, and appears as soon as the visitor accepts.
- Fix: on a site that finished migrating, the migration screen no longer offers the Plans step again (running it overwrote the plans set up since).
- Fix: a new listing form starts with the standard fields (title, description, excerpt, categories, tags, address, map, images). On sites moved over from the old Web 2.0 Directory it started with every old field.
- Fix: on Google Maps, markers and clusters no longer disappear while the map pans.
- Fix: the open/close tab of the map sidebar keeps its shape on themes that round every button.
- Fix: the number fields in the Edit Map and Edit Directory field lists show two-digit values in full.
- Fix: directory pages with an element stretched over several rows, like the demo listing pages, stack into one column on tablets and phones.
- Fix: the Price field on the listing page lines up with the other fields on phones and on wide screens.
- Fix: on phones the map’s “Number of locations” counter no longer hides under the sidebar tab or the attribution button.
- Fix: on phones the “AI-assisted search” label of a search form on the map is no longer cut off.
2.3.2 – 2026-09-28
- New: three ways to choose categories on the listing form, set per form: a checkbox list, dropdowns level by level, or type-to-search where you can also add a category that does not exist yet, the way tags work. Existing forms keep what they had.
- New: the form builder places fields on the same grid as the directory builder. Every field and group carries its own width buttons – full, 2/3, 1/2, 1/3 – so a field can be made wide where it sits instead of only as the first slot of a two-thirds row, and arrow buttons stretch a field down over the empty space below it, which keeps the column beside it from sliding under. Templates saved before this open and save unchanged.
- New: the plan option “Enable map” is a real switch. Off, a listing of that plan gets no map on its page and no map field on the listing form; the address still places it. Existing plans keep their map: the option is stamped on as it was.
- Improvement: with no Map field on the listing form, no map is drawn anywhere – there is nothing behind it. A listing with no plan follows the form.
- Improvement: the price on a listing page can be styled the way it already could on cards – its own size, a badge, a rule above and below, an accent bar, a smaller currency sign. Set per element, in the Listing body element’s field list.
- Improvement: a field stretched down in the builder fills that space on the form too – a tall category list, map or text box instead of a gap under a short field.
- Improvement: the AI buttons all look alike and say why they are not ready yet: the “fill in the title and choose a category” note is now in one place, on the Write-all bar, instead of under every field.
- Improvement: field groups on the listing form open and close smoothly instead of blinking out.
- Improvement: the listing form is easier to read: field names are bold, fields side by side start at the same height, and the video link box is as tall as every other input.
- Improvement: renewing a listing adds the plan’s period to the time it still has, instead of starting from the day of renewal. Renewing early no longer costs the remaining days; a listing renewed after it expired still gets a full period from that day.
- Improvement: the price caption on a plan card follows the plan’s own active period when it is left empty, so a card cannot promise “per year” on a plan whose listings live a month. Your own wording still wins if you set it.
- Improvement: every number on a plan is a limit now, and the limit a listing gets. 0 means none – no images, no videos, no address, no categories, no tags – as it did in the earlier version and as the plan card already said, instead of quietly handing the listing form’s own limit back; a listing shows at most as many images and videos as its plan allows, the form’s own limits apply only to a listing with no plan, and plans that never carried a number keep exactly what they had.
- Improvement: the listing form in wp-admin is wider, up to 1100px instead of 768px, so the fields use the box rather than a narrow column down the middle of it. Most noticeable on a screen set to one column, where the box is the full width of the page.
- Improvement: ticking Closed or 24h in Opening hours no longer loses the day’s times while the form is open. Unticking puts them back, so a day switched on and off again does not have to be entered twice.
- Improvement: reloading a listing form, or saving one in wp-admin, no longer throws the page back to the top. The form remembers how tall it was and how far down the page stood, and puts both back as the fields arrive, instead of leaving the view to be restored against a page that is still empty.
- Fix: “N listings included” is shown only on plans that can actually grant the package, which needs the full version’s payments. In the free version the line is no longer printed; the setting itself is kept.
- Fix: a listing shows only the fields its plan includes – on its page, in map popups, the sidebar, cards and marker labels. A listing moved to a smaller plan, by hand or when a paid period ran out, went on showing the fields it no longer paid for; they come back if it returns to the plan.
- Fix: a listing can no longer be saved with a field its plan does not include. The form already hid such fields, but the server accepted them.
- Fix: the plan’s Logo enabled switch, now next to Images number, works. Turned off, that plan’s listings show no logo on cards, in map popups, the map sidebar or on image markers, and the listing form stops offering a logo choice; plans migrated from the earlier version get back the setting their level had.
- Fix: on Settings, Plans the “show as feature” checkboxes sit on the field’s label line again instead of on top of the input below.
- Fix: the plan option “Who can view listings” works. A visitor the plan shuts out opens the listing page and sees its title with a note instead of the content; the listing itself stays in the directory, the search and the map. Before, the setting was saved but never applied.
- Fix: a plan’s “Certain locations” is enforced when a listing is saved, not only in the form. A location outside the plan’s list is dropped from the address instead of being stored; the address itself is kept.
- Fix: the plan groups in the plans constructor are shaded again, so each group reads as a block.
- Fix: a plan’s limits on categories and tags now hold on every save, not only in the listing form: quick edit, bulk edit, a CSV import and a programmatic save are clamped too, and the “Certain categories” subset with them.
- Fix: a plan with “Logo enabled” off no longer shows the logo in the map’s info window or as the page’s share image; every other surface already honoured it.
- Fix: on WPML and Polylang sites a translated listing follows its plan’s limits. The plan is stored on the main version, so a translation read as having no plan at all.
- Fix: a plan with “Listings have own pages” off really leaves its listings without one: the listing URL answers 404 instead of opening the page, and the slider stops linking to it. Before, only the title on a card was unlinked while the page stayed open to anyone with the link.
- Fix: the plans box on Edit Directory fits a narrow column. Each plan keeps its whole name on the first line, next to Expand, and its summary moves to a line of its own, instead of the name shrinking to three letters and the summary standing in a column. On Settings, Plans the plan changes table scrolls inside the page instead of pushing the plans past its right edge.
- Fix: the “Use gradient on buttons” option works again: the main buttons fade from the button primary color to the button secondary color, reversed on hover, and keep their icons.
- Fix: importing the demo listing form no longer empties your listing form, which left listing cards showing only the image and imported listings without their custom fields. A form already emptied this way gets the default fields back.
- Fix: demo directories keep their card fields and other element settings after import.
- Fix: “Geocode addresses” in the CSV import now puts listings on the map from their address, with Google, Mapbox or MapTiler. Addresses it cannot place are listed in the import results.
2.3.1 – 2026-09-22
- New: the price can stand out in map popups, the sidebar and cards: badge, divider, accent colour, smaller currency sign and font size. On cards, a price placed last sits on the bottom edge, so prices line up.
- New: “Hide from anonymous users” for field groups. Logged-out visitors see the group title and a login prompt instead. Migrated groups keep this setting.
- New: WPML and Polylang support. Maps, listings, search and counts show the page’s language. Each listing keeps one set of markers and one search-index entry for all its languages. Listing fields are copied to translations.
- New: settings per language on WPML and Polylang sites. Emails, AI prompts, the address format, the map language and a few more can differ per language. Emails go out in the listing’s language.
- New: form templates per language on WPML and Polylang sites. Field names, help texts and option labels can be translated.
- New: plans per language on WPML and Polylang sites. Plan names, descriptions, badges and feature lines can be translated.
- New: directories per language on WPML and Polylang sites. The directory name, URL segments and form labels can be translated. Each language gets its own URLs.
- New: map search forms per language on WPML and Polylang sites.
- New: CSV import and export on WPML and Polylang sites. Translations go in the same row, in columns like title:fr or categories_list:fr.
- New: image and video captions per language on WPML and Polylang sites.
- New: the Submit button reads “Submit new …” with the directory’s singular label, as in earlier versions.
- New: right-to-left languages (Arabic, Hebrew, Persian). Directory pages, cards, popups, the sidebar, forms and the lightbox read from the right.
- New: “No maps” map engine, first in the list and the default on new installs. The directory then shows nothing about maps. Saved maps are kept for later. Legacy sites without maps migrate to it.
- Improvement: the migration keeps how listing images looked: logo fit, ratio, list width and gallery crop.
- Improvement: the demo export works on WPML and Polylang sites.
- Improvement: CSV category, location and tag columns also accept term IDs.
- Improvement: on WPML and Polylang sites, a new listing is saved in the language of its form.
- Improvement: on a listing page built from elements, category and directory links open without a full reload.
- Improvement: form builder: a group’s categories are picked like a field’s, with “Show for all categories”.
- Improvement: the setup wizard now ends by creating the directory page (“My First Directory” with [webdirectory]), or opens it if it exists. No map step.
- Improvement: the plugin’s admin menu items stay together.
- Improvement: a new Buttons element has all buttons on.
- Improvement: the Reset page also deletes directories, plans, claims and terms, and trashes the directory pages. “Everything” also removes hidden and per-user data. Settings of the old version are kept until it is migrated.
- Improvement: sticky listings now come first in every sort except Random, Distance and Relevance.
- Performance: a directory page without a map runs one search instead of two.
- Fix: sorting by date is correct on sites not in UTC.
- Fix: the CSV import reads the image captions column.
- Fix: map popups no longer indent fields without an icon.
- Fix: a field with its icon turned off no longer leaves a gap.
- Fix: the “Get directions” button looks right again.
- Fix: fields line up with icons in the map sidebar and on cards.
- Fix: other plugins’ links on a listing page keep their own colours.
- Fix: Card image fit also works in list view.
- Fix: a site migrated from Web 2.0 Directory keeps its maps. Sites already migrated get them back once.
- Fix: a bold or italic directory shortcode no longer breaks the listing page.
- Fix: a field group shows only when one of its fields does. The listing page hides fields meant for other categories.
- Fix: the two handles of a price or number slider can no longer meet.
- Fix: the REST SQL profile (?w2dc_sql_debug=1) works after redirects and can be turned on from an admin page.
- Fix: sorting by title is fast on large directories.
- Fix: an untouched price or number slider no longer filters out listings without a price.
- Fix: no broken Purchase code row in the free edition’s settings.
- Fix: the free edition no longer offers front-end submission. Its settings are dimmed and marked as full-version features.
- Fix: the form template editor no longer shows a duplicate “Edit Template” heading.
- Fix: no grey gap under the wizard bar on the Form Builder step.
- Fix: the wizard bar stays visible above the block editor.
- Fix: the Submit button is hidden when the directory’s “Allow submission” is off.
- Developer: the sidebar and cards now use
w2dc-listing-content__*classes instead ofw2dc-popup__*. Update custom CSS that targets them. - Developer: the
popupfield formatters are renamed tolisting_content. The old names still work.
Earlier versions
- The full version history is in changelog.txt, included with the plugin.
