Title: Ruhler Community Resource Directory
Author: ruhler
Published: <strong>September 17, 2026</strong>
Last modified: September 17, 2026

---

Search plugins

![](https://ps.w.org/ruhler-community-resource-directory/assets/banner-772x250.png?
rev=3700721)

![](https://ps.w.org/ruhler-community-resource-directory/assets/icon.svg?rev=3700721)

# Ruhler Community Resource Directory

 By [ruhler](https://profiles.wordpress.org/ruhler/)

[Download](https://downloads.wordpress.org/plugin/ruhler-community-resource-directory.0.3.0.zip)

 * [Details](https://wordpress.org/plugins/ruhler-community-resource-directory/#description)
 * [Reviews](https://wordpress.org/plugins/ruhler-community-resource-directory/#reviews)
 *  [Installation](https://wordpress.org/plugins/ruhler-community-resource-directory/#installation)
 * [Development](https://wordpress.org/plugins/ruhler-community-resource-directory/#developers)

 [Support](https://wordpress.org/support/plugin/ruhler-community-resource-directory/)

## Description

Ruhler Community Resource Directory lets any nonprofit or community service organization—
a food bank, a clothing closet, a legal-aid clinic, a tutoring program, a health
clinic network — manage its physical locations and the services offered at each 
one, entirely from wp-admin, and publish an accessible public directory that visitors
can search and filter.

Every core feature works on a plain WordPress installation. No API key, account,
or paid service is required to publish a complete, useful directory.

#### Manage your locations in wp-admin

 * A dedicated “Resource Locations” area in wp-admin, using WordPress’s own familiar
   publish/draft/trash workflow — no separate approval step, no new login for your
   staff to learn.
 * A “Services Offered” taxonomy so you can organize and later filter locations 
   by the services each one provides.
 * Address and contact fields (street, city, state, postal code, phone, website).
 * A weekly hours editor supporting hours-not-provided, closed, specific open/close
   times (including overnight hours that run past midnight), and open-24-hours —
   plus dated exceptions for a specific day (for example, a holiday closure) that
   override the regular weekly schedule.
 * Map coordinates for a location are entered by hand in this version. There is 
   no automatic address-to-coordinates lookup yet (see “What this version does not
   include” below).
 * A one-time, dismissible reminder on your Dashboard confirms your directory page
   is live and points you to “Add your first location.” It disappears permanently
   once you publish your first location, and never appears anywhere except the Dashboard
   and Plugins screens.

#### What visitors see

 * A searchable, filterable public directory: search by name, description, city,
   state, or ZIP/postal code; filter by service; and an “Open Now” toggle — all 
   without JavaScript. Every one of these is a real page reload with a real URL,
   so it works exactly the same with JavaScript on or off.
 * Locations are always listed with the ones open right now first, then locations
   opening later today, then closed, then locations with no hours entered yet — 
   so a visitor never has to hunt through closed locations to find one that’s actually
   open.
 * Each location shows its current status in plain language — “Open now,” “Open 
   until 5:00 pm,” “Opens at 9:00 am,” “Opens later today,” “Closed today,” “Open
   24 hours,” or “Today’s hours unavailable” when hours simply haven’t been entered
   yet.
 * An individual page for every location — name, status, description, services, 
   address, phone, website, weekly hours, and any upcoming schedule exceptions —
   instead of the generic blog-post layout (author byline, post navigation, comments)
   WordPress would otherwise use. This replacement page works the same way on both
   classic and block themes, and your theme can override it (see the FAQ).
 * “Near Me,” an optional, visitor-initiated distance sort. Nothing happens until
   a visitor clicks “Use my location” — no background or automatic location request
   is ever made. Near Me works whether or not the map is turned on.
 * An optional map view, described fully in “Map privacy” below.

#### Add it to a page

Two ways to publish the directory, and both support the same options:

 * The `[crd_locator_finder]` shortcode.
 * A “Resource Directory Finder” block in the block editor’s inserter, with the 
   same settings available as a visual panel instead of shortcode attributes.

By default, either one shows every published location with no restrictions. Two 
optional settings let you scope a single instance of the directory:

 * **Limit to one service** — shortcode: `[crd_locator_finder service="legal-aid"]`(
   using the service’s slug); block: the “Limit to one service” dropdown in the 
   block’s settings panel. Once set, that instance only ever shows locations offering
   that service — visitors cannot switch it to another service or back to “All services,”
   and a search or “Open Now” filter a visitor applies still only searches within
   that one service. This is meant for a page dedicated to one kind of help (for
   example, a “Find Legal Aid” page), not a general-purpose filter a visitor can
   change.
 * **Maximum locations to show** — shortcode: `[crd_locator_finder count="5"]`; 
   block: the “Maximum locations to show” setting. Shows only the top N locations(
   by the same open-first ordering described above). Leave it at 0, or omit it, 
   to show every matching location with no limit.

Both settings can be combined, and you can place as many separately-configured instances
of the shortcode or block on your site as you like — each one works independently.

#### Map privacy

The map is a completely optional feature, off by default. Turning it on is a deliberate,
informed choice:

 * Map mode does nothing until an administrator visits the map settings screen, 
   chooses a tile provider (a ready-made OpenStreetMap option, or your own self-
   hosted/other compatible server), and explicitly checks an acknowledgment box 
   after reading the disclosure shown on that same screen. That acknowledgment is
   required again any time the provider, URL, or attribution text changes.
 * The map-drawing library (Leaflet, an open-source project) is bundled with this
   plugin. It is never loaded from an external CDN.
 * The ready-made OpenStreetMap option requests tiles from [OpenStreetMap’s tile service](https://tile.openstreetmap.org/),
   subject to the [OpenStreetMap tile usage policy](https://operations.osmfoundation.org/policies/tiles/)
   and [OpenStreetMap Foundation privacy policy](https://osmfoundation.org/wiki/Privacy_Policy).
   If you configure a different provider, review that provider’s terms and privacy
   policy before enabling it.
 * Once enabled, a visitor’s own browser requests map tile images directly from 
   whichever provider you chose. Tile requests necessarily reveal the approximate
   map area being viewed, and the provider also receives the ordinary information
   any web request carries (such as IP address and browser information), subject
   to that provider’s own policies. Resource names, descriptions, addresses, phone
   numbers, and every other database record from your directory are never included
   in a tile request.
 * Near Me is entirely separate from the map and does not require it. A visitor’s
   location, when they choose to share it, is read directly from their browser and
   used only in that browser to sort the list by distance for that page view. This
   plugin does not store it, and does not send it anywhere — not to this plugin’s
   own site, and not to the map tile provider.

#### What this version does not include

 * Automatic geocoding or address verification. Coordinates are entered by hand (
   see above).
 * Importing locations from a spreadsheet or an external service’s API.
 * Any integration with a third-party provider database.
 * Built-in analytics or reporting.
 * A ZIP-radius search backed by a postal-code distance dataset (search and Near
   Me both work today; a dedicated ZIP-radius dataset is not included).
 * Any automatic, ongoing synchronization with an external data source.

None of the above requires an account, subscription, or API key to use this plugin’s
current features — they are simply not part of this version.

## Screenshots

[⌊The public resource directory: search and service filters, an integrated map alongside
the result list, and locations ordered by what's open right now.⌉⌊The public resource
directory: search and service filters, an integrated map alongside the result list,
and locations ordered by what's open right now.⌉[

The public resource directory: search and service filters, an integrated map alongside
the result list, and locations ordered by what’s open right now.

[⌊Filtering to Housing Support, then sorting by distance with the visitor-initiated"
Near Me" feature -- no location data is stored or sent anywhere.⌉⌊Filtering to Housing
Support, then sorting by distance with the visitor-initiated "Near Me" feature --
no location data is stored or sent anywhere.⌉[

Filtering to Housing Support, then sorting by distance with the visitor-initiated“
Near Me” feature — no location data is stored or sent anywhere.

[⌊An individual location's own page: current status, contact details, services offered,
and its full weekly hours, styled by the active theme.⌉⌊An individual location's
own page: current status, contact details, services offered, and its full weekly
hours, styled by the active theme.⌉[

An individual location’s own page: current status, contact details, services offered,
and its full weekly hours, styled by the active theme.

[⌊Adding a location in wp-admin: address and contact fields, the Services Offered
taxonomy, and the Publishing Readiness checklist (guidance only -- it never blocks
publishing).⌉⌊Adding a location in wp-admin: address and contact fields, the Services
Offered taxonomy, and the Publishing Readiness checklist (guidance only -- it never
blocks publishing).⌉[

Adding a location in wp-admin: address and contact fields, the Services Offered 
taxonomy, and the Publishing Readiness checklist (guidance only — it never blocks
publishing).

[⌊The weekly hours grid and Schedule Exceptions, for holiday closures or one-off
hours changes on a specific date.⌉⌊The weekly hours grid and Schedule Exceptions,
for holiday closures or one-off hours changes on a specific date.⌉[

The weekly hours grid and Schedule Exceptions, for holiday closures or one-off hours
changes on a specific date.

[⌊The "Resource Directory Finder" block in the editor, with its "Limit to one service"
and "Maximum locations to show" settings.⌉⌊The "Resource Directory Finder" block
in the editor, with its "Limit to one service" and "Maximum locations to show" settings
.⌉[

The “Resource Directory Finder” block in the editor, with its “Limit to one service”
and “Maximum locations to show” settings.

[⌊The map's privacy settings: an explicit disclosure, a choice of tile provider,
and a re-required acknowledgment before the map can go live.⌉⌊The map's privacy 
settings: an explicit disclosure, a choice of tile provider, and a re-required acknowledgment
before the map can go live.⌉[

The map’s privacy settings: an explicit disclosure, a choice of tile provider, and
a re-required acknowledgment before the map can go live.

## Blocks

This plugin provides 1 block.

 *   Resource Directory Finder Displays the searchable, filterable community resource
   directory — the same experience as the [crd_locator_finder] shortcode.

## Installation

 1. Upload the plugin files to `/wp-content/plugins/ruhler-community-resource-directory`,
    or install it through the WordPress “Add New Plugin” screen directly.
 2. Activate the plugin through the “Plugins” screen in WordPress. Activation only 
    registers the location and service-taxonomy types this plugin needs — it never 
    creates a page, never adds sample content, and never makes an outbound request.
 3. Go to “Resource Locations” in the wp-admin menu and add your first location: name,
    address, phone, website, weekly hours, and any services it offers. Publish it the
    same way you’d publish a WordPress post.
 4. Add the `[crd_locator_finder]` shortcode, or the “Resource Directory Finder” block,
    to any page or post to display your public directory.
 5. Optional: visit “Services Offered” to add more service categories, so visitors 
    can filter by them.
 6. Optional: if you’d like a map alongside your list, go to the map settings screen,
    read the disclosure, choose a tile provider, and check the acknowledgment box.

That’s it — no API key, account, or additional setup is required for a working directory.

## FAQ

### Does this plugin require an API key or external account?

No. Every feature described above works on a stock WordPress installation with no
external account, API key, or paid service.

### What happens to my data if I deactivate or uninstall the plugin?

Deactivating never deletes any location, service, or setting data — your content
is simply hidden until you reactivate. Uninstalling (removing the plugin from the
Plugins screen) also preserves all of your location and service data; this version
does not offer a way to make uninstall delete anything.

### Can my theme control how an individual location page looks?

Yes. The plugin ships its own default page for each location so it never falls back
to your theme’s generic blog-post layout. To override it:

 * On a classic (PHP-template) theme, add `community-resource-directory/single-crd_locator_location.
   php` (checked first) or `single-crd_locator_location.php` (checked second) to
   your active or child theme.
 * On a block theme, add a `templates/single-crd_locator_location.html` file to 
   your active theme.

If your theme doesn’t provide either file, the plugin’s own built-in page is used.

### Do I have to turn on the map to use this plugin?

No. Search, service filtering, Open Now, the individual location pages, and Near
Me all work fully with the map turned off, which is the default. See “Map privacy”
above for exactly what turning it on does.

### Can I limit the directory on one page to a single service?

Yes — see “Add it to a page” above for the shortcode attribute and the equivalent
block setting. Once set, that instance is locked to the chosen service; visitors
cannot change it.

### Does this plugin work with the block editor and with classic (PHP-based) themes?

Yes to both. The shortcode and the “Resource Directory Finder” block work identically.
Individual location pages have a dedicated override path for each kind of theme (
see above), so your active theme’s own header, footer, and styling are always used.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Ruhler Community Resource Directory” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ ruhler ](https://profiles.wordpress.org/ruhler/)

[Translate “Ruhler Community Resource Directory” into your language.](https://translate.wordpress.org/projects/wp-plugins/ruhler-community-resource-directory)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/ruhler-community-resource-directory/),
check out the [SVN repository](https://plugins.svn.wordpress.org/ruhler-community-resource-directory/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/ruhler-community-resource-directory/)
by [RSS](https://plugins.trac.wordpress.org/log/ruhler-community-resource-directory/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.3.0

First public release. Earlier 0.1.0/0.2.0 version numbers were used only during 
internal development and were never published.

 * Native wp-admin location management with WordPress’s own publish/draft/trash 
   workflow.
 * A “Services Offered” taxonomy for organizing and filtering locations.
 * Address, contact, weekly-hours, and dated-schedule-exception fields, including
   overnight and 24-hour schedules.
 * An availability-first directory order and plain-language “Open now / Open until/
   Opens at / Opens later today / Closed today / Open 24 hours” status.
 * Accessible search, service filtering, and an Open Now toggle — all functional
   with JavaScript disabled.
 * Visitor-initiated Near Me distance sorting, independent of map mode.
 * An optional, consent-gated map with a configurable tile provider (a ready-made
   OpenStreetMap preset, or a self-hosted/other compatible server) and a bundled,
   locally-hosted map library.
 * The `[crd_locator_finder]` shortcode and a “Resource Directory Finder” block,
   both supporting an optional fixed-service scope and a maximum-results limit.
 * A dedicated, theme-overridable individual location page for both classic and 
   block themes.
 * A one-time, dismissible first-run reminder pointing to “Add your first location.”
 * Safe activation and deactivation, and a preserve-your-data-by-default uninstall.

## Meta

 *  Version **0.3.0**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.7 or higher **
 *  Tested up to **7.1.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [community](https://wordpress.org/plugins/tags/community/)[directory](https://wordpress.org/plugins/tags/directory/)
   [locator](https://wordpress.org/plugins/tags/locator/)[map](https://wordpress.org/plugins/tags/map/)
   [nonprofit](https://wordpress.org/plugins/tags/nonprofit/)
 *  [Advanced View](https://wordpress.org/plugins/ruhler-community-resource-directory/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/ruhler-community-resource-directory/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/ruhler-community-resource-directory/reviews/)

## Contributors

 *   [ ruhler ](https://profiles.wordpress.org/ruhler/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/ruhler-community-resource-directory/)