{"id":14552,"date":"2026-07-27T11:09:42","date_gmt":"2026-07-27T05:09:42","guid":{"rendered":"https:\/\/directorist.com\/blog\/?p=14552"},"modified":"2026-07-27T11:10:24","modified_gmt":"2026-07-27T05:10:24","slug":"directorist-v8-9-release","status":"publish","type":"post","link":"https:\/\/directorist.com\/blog\/directorist-v8-9-release\/","title":{"rendered":"Directorist v8.9: Custom Badges Put Listing Labels Fully in Your Hands"},"content":{"rendered":"\n<p>We ship new features to the Directorist core plugin frequently, and that plugin is free. It&#8217;s fair to ask why we put so much into something that doesn&#8217;t generate direct revenue.<\/p>\n\n\n\n<p>Here&#8217;s the honest answer: the core plugin is the foundation of our entire ecosystem, and Directorist now powers over 25,000 active directories worldwide. As part of the WordPress open source community, we see that as a responsibility, not a bonus feature. We build for everyone who uses Directorist, regardless of whether they&#8217;ve ever purchased a pro add-on. Whether someone upgrades to our premium extensions comes second to that.<\/p>\n\n\n\n<p>For years, Directorist listings could wear exactly three labels &#8211; <strong>New<\/strong>, <strong>Popular<\/strong>, and <strong>Featured<\/strong>. Useful, but fixed. If your directory needed a &#8220;Top Rated&#8221; badge, a &#8220;Trending This Week&#8221; tag, or a label for your own promotions, there was no built-in way to make it happen without custom code.<\/p>\n\n\n\n<p><strong>Directorist v8.9<\/strong> changes that. The headline feature of this release is <strong>Custom Badges<\/strong> &#8211; a rule-based badge builder that lets you create as many badges as you want, define exactly when each one should appear, and style it however fits your brand. It&#8217;s the biggest addition in this release, and it&#8217;s what most of today&#8217;s post is about.<\/p>\n\n\n\n<p>Alongside it, v8.9 also ships a pending order cancellation flow, timezone-aware Business Hours in the v2 Listings API, new map sync events for developers, and a batch of reliability fixes across orders, file uploads, and the REST API.<\/p>\n\n\n\n<p><strong>TL;DR<\/strong><\/p>\n\n\n\n<p>Directorist v8.9 introduces fully configurable Custom Badges with conditional rules, icons, colors, and tooltips \u2014 the main focus of this release. It also adds pending order cancellation from the user dashboard, timezone support for Business Hours in the v2 API, new map bridge lifecycle events, and several stability and bug fixes.<\/p>\n\n\n\n<p><a href=\"https:\/\/wordpress.org\/plugins\/directorist\/#developers\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">View Full Changelog \u2192<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\"><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Custom_Badges_Build_Your_Own_Rules_for_Listing_Labels\">Custom Badges: Build Your Own Rules for Listing Labels<\/span><\/h2>\n\n\n\n<p>Badges are one of the fastest ways to tell a visitor what matters about a listing before they even click into it. Until now, that signal was limited to whatever Directorist decided in advance. With v8.9, that decision is yours.<\/p>\n\n\n\n<p>Custom Badges let you define your own conditions \u2014 view count, listing age, rating, reviews, featured status \u2014 and Directorist automatically applies the badge to any listing that qualifies. No manual tagging, no code, no plugin add-ons. Set the rule once, and it runs itself.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span id=\"Creating_a_Custom_Badge\">Creating a Custom Badge<\/span><\/h3>\n\n\n\n<p>Head to <strong>Settings \u2192 Appearance \u2192 Badges<\/strong>. This is where every badge on your directory lives, including the default New, Popular, and Featured badges, and it&#8217;s also where you&#8217;ll click <strong>Add Badge<\/strong> to start a new one.<\/p>\n\n\n\n<p>If you&#8217;re experimenting and want a clean slate, the <strong>Reset Defaults<\/strong> button restores the original badge setup &#8211; so there&#8217;s no risk in trying different rules before you settle on one.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1705\" height=\"616\" src=\"https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-3.png\" alt=\"\" class=\"wp-image-14555\" srcset=\"https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-3.png 1705w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-3-300x108.png 300w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-3-1024x370.png 1024w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-3-768x277.png 768w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-3-1536x555.png 1536w\" sizes=\"auto, (max-width: 1705px) 100vw, 1705px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span id=\"Choosing_a_Badge_Type\">Choosing a Badge Type<\/span><\/h3>\n\n\n\n<p>Every badge starts with a type:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Text badge<\/strong> \u2014 a label with an optional icon (e.g., a blue &#8220;Trendy&#8221; tag).<\/li>\n\n\n\n<li><strong>Icon badge<\/strong> \u2014 just an icon, with hover text that appears when a visitor points at it.<\/li>\n<\/ul>\n\n\n\n<p>Give the badge an <strong>Internal name<\/strong> (visible only to admins) and, for text badges, a <strong>Visible label<\/strong> \u2014 the actual text your visitors will see. From there, set the background, text, and border colors so the badge matches your directory&#8217;s look and feel.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span id=\"Setting_Match_Conditions\">Setting Match Conditions<\/span><\/h3>\n\n\n\n<p>This is where a badge becomes genuinely custom. Under <strong>Match Conditions<\/strong>, choose whether a listing needs to satisfy <strong>All<\/strong> rules (AND) or just <strong>Any<\/strong> one of them (OR), then add conditions from fields like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>View count<\/li>\n\n\n\n<li>Listing age (days)<\/li>\n\n\n\n<li>Average rating<\/li>\n\n\n\n<li>Review count<\/li>\n\n\n\n<li>Is featured<\/li>\n<\/ul>\n\n\n\n<p>Stack as many conditions as you need, set an operator and value for each, and remove any rule with a single click. A &#8220;Top Rated&#8221; badge might require an average rating of 4 or higher <em>and<\/em> at least 5 reviews. A &#8220;Trending&#8221; badge might only need a high view count <em>or<\/em> a recent listing date. The logic is entirely yours to define.<\/p>\n\n\n\n<p>Once the rules are set, click <strong>Save Changes<\/strong> \u2014 the badge is live immediately and starts appearing on every listing that meets its conditions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1014\" height=\"308\" src=\"https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image.png\" alt=\"\" class=\"wp-image-14554\" srcset=\"https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image.png 1014w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-300x91.png 300w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-768x233.png 768w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span id=\"Displaying_Badges_on_the_Single_Listing_Page\">Displaying Badges on the Single Listing Page<\/span><\/h3>\n\n\n\n<p>New badges don&#8217;t show up automatically everywhere \u2014 you decide where. Go to <strong>Directory Builder \u2192 Single Page Layout \u2192 Listing Header \u2192 Quick Info<\/strong>, and you&#8217;ll find <strong>Badges<\/strong> listed alongside Location, Category, and Rating.<\/p>\n\n\n\n<p>Toggle it on, then click the gear icon to open <strong>Badge Settings<\/strong>, where you can switch each individual badge \u2014 New, Popular, Featured, and any custom badge you&#8217;ve built \u2014 on or off for the single listing page. Drag to reorder Badges among the other Quick Info elements however you like.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1378\" height=\"641\" src=\"https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-4.png\" alt=\"\" class=\"wp-image-14556\" srcset=\"https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-4.png 1378w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-4-300x140.png 300w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-4-1024x476.png 1024w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-4-768x357.png 768w\" sizes=\"auto, (max-width: 1378px) 100vw, 1378px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span id=\"Adding_Badges_to_the_All_Listing_Layout\">Adding Badges to the All Listing Layout<\/span><\/h3>\n\n\n\n<p>Badges aren&#8217;t limited to the single listing page. In <strong>Directory Builder \u2192 All Listing Layout<\/strong>, switch to Grid or List view, and you&#8217;ll see a <strong>+<\/strong> button on each card position (top-left, top-right, etc.). Click it to open <strong>Insert Element<\/strong> and add your custom badge right there.<\/p>\n\n\n\n<p>A single position can hold up to <strong>three badges at once<\/strong>, so a card can show &#8220;Popular&#8221; and &#8220;Trendy&#8221; side by side without conflict. Once a position is full \u2014 or every badge you&#8217;ve created is already placed somewhere \u2014 the Insert Element popup simply shows nothing left to add.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"918\" height=\"710\" src=\"https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-5.png\" alt=\"\" class=\"wp-image-14557\" srcset=\"https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-5.png 918w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-5-300x232.png 300w, https:\/\/directorist.com\/blog\/wp-content\/uploads\/sites\/6\/2026\/07\/image-5-768x594.png 768w\" sizes=\"auto, (max-width: 918px) 100vw, 918px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span id=\"Deleting_a_Badge\">Deleting a Badge<\/span><\/h3>\n\n\n\n<p>Outgrown a badge? Go back to <strong>Settings \u2192 Appearance \u2192 Badges<\/strong>, find it in the list, and click <strong>Delete Badge<\/strong>. It&#8217;s removed instantly and stops appearing on every listing it was previously matched to.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span id=\"Why_This_Matters\">Why This Matters<\/span><\/h3>\n\n\n\n<p>Custom Badges turn a cosmetic detail into a real merchandising tool. A real estate directory can flag &#8220;Price Reduced&#8221; listings automatically. A restaurant directory can surface &#8220;Highly Rated&#8221; spots without an admin lifting a finger. A job board can highlight &#8220;Urgent Hiring&#8221; posts the moment they&#8217;re added. The rules run continuously in the background &#8211; set them once, and the Directorist keeps the badges accurate as listing data changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Also_New_Pending_Order_Cancellation\">Also New: Pending Order Cancellation<\/span><\/h2>\n\n\n\n<p>Users can now cancel a pending order directly from their dashboard, instead of waiting on an admin or support ticket to resolve it. It&#8217;s a small change that removes friction from the checkout experience and cuts down on unnecessary back-and-forth for order management.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Also_New_Timezone_Support_for_Business_Hours\">Also New: Timezone Support for Business Hours<\/span><\/h2>\n\n\n\n<p>The v2 Listings API now supports timezone options and validation for Business Hours, along with an &#8220;always open&#8221; setting. This matters most for multi-location or multi-timezone directories, where &#8220;open now&#8221; needs to reflect the listing&#8217;s actual local time rather than the server&#8217;s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Also_New_Map_Bridge_Lifecycle_Events\">Also New: Map Bridge Lifecycle Events<\/span><\/h2>\n\n\n\n<p>For developers working with the Listings With Map integration, Directorist now emits lifecycle events for map ready state, viewport changes, and marker clicks. These events make it easier to keep custom map implementations in sync with listing data without relying on workarounds.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Improved\">Improved<\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Legacy orders API compatibility<\/strong> \u2014 current order, checkout, and payment endpoints have moved to v2, while v1 orders routes have been restored for backward compatibility.<\/li>\n\n\n\n<li><strong>Extension settings empty state<\/strong> \u2014 messaging is clearer when an active extension&#8217;s settings actually live elsewhere in the settings panel.<\/li>\n\n\n\n<li><strong>Dashboard listing action menu<\/strong> \u2014 behavior is more consistent for shorter listing tables.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Fixed\">Fixed<\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Admin orders list and order details now display correctly for guest, missing, or deleted customer accounts.<\/li>\n\n\n\n<li>Required hidden fields under Conditional Logic no longer block listing submissions.<\/li>\n\n\n\n<li>Multiple custom File Upload fields on the same form no longer fail with invalid upload requests.<\/li>\n\n\n\n<li>REST API password reset PIN validation and temporary media upload authentication for Application Password requests are corrected.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Wrapping_Up\">Wrapping Up<\/span><\/h2>\n\n\n\n<p>Custom Badges is the feature we&#8217;d point to first in Directorist v8.9 \u2014 it takes something every directory already relies on and hands you full control over it, without touching a line of code. Pair it with the rest of this release \u2014 safer order handling, timezone-accurate Business Hours, and a steadier API \u2014 and v8.9 is a release worth updating for.<\/p>\n\n\n\n<p>As always, <strong>back up your site before updating<\/strong>, then upgrade Directorist core to v8.9 from your WordPress dashboard.<\/p>\n\n\n\n<p>Have questions or feedback? Drop them in the comments or head over to the <a href=\"https:\/\/www.facebook.com\/groups\/directorist\" target=\"_blank\" rel=\"noreferrer noopener\">Directorist Community<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span id=\"Read_More_Product_updates\">Read More Product updates<\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/directorist.com\/blog\/directorist-v8-7-update\/\" target=\"_blank\" rel=\"noreferrer noopener\">Directorist v8.7: New Advanced Fields to Make Listings More Actionable<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/directorist.com\/blog\/directorist-v8-6-upgrades\/\" target=\"_blank\" rel=\"noreferrer noopener\">Directorist v8.6: A Practical Upgrade for Growing Directory Sites<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/directorist.com\/blog\/directorist-new-version-overview\/\" target=\"_blank\" rel=\"noreferrer noopener\">Directorist v8.5 Is Here with a New Look, Essential Upgrades and Fixes<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>We ship new features to the Directorist core plugin frequently, and that plugin is free. It&#8217;s fair to ask why we put so much into something that doesn&#8217;t generate direct revenue. Here&#8217;s the honest answer: the core plugin is the foundation of our entire ecosystem, and Directorist now powers over 25,000 active directories worldwide. As [&hellip;]<\/p>\n","protected":false},"author":30802,"featured_media":14558,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[19,20,71],"class_list":["post-14552","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-product-updates","tag-directorist","tag-directory-plugin","tag-directory-website-builder"],"_links":{"self":[{"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/posts\/14552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/users\/30802"}],"replies":[{"embeddable":true,"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/comments?post=14552"}],"version-history":[{"count":0,"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/posts\/14552\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/media\/14558"}],"wp:attachment":[{"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/media?parent=14552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/categories?post=14552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/directorist.com\/blog\/wp-json\/wp\/v2\/tags?post=14552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}