> For the complete documentation index, see [llms.txt](https://ovatheme.gitbook.io/brw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ovatheme.gitbook.io/brw/brw-menu/manage-locations.md).

# Manage Locations

### Introduction <a href="#step-1-make-locations" id="step-1-make-locations"></a>

The Locations system in BRW has three distinct components that work together to provide flexible location management for rental products.

| Component                 | Path                                                                            | Purpose                                                                                    |
| ------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| **Location** (CPT)        | BRW → Manage Location                                                           | Create named pickup/dropoff locations assigned to rental products                          |
| **Point-to-Point Routes** | BRW → hidden submenu (BRW -> Manage Locations -> Manage Point-to-Point Routes ) | Import CSV price tables for routes between locations (Transportation / Day / Hour / Mixed) |
| **Location Surcharges**   | BRW → hidden submenu (BRW -> Manage Locations -> Manage Location Surcharges)    | Set extra fees per location, or distance-based fees for non-standard customer addresses    |

{% hint style="info" %}
"Point-to-Point Routes" and "Location Surcharges" are registered as hidden submenus (empty menu label). They are accessed via the **Manage** **Location** list's submenu file override, which highlights "Location" in the sidebar when either of these pages is active.
{% endhint %}

### 1: Location List <a href="#step-1-make-locations" id="step-1-make-locations"></a>

The Location list is a standard WordPress Custom Post Type (CPT) admin screen. Each location entry represents one named pickup/dropoff point.

<figure><img src="/files/CUNPHzE7la6YsGhSmUWG" alt=""><figcaption></figcaption></figure>

Locations appear as options in product-level pickup/dropoff dropdowns. Only locations marked as pickup are shown in the pickup field, and only dropoff-marked ones in the dropoff field.

### 2: Add / Edit Location

Each location is a WordPress post with a title, optional featured image, and two meta checkboxes. Navigate to **BRW → Manage Location → Add new location**.

<figure><img src="/files/65ZPnlkEWCVO56KN8zje" alt=""><figcaption></figcaption></figure>

**Location Name (Title) -** <mark style="color:$danger;">Required</mark>

The display name of the location, used in all product dropdowns and order meta. Must be unique and descriptive.

**Important:** The `&` character is automatically stripped from location names on save (replaced with a space, then trimmed). Use "and" instead of "&" in location names.

#### Used for: Pick-up Location

When checked, this location appears in pickup location dropdowns on product booking forms and in admin Booking Calendar filters. Default: `yes`.

#### Used for: Drop-off Location

When checked, this location appears in dropoff location dropdowns on product booking forms and in admin Booking Calendar filters. Default: `yes`.

{% hint style="success" %}
After creating locations, go to each rental product's **Booking Info → Pickup / Dropoff Location** settings and select which locations to offer for that product. Locations are not automatically assigned to all products.
{% endhint %}

### 3: Point-to-Point Routes — Overview <a href="#step-1-make-locations" id="step-1-make-locations"></a>

Point-to-Point (P2P) pricing lets you set a specific price for each location pair (origin → destination). This overrides standard day/hour rate pricing when a matching route is found.

| Rental Type                     | CSV Format                                       | Extra Column                                      | Demo File   |
| ------------------------------- | ------------------------------------------------ | ------------------------------------------------- | ----------- |
| **Transportation**              | Pick-up Location, Drop-off Location, Time, Price | **Time** (minutes/km — depends on product config) | `demo.csv`  |
| **Day / Hour / Mixed / Period** | Pick-up Location, Drop-off Location, Price       | —                                                 | `demo2.csv` |

{% hint style="info" %}
Route pricing is stored as product meta. Each CSV import **appends or updates** routes for the selected product — it does not replace all existing routes unless you first use the **Remove Routes** form.
{% endhint %}

<div><figure><img src="/files/OP2CcKOrwii6QwZgcOBa" alt=""><figcaption></figcaption></figure> <figure><img src="/files/EXkRPCVOLkaCf7gthOXC" alt=""><figcaption></figcaption></figure></div>

#### Transportation Routes

For Transportation rental type products. Prices and estimated times are set per route.

<figure><img src="/files/KK58fQL3GTM8N9uuznZE" alt=""><figcaption></figcaption></figure>

CSV Format (demo.csv):

```
Pick-up Location,Drop-off Location,Time,Price
New york,California,100,10
New york,Texas,120,20
California,Texas,130,30
California,New york,100,10
```

| Column                | Description                             | Notes                                                           |
| --------------------- | --------------------------------------- | --------------------------------------------------------------- |
| **Pick-up Location**  | Origin location name                    | Must exactly match a Location CPT title (case-insensitive)      |
| **Drop-off Location** | Destination location name               | Must exactly match a Location CPT title                         |
| **Time**              | Estimated travel time or distance value | Usage depends on product's price-by-time or price-by-km setting |
| **Price**             | Route price in store currency           | Numeric value, no currency symbol                               |

#### Day / Hour / Mixed / Period Routes

For non-Transportation rental types. Sets a flat price for each location pair, overriding the standard per-day/per-hour rate.

<figure><img src="/files/AEwJQsSbAaMMyweaEOU3" alt=""><figcaption></figcaption></figure>

CSV Format (demo2.csv):

```
Pick-up Location,Drop-off Location,Price
Airport,San Antonio,100
Airport,San Diego,100
San Diego,Houston,150
San Diego,San Antonio,150
```

{% hint style="warning" %}
Location names in the CSV must match exactly (case-insensitive) the titles of existing Location CPT entries. If a location name doesn't match, that row is silently skipped.
{% endhint %}

#### Remove Point-to-Point Routes

Delete all existing route data for a selected product before re-importing a corrected CSV.

<figure><img src="/files/10wZbIl7LCcpCLtD8sWg" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Destructive action:** Clicking Remove immediately deletes all P2P route data stored in the selected product's meta. This action cannot be undone. Always export or backup your CSV before removing routes.
{% endhint %}

### 4: Location Surcharges — Overview

Location surcharges add extra fees on top of the rental price when a customer selects specific pickup or dropoff locations. There are three surcharge mechanisms:

<div><figure><img src="/files/82ysBAX8q5nIwfonr0gA" alt=""><figcaption></figcaption></figure> <figure><img src="/files/fX02QNEPQMUqIHyylvGn" alt=""><figcaption></figcaption></figure></div>

| Type                   | How it works                                                                 | Rental types                                                 |
| ---------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------ |
| **Pick-up surcharge**  | Fixed fee added when customer picks a specific pickup location               | Day, Hour, Mixed, Period (surcharge\_type = local or global) |
| **Drop-off surcharge** | Fixed fee added when customer picks a specific dropoff location              | Same as above                                                |
| **Different location** | Distance-based fee (price/km) for a custom address outside defined locations | Day (when customer types own address)                        |

#### Charge only once if pick-up = drop-off

A checkbox at the top of the Surcharges page. When enabled, if a customer selects the same location for both pickup and dropoff, only one surcharge fee is applied (not doubled).

#### Pick-up Location Surcharges

Set an extra fee for each pickup location. Customers see the surcharge added to their booking total when they select that location.

<figure><img src="/files/rk3JEA6qv4GtscswMRPQ" alt=""><figcaption></figcaption></figure>

**CSV Import**

* Upload a CSV with two columns: **Name** (must match a Location CPT title) and **Price** (numeric surcharge amount). Imports and overwrites existing surcharge data from the file. Download `demo3.csv` for the exact format.
* CSV Format (demo3.csv):

  ```
  Name,Price
  Airport,100
  San Diego,150
  San Antonio,120
  ```

**Manual Add**

* Select a pickup location from the dropdown and enter a surcharge price, then click **Add**. Saves immediately via AJAX without page reload. Only locations that are marked as "Used for Pick-up" appear in this dropdown.

**Edit / Delete**

* Each row in the list has inline Edit (✏) and Delete (🗑) actions. Edit reveals an input to update the price; Update button saves via AJAX. Delete removes the entry immediately with AJAX confirmation.

#### Drop-off Location Surcharges

Identical to pickup surcharges but applies to the drop-off location selection. Uses the same CSV format (`demo3.csv`) and the same manual add/edit/delete UI.

<figure><img src="/files/bRXJTvfdV38bNy82u3k4" alt=""><figcaption></figcaption></figure>

**CSV Import (Drop-off)**

* Same format as pickup: `Name, Price`. Location names must match Drop-off–enabled Location CPT titles.

**Manual Add (Drop-off)**

* Only locations marked as "Used for Drop-off" appear in the dropdown

{% hint style="info" %}
Both pickup and dropoff surcharges appear on the product's booking form as a separate line item in the price breakdown. Use filter `ovabrw_show_location_surcharge` to toggle their visibility in the frontend total.
{% endhint %}

#### Different Location Surcharge

When a customer types a custom address (not one of your predefined locations), BRW calculates the distance from that address to your rental office and applies a per-km fee.

<figure><img src="/files/Nwh5FbZ9OycsAeIJpRSs" alt=""><figcaption></figcaption></figure>

**Price (per km) -** <mark style="color:$success;">Optional</mark>**:**&#x20;

* The surcharge rate applied per kilometer of distance between the customer's custom pickup address and your rental office. Leave blank (0) to disable distance-based surcharges.

**Delivery Service Radius -** <mark style="color:$success;">Optional</mark>**:** &#x20;

* Maximum delivery distance in kilometers. If the customer's address is beyond this radius, the booking is rejected or the surcharge is applied based on your product configuration. Set to 0 to disable radius limit.

**Rental Office Address -** <mark style="color:$danger;">Required for distance calc</mark>

* The starting point for distance calculation. Enter your office address in the Google Places Autocomplete field — the map pin updates to that location. Latitude and longitude are auto-filled (read-only) from the geocoded result.

  Requires **Google Maps API Key** to be configured (`google_key_map` in plugin settings). Without an API key, the address field is hidden and the map still renders from stored lat/lng defaults.

{% hint style="info" %}
The "different location" feature is most useful for products where customers can type any address (e.g., "pick me up from my hotel"). The system uses Google Maps Distance Matrix to compute the exact driving distance from the typed address to your office coordinates, then multiplies by the price/km rate.
{% endhint %}
