WP Manifestindependent plugin directory
manifest / content / acf-location-shortcodes

ACF Service Management Suite

A comprehensive WordPress plugin for service-based businesses managing multiple locations, team members, and service areas.

by Ryan T. M. Reiffenberger · github.com/reclaimergold/acf-location-shortcodes · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/reclaimergold/acf-location-shortcodes/archive/refs/heads/main.zip

A comprehensive WordPress plugin for service-based businesses managing multiple locations, team members, and service areas.

Built on Advanced Custom Fields (ACF), this plugin provides powerful shortcodes, Elementor integration, and a complete post type structure for location and team management.


Table of Contents


Why Use This Plugin?

  • 🏢 Complete Service Business Solution - Manage locations, service areas, and team members from one plugin
  • 📍 Physical & Service Area Support - Distinguish between physical offices and service-only areas
  • 🚀 Easy to Use - Simple shortcodes that work anywhere in WordPress
  • 🎯 Flexible - Display communities, locations, team members, or any ACF field data
  • 🎨 Elementor Ready - Built-in query filters for Loop Grids and Carousels
  • 🔍 Developer Friendly - Debug mode, comprehensive logging, and extensible architecture
  • ⚡ Performance Optimized - Intelligent caching and minimal resource usage
  • 🛡️ Secure - Follows WordPress coding standards with proper sanitization and escaping
  • 📦 Complete Post Type Structure - Includes ACF field configurations for immediate deployment
  • 🌐 Site Location Settings - (New in 2.3.0) Configure site-specific location info for multisite networks
  • 🔄 Enhanced Media Sync - (New in 2.3.0) Improved attachment synchronization with smart duplicate detection

Features

🌐 Site Location Settings (New in 2.3.0)

Associate each site with a Location post to access all location data globally:

  • Per-Site Configuration: Settings > Site Location
  • How It Works: Select a Location post in Settings > Site Location. All ACF fields from that location are automatically available sitewide.
  • Required ACF Fields: Add these fields to your Location post type:
    • location_city (Text) - City name
    • location_state (Text) - Full state name
    • location_state_abbrev (Text) - 2-letter state abbreviation
    • Plus any existing fields: metro_area_name, county_name, full_service_area_name, etc.
  • Shortcodes: Access location data anywhere: [location_info field="county_name"], [site_service_areas]
  • Elementor Integration: Dynamic tags pull data from the associated location
  • Perfect for: Multi-location businesses where each site represents a different location

Setup Steps:

  1. Add the required ACF fields (location_city, location_state, location_state_abbrev) to your Location post type
  2. Edit your Location posts and populate all fields (city, state, county, metro area, etc.)
  3. Go to Settings > Site Location on each site
  4. Select the Location post that represents that site
  5. Use shortcodes to display location data anywhere on the site

📖 See Site Location Settings Documentation

📦 Complete Post Type Structure

Includes pre-configured ACF field groups for:

  • Service Locations (location post type)

    • Physical locations with addresses
    • Service areas without physical offices
    • Parent/child location relationships
    • Community and service area management
  • Team Members (team-member post type)

    • Team member profiles with photos
    • Location assignments
    • Profile management

See acf-export-2025-10-28.json for the complete field structure ready to import.

�🏠 Community List Shortcode

Display surrounding communities as a responsive horizontal list with customizable emoji bullets.

[location_communities]
[location_communities location_id="123" limit="5"]
[location_communities class="my-style" show_emoji="no"]

Perfect for: Showing service areas, neighborhoods, or nearby communities

📍 Location List Shortcode

Display all service locations with flexible filtering and ordering options.

[location_list]
[location_list type="physical" orderby="title"]
[location_list location_specific="true"]

Two display modes:

  • All Locations Mode: Show all locations with type filtering (physical/service/all)
  • Location-Specific Mode: Context-aware display showing only parent and related children

Perfect for: Location directories, office listings, service area pages

📋 Location Info Shortcode

Display any ACF field from a location post with fallback support.

[location_info field="service_area_shorthand"]
[location_info field="phone_number" default="Contact us"]
[location_info field="metro_area_name" location_id="123"]

Perfect for: Dynamic content, location details, custom field display

🏢 Location Address Shortcode

Get physical addresses for locations or their servicing parent location.

[location_address]
[location_address location_id="456"]

Perfect for: Maps integration, address display, automatic parent location lookup

🎨 Elementor Query Filters

Advanced filtering for Elementor Loop Grids, Loop Carousels, and Posts widgets.

Features:

  • Multi-location selection with AND/OR logic
  • Custom relationship field support
  • Dynamic location detection
  • Visual controls in Elementor editor
  • Filter team members, posts, or any CPT by assigned location

Perfect for: Team member grids, service listings, location-based blog posts

Requirements

Minimum Requirements

  • WordPress: 5.8 or higher
  • PHP: 7.4 or higher
  • ACF (Advanced Custom Fields): 5.0+ (Free or Pro)

Optional Requirements

  • Elementor: 3.0+ (for query filtering features)

Included

  • Complete ACF Field Export - Pre-configured field groups in acf-export-2025-10-28.json
  • Location Post Type - Custom post type for service locations
  • Team Member Post Type - Custom post type for team management
  • Team Member Type Taxonomy - Taxonomy for categorizing team members

Recommended Environment

  • WordPress 6.4+
  • PHP 8.1+
  • ACF Pro (for enhanced field types)
  • Elementor Pro (for Loop Grid/Carousel widgets)

Installation

📦 Method 1: WordPress Admin (Recommended)


  1. Download the latest release as a ZIP file
  2. Go to Plugins > Add New > Upload Plugin
  3. Choose the ZIP file and click Install Now
  4. Click Activate Plugin
📤 Method 2: Manual FTP Upload


  1. Download and extract the plugin ZIP file
  2. Upload the acf-service-management-suite folder to /wp-content/plugins/
  3. Go to Plugins in WordPress admin
  4. Find and activate "ACF Service Management Suite"
💻 Method 3: Git Clone (For Developers)


cd wp-content/plugins/
git clone https://github.com/ReclaimerGold/acf-service-management-suite.git

Then activate via WordPress admin or WP-CLI:

wp plugin activate acf-service-management-suite

Admin Interface

The plugin includes a comprehensive admin interface accessible from ACF SMS in your WordPress admin menu.

Dashboard Tab

ACF Status Check

  • Displays whether Advanced Custom Fields is installed and active
  • Provides one-click link to install ACF if missing
  • Shows one-click Activate ACF button if installed but inactive
  • Shows template sync status

Template Management

  • Auto-Install Template button for one-click installation when ACF is active
  • Automatically detects if template is installed or outdated
  • Manual download option (acf-template.json) with version stamping
  • Direct link to ACF import tools
  • Visual indicators for template status (installed, outdated, missing)

Multisite Sync (Multisite installations only)

  • Shows sync status across network sites
  • Displays number of sites configured for sync
  • Link to network settings for administrators
  • Automatically syncs locations and team members when enabled

Quick Links

  • Manage Locations
  • Manage Team Members
  • ACF Field Groups (when ACF is active)
  • GitHub Repository

README Tab

Displays this documentation directly in your WordPress admin for easy reference.

Admin Notices

The plugin shows dismissible notices at the top of WordPress admin when:

ACF Not Installed

  • Appears on all admin pages (except plugin settings page)
  • Provides one-click link to install ACF from WordPress.org plugin directory
  • Link includes pre-search query to show ACF first
  • Can be dismissed per user

Template Mismatch Detected

  • Appears when installed ACF field groups don't match the plugin template
  • Provides link to download latest template
  • Helps ensure all features work correctly
  • Can be dismissed per user

How to Access:

  1. Go to WordPress admin
  2. Click ACF SMS in the left sidebar
  3. Use tabs to navigate between Dashboard and README

Quick Start Guide

🔌 Step 1: Install Dependencies

The plugin requires Advanced Custom Fields to function. The admin interface will alert you if ACF is not installed.

Option A: Install via Admin Interface (Easiest)

  1. Go to ACF SMS in your WordPress admin menu
  2. If ACF is not installed, you'll see a warning with an "Install ACF Now" button
  3. Click the button to go directly to the ACF plugin installation page
  4. Click Install Now, then Activate

Option B: Manual Installation

  1. Go to Plugins > Add New
  2. Search for "Advanced Custom Fields"
  3. Install and activate ACF Free (or ACF Pro if you have it)

📥 Step 2: Import ACF Field Groups

This plugin includes pre-configured field groups ready to import.

Option A: Auto-Install via Admin Interface (Easiest!)

  1. Go to ACF SMS > Dashboard in your WordPress admin
  2. If templates are not installed, you'll see an Auto-Install Template button
  3. Click the button and wait a few seconds
  4. Templates will be automatically imported into ACF
  5. Page will reload showing updated status

Option B: Manual Download and Import

  1. Go to ACF SMS > Dashboard in your WordPress admin
  2. Click the Download Template (Manual) button
  3. The file acf-template-2.2.0.json will download
  4. Go to ACF → Tools → Import Field Groups
  5. Choose the downloaded JSON file
  6. Click Import JSON

Option C: Import from Plugin Files

  1. Go to ACF → Tools
  2. Click on Import Field Groups tab
  3. Choose File: Select acf-import-templates/acf-template.json from the plugin directory
  4. Click Import JSON

This will create:

  • Location Details field group (11 fields for service locations)
  • Team Member Details field group (4 fields for team members)
  • Service Locations post type
  • Team Members post type
  • Team Member Types taxonomy

🎉 Auto-Installation on ACF Activation

When you activate the ACF plugin on any site, the plugin will automatically:

  • Detect that ACF was just activated
  • Check if field groups are already installed
  • Auto-install the template if not present or outdated
  • Show a success notice when complete

This means you can install ACF and the templates will be configured automatically!

📍 Step 3: Create Your First Location

  1. Go to Service Locations > Add New
  2. Title: Enter city name (e.g., "Sioux Falls")
  3. Service Area Shorthand: Sioux Falls, SD
  4. Surrounding Community List: Brooks Harbor, Eagle Run, Shadow Wood, Charleswood
  5. Physical Address: (Enter if physical location, leave empty if service area only)
  6. Add other fields as needed
  7. Publish

🚀 Step 4: Use Shortcodes

Add to any page or post:

[location_communities location_id="123"]

Or on the location post itself:

[location_communities]
[location_info field="service_area_shorthand"]
[location_list location_specific="true"]

Expected Output:

🏠 Brooks Harbor 🏠 Eagle Run 🏠 Shadow Wood 🏠 Charleswood

🐛 Step 5: Enable Debug Mode (Optional)

For troubleshooting, add to your wp-config.php:

define( 'ACF_LS_DEBUG', true );

This enables verbose error messages with helpful debugging information (only visible to users with edit permissions).


Shortcode Reference

💡 Pro Tip: For site-wide location data, use [location_info field="FIELD_NAME"] to access ANY ACF field from the Location post associated in Settings > Site Location. This works for county_name, metro_area_name, full_service_area_name, and any custom fields you add!

[location_communities]

Display surrounding communities as a horizontal list.

Attribute Type Default Description
location_id int Current post ID Location post to display
limit int 0 (all) Maximum communities to show
class string '' Additional CSS class
show_emoji string 'yes' Show house emoji ('yes'/'no')

Example:

[location_communities location_id="123" limit="5" show_emoji="yes"]

[location_info]

Display any ACF field from a location post.

Attribute Type Default Description
location_id int Current post ID Location post to display
field string (required) ACF field name
default string '' Fallback if field is empty

Example:

[location_info field="phone_number" default="Contact us"]

[location_list]

Display a directory of locations with filtering.

Attribute Type Default Description
location_specific bool false Enable context-aware mode (parent + children only)
location_id int Current post ID or Site Location Location post to use
type string 'all' Filter: 'all', 'physical', 'service'
orderby string 'title' Sort by: 'title', 'date', 'ID'
order string 'ASC' Sort order: 'ASC' or 'DESC'
limit int 0 (all) Maximum locations to show
class string '' Additional CSS class
show_emoji string 'yes' Show map pin emoji

Smart Behavior:

  • On Location pages: Uses the current Location post
  • On non-Location pages (e.g., homepage): Automatically uses the Location from Settings > Site Location and enables location-specific mode
  • Override: Explicitly set location_id to use a specific location anywhere

Example:

[location_list type="physical" orderby="title" order="ASC"]
[location_list location_id="123"]

[location_address]

Get the physical address for a location (or its parent location).

Attribute Type Default Description
location_id int Current post ID Location post to display

Returns format: Site Title, Address

Example:

[location_address location_id="456"]

[site_location_title]

Display the post title from the associated Location post (typically the city name).

No attributes

Requires:

  • A Location selected in Settings > Site Location

Example:

[site_location_title]

Returns: Sioux Falls (the title of the Location post)


[site_location_city]

Display the city from the associated Location post's ACF fields.

No attributes

Requires:

  • ACF field location_city on your Location post type
  • A Location selected in Settings > Site Location

Example:

[site_location_city]

Returns: Sioux Falls


[site_location_state]

Display the state from the associated Location post's ACF fields.

No attributes

Requires:

  • ACF field location_state on your Location post type
  • A Location selected in Settings > Site Location

Example:

[site_location_state]

Returns: South Dakota


[site_location_state_abbrev]

Display the state abbreviation from the associated Location post's ACF fields.

No attributes

Requires:

  • ACF field location_state_abbrev on your Location post type
  • A Location selected in Settings > Site Location

Example:

[site_location_state_abbrev]

Returns: SD


[site_location_city_state]

Display the city and state from the associated Location post's ACF fields.

Attribute Type Default Description
format string 'abbrev' Format: 'abbrev' or 'full'

Requires:

  • ACF fields location_city, location_state, and location_state_abbrev on your Location post type
  • A Location selected in Settings > Site Location

Examples:

[site_location_city_state]
[site_location_city_state format="full"]

Returns:

  • abbrev: Sioux Falls, SD
  • full: Sioux Falls, South Dakota

[site_service_areas]

Display service areas for the associated location (automatically retrieves child Location posts).

Attribute Type Default Description
format string 'comma_and' Format: 'comma', 'comma_and', 'comma_and_surrounding', or 'list'

Requires:

  • A Location selected in Settings > Site Location
  • Child Location posts (service areas) associated with the parent location

Examples:

[site_service_areas]
[site_service_areas format="comma"]
[site_service_areas format="comma_and_surrounding"]
[site_service_areas format="list"]

Returns (examples):

  • comma_and: Sioux Falls, Brandon, and Harrisburg
  • comma: Sioux Falls, Brandon, Harrisburg
  • comma_and_surrounding: Sioux Falls, Brandon, and surrounding locations
  • list:
    <ul class="acf-sms-service-areas-list">
      <li>Sioux Falls</li>
      <li>Brandon</li>
      <li>Harrisburg</li>
    </ul>

Configure via: Settings > Site Location


[team_member_locations]

Display a list of locations assigned to the team member. Should be used on a team-member post page.

Attribute Type Default Description
team_member_id int Current post ID Team member post to display
format string 'comma' Format: 'comma', 'comma_and', or 'list'
class string '' Additional CSS class

Formats:

  • comma: Comma-separated list (e.g., "Sioux Falls, Brandon, Harrisburg")
  • comma_and: Comma-separated with "and" before last item (e.g., "Sioux Falls, Brandon, and Harrisburg")
  • list: HTML unordered list

Requires:

  • Must be used on a team-member post page (or provide team_member_id attribute)
  • Team member must have locations assigned via the location ACF field

Examples:

[team_member_locations]
[team_member_locations format="comma_and"]
[team_member_locations format="list" class="my-locations"]
[team_member_locations team_member_id="123" format="comma"]

Returns (examples):

  • comma: Sioux Falls, Brandon, Harrisburg
  • comma_and: Sioux Falls, Brandon, and Harrisburg
  • list:
    <ul class="acf-ls-team-member-locations">
      <li>Sioux Falls</li>
      <li>Brandon</li>
      <li>Harrisburg</li>
    </ul>

[team_member_specialties]

Display a list of specialties (services) assigned to the team member. Should be used on a team-member post page.

Attribute Type Default Description
team_member_id int Current post ID Team member post to display
format string 'comma' Format: 'comma', 'comma_and', or 'list'
class string '' Additional CSS class

Formats:

  • comma: Comma-separated list (e.g., "Dermatology, Cosmetic Surgery, Botox")
  • comma_and: Comma-separated with "and" before last item (e.g., "Dermatology, Cosmetic Surgery, and Botox")
  • list: HTML unordered list

Requires:

  • Must be used on a team-member post page (or provide team_member_id attribute)
  • Team member must have specialties assigned via the specialties ACF field

Examples:

[team_member_specialties]
[team_member_specialties format="comma_and"]
[team_member_specialties format="list" class="my-specialties"]
[team_member_specialties team_member_id="123" format="comma"]

Returns (examples):

  • comma: Dermatology, Cosmetic Surgery, Botox
  • comma_and: Dermatology, Cosmetic Surgery, and Botox
  • list:
    <ul class="acf-ls-team-member-specialties">
      <li>Dermatology</li>
      <li>Cosmetic Surgery</li>
      <li>Botox</li>
    </ul>

📖 For more documentation: See DEVELOP.md for extension guide and CHANGELOG.md for version history


Usage Examples

Example 1: Location Landing Page

<h1>[location_info field="full_service_area_name"]</h1>
<p>Serving [location_info field="county_name"] and the [location_info field="metro_area_name"]</p>

<h2>Communities We Serve</h2>
[location_communities limit="10"]

<h2>Our Service Locations</h2>
[location_list location_specific="true"]

<h3>Contact Us</h3>
<p>Phone: [location_info field="phone_number"]</p>
<p>Located near: [location_info field="located_near"]</p>

Example 2: Location Directory Page

<h2>Our Physical Office Locations</h2>
[location_list type="physical" orderby="title"]

<h2>Service Areas</h2>
[location_list type="service" orderby="title"]

Example 3: Team Members by Location (Elementor)

  1. Add Loop Grid widget
  2. Query > Post Type: team-member
  3. Query > Filter by Service Location: Yes
  4. Query > Select Locations: Choose location(s)
  5. Query > Relationship Field Name: assigned_location

Example 4: Team Member Profile Page

On a team-member post page, display assigned locations and specialties:

<h2>Service Locations</h2>
<p>I serve the following locations:</p>
[team_member_locations format="comma_and"]

<h2>Specialties</h2>
<p>My areas of expertise include:</p>
[team_member_specialties format="comma_and"]

Or as lists:

<h2>Service Locations</h2>
[team_member_locations format="list"]

<h2>Specialties</h2>
[team_member_specialties format="list"]

Example 5: Google Maps Integration

In Elementor Google Map widget Address field:

[location_address]

This automatically shows the correct physical address, even for service areas (uses parent location).

Example 6: Custom Styled Communities

[location_communities class="badge-style" show_emoji="no"]

Add CSS:

.badge-style .acf-ls-communities__item {
    background: #0073aa;
    color: white;
    padding: 8px 16px;
    border-radius: 20px;
}

Project Structure

acf-service-management-suite/
├── acf-service-management-suite.php     # Main plugin (bootstrap)
├── includes/                            # Core plugin classes
│   ├── class-acf-helpers.php            # ACF data retrieval
│   ├── class-shortcodes.php             # Shortcode handlers
│   └── class-elementor-integration.php  # Elementor integration
├── assets/                              # Frontend assets
│   ├── css/shortcodes.css               # Shortcode styles
│   └── js/elementor-controls.js         # Elementor editor JS
├── acf-export-2025-10-28.json           # ACF field structure (ready to import)
├── DEVELOP.md                           # Development guide
├── CHANGELOG.md                         # Version history
├── copilot-instructions.md              # AI development guidelines
└── README.md                            # This file

For detailed architecture, see DEVELOP.md

ACF Field Schema

This plugin includes a complete ACF export file (acf-export-2025-10-28.json) ready to import. It creates:

⚠️ Important for Site Location Features: To use site-wide location shortcodes ([site_location_city], etc.), you must ADD these additional fields to your Location post type:

  • location_city (Text) - City name
  • location_state (Text) - Full state name
  • location_state_abbrev (Text) - 2-letter state abbreviation

These are not included in the default export but are required for the site location association feature.

Post Types

Service Locations (location)

  • Purpose: Physical locations and service areas
  • Permalink: /locations/{post-name}
  • Features: Title, editor, author, revisions, thumbnail
  • Icon: 📍 Dashicons Store

Team Members (team-member)

  • Purpose: Staff and team member profiles
  • Permalink: /people/{post-name}
  • Features: Title, revisions
  • Icon: 👥 Dashicons Admin Users

Taxonomies

Team Member Types (team-member-type)

  • Purpose: Categorize team members (e.g., Doctor, Nurse, Admin)
  • Hierarchical: Yes
  • Assigned To: team-member post type

Location Field Group (11 Fields)

Field Name Field Type Required Description Example
service_area_shorthand Text No Short service area name Sioux Falls, SD
address Text No Physical address (determines location type) 123 Main St, Sioux Falls, SD 57104
phone_number Text No Contact phone (shown if address exists) (605) 555-1234
location_site_url URL No Dedicated location website https://siouxfalls.example.com
servicing_physical_location Post Object No Parent physical location (shown if no address) (relationship to location post)
full_service_area_name Text No Full regional name Sioux Falls & The Sioux Empire
located_near Text No Nearby landmark Near Falls Park
metro_area_name Text No Metropolitan area Sioux Falls Metro
county_name Text No County name Minnehaha County
surrounding_community_list Text No Comma-separated communities Brooks Harbor, Eagle Run, Shadow Wood
team_members_assigned Relationship No Assigned team members (relationship to team-member posts)

Team Member Field Group (4 Fields)

Field Name Field Type Required Description Example
profile_picture Image No Team member photo (image file)
title Text No Job title/position Lead Physician
location Select (Multiple) No Assigned locations Sioux Falls, SD
full_profile_url URL No Link to full bio page https://example.com/people/john-doe

Physical Location Logic:

  • Location WITH address field value = Physical Location
  • Location WITHOUT address field = Service Area (must set servicing_physical_location)

Import Instructions:

  1. Go to ACF > Tools
  2. Select Import Field Groups tab
  3. Choose acf-export-2025-10-28.json from plugin directory
  4. Click Import JSON

Multisite Features

Automatic Post Synchronization

For WordPress multisite networks, the plugin can automatically synchronize locations and team members across all sites.

How It Works:

  • When you create, update, or delete a location or team member on one site, it syncs to other sites
  • Each synced post maintains a reference to its source site and post ID
  • ACF field data, taxonomies, and post status are all synchronized
  • Supports trash/untrash operations

Enabling Sync:

  1. Go to Network Admin > ACF SMS Network Settings (coming soon)
  2. Enable "Multisite Synchronization"
  3. Select which sites should receive synced content
  4. Save settings

Current Limitations:

  • Relationship fields (like team member → location assignments) are not remapped across sites yet
  • Featured images are referenced but not copied to media libraries
  • Syncing is currently one-way (from source to targets)

Configuration:

// Enable sync network-wide
update_site_option( 'acf_sms_sync_enabled', true );

// Set specific sites to sync to (or leave empty for all sites)
update_site_option( 'acf_sms_sync_sites', array( 2, 3, 5 ) );

// Disable sync for specific site via filter
add_filter( 'acf_sms_sync_enabled', function( $enabled ) {
    if ( get_current_blog_id() === 4 ) {
        return false; // Don't sync on site 4
    }
    return $enabled;
} );

Viewing Sync Status:

  • Network administrators can see sync status in ACF SMS > Dashboard
  • Shows number of sites configured for synchronization
  • Displays whether sync is enabled or disabled

Troubleshooting

Common Issues

❓ Shortcode shows raw text instead of output

  • Ensure the plugin is activated
  • Verify ACF is installed and active
  • Check that you're using the correct shortcode syntax

❓ "Invalid location ID" error

  • Verify the location post ID is correct
  • Ensure the post type is location
  • Check that the post is published

❓ "No communities found" error

  • Add content to the surrounding_community_list field
  • Ensure it's a comma-separated list
  • Check field name matches exactly

❓ Elementor filtering not working

  • Verify the relationship field name is correct
  • Ensure posts have locations assigned
  • Check that ACF field is a Relationship or Post Object type

❓ Debug Information

Enable debug mode in wp-config.php:

define( 'ACF_LS_DEBUG', true );

This will show detailed error messages with:

  • Post IDs and types
  • Available fields
  • Edit links to fix issues
  • Suggested solutions

See DEVELOP.md for complete troubleshooting guide.

Performance

Caching

  • WordPress object cache with 1-hour expiration
  • Efficient ACF field queries
  • Lazy loading of Elementor integration
  • Minimal CSS/JS footprint

Optimization Tips

  • Use specific location IDs instead of querying all locations
  • Limit the number of communities displayed
  • Cache full pages with a caching plugin
  • Use a persistent object cache (Redis/Memcached)

Security

  • All user input is sanitized
  • All output is properly escaped
  • Capability checks for debug output
  • Follows WordPress coding standards
  • Regular security audits

Browser Support

  • Chrome (last 2 versions)
  • Firefox (last 2 versions)
  • Safari (last 2 versions)
  • Edge (last 2 versions)
  • Mobile browsers (iOS Safari, Chrome Mobile)

Contributing

We welcome contributions! Here's how to get started:

  1. Report Bugs: Open an issue with detailed reproduction steps
  2. Suggest Features: Describe your use case and proposed solution
  3. Submit Pull Requests: Follow the guidelines in DEVELOP.md
  4. Improve Documentation: Help make our docs clearer

Development Setup

See DEVELOP.md for:

  • Local development environment setup
  • Coding standards and guidelines
  • Testing procedures
  • Extension and customization guide

Support

Changelog

See CHANGELOG.md for complete version history.

License

This plugin is licensed under the GNU General Public License v2 or later.

ACF Service Management Suite - Complete service business location & team management
Copyright (C) 2025 Falls Technology Group, LLC

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

For the full license text, see LICENSE or visit: https://www.gnu.org/licenses/gpl-2.0.html

Credits

Developed by: Falls Technology Group, LLC
Author: Ryan T. M. Reiffenberger
GitHub: https://github.com/ReclaimerGold
Version: 2.0.0
Last Updated: October 28, 2025