WooCommerce Local Pickup Plus


↑ Back to top
WooCommerce Local Pickup Plus extends WooCommerce shipping to let your customers pick up items from different locations. You can control which items are eligible for pickup and determine where customers can pick up these items. Customers can also create appointments to let you know the day and time that they will be picking up their items. Local Pickup Plus also supports geocoding to sort the order of the locations list based on the distance from the customer, making it easier for them to choose the best location!
  • When using Local Pickup Plus, we recommend disabling the core Local Pickup method for any zones you’ve added it to.
  • If you don’t allow pickup for certain items, please ensure you have at least one shipping method available for these items!
As of WooCommerce 8.3, Cart and Checkout blocks are available as the default experience. WooCommerce Local Pickup Plus has not yet been updated to be compatible with those blocks, so we recommend following this guide to revert to Cart/Checkout shortcodes. Additional plugin updates will soon be released to ensure compatibility with the new block checkout. Please check out this page for the latest updates or reach out to our support team with any questions!


↑ Back to top
  1. Ensure your store meets the plugin requirements.
  2. Download the extension from your WooCommerce dashboard.
  3. Go to Plugins > Add New > Upload and select the ZIP file you just downloaded.
  4. Click Install Now and then Activate.
  5. Click Configure and read the next section to learn how to setup the plugin.

Getting Started

↑ Back to top

Plugin Settings

↑ Back to top
You can configure the plugin by going to WooCommerce > Settings > Shipping > Local Pickup Plus.


  • Enable: Check to enable Local Pickup Plus.
  • Title: Determine how this method will be displayed to customers during checkout.
  • Google Maps Geocoding API Key: Enter the API Key to enable geocoding.
  • Enable Logging: If geocoding is enabled, check to turn on logging for Google geocoding API requests. For best performance, please leave this disabled unless you need to troubleshoot geocoding issues.

Checkout Display

These settings determine when and how customers can select local pickup as a handling option.
  • Choosing Locations: Determine whether customers can choose different pickup locations for each eligible item in their cart or if they must choose one pickup location per order. Per-item location selection is useful when certain products aren’t available at every location.
  • Cart Item Handling: If Choosing Locations allows one pickup location per order, determine whether customers can choose to ship or pickup eligible items individually or if they must choose one handling method for all eligible items. Choosing one handling method for all items will group items in the fewest number of packages.
  • Default Handling: If Choosing Locations allows one pickup location per order, determine whether items should default to shipping or pickup (if eligible).
  • Location Sort Order: Determine how pickup locations are sorted for customers:
    • Default: Show locations as they are presented in the Pickup Locations list
    • Distance from customer: Only available when geocoding is enabled
    • Alphabetical by location name
    • Most recently added location

Pickup Appointments

If desired, these settings let you present a calendar/date/time selector to the customer at checkout so they can choose the pickup date and time for the order. Except for the Pickup Appointments Mode, Appointment duration and Lead time calculation settings, you can override these settings for individual pickup locations.
  • Pickup Appointments Mode: Determine if appointments should be displayed and if they should be required.
  • Appointment Duration – Set the duration for your pickup appointments. This will determine when users can schedule their appointments (e.g. hourly intervals)
  • Appointment limits – Determine how many customers can select the same pickup time before it becomes unavailable.
  • Default Business Hours: Determine when customers can pick up orders.
  • Common Public Holidays: Set fixed dates when pickup will not be available. Holidays that change date must be reset each year.
  • Default Lead Time: Set the amount of time that must pass between when the customer checks out and when they can first pickup their order.
  • Lead Time Calculation: Set how to calculate lead time:
    • Count only open hours. Calculates the first available pickup date/time considering business hours and holidays. (See more on this setting here.)
    • Count calendar days. Ignores business hours and holidays.
  • Default Deadline: Set the deadline for when a customer must pick up their order. You can leave this at zero to enforce no deadline.
WooCommerce Local Pickup Plus pickup appointments settings

Price & Tax

You can determine whether pickups should incur a fee or discount and how taxes should be handled for pickup orders.
  • Default Price Adjustment: Determine if pickup should charge a fee or provide a discount. You can override this setting for individual pickup locations.
  • Pickup Location Tax: Check to apply the tax rate based on the pickup location, not the customer’s address.

Lead Time Settings

↑ Back to top
Lead time is one of the more complex portions of Local Pickup Plus. In general, it refers to how long the merchant would like someone to wait before they can pick up their order. This delay could be required for a variety of reasons. Perhaps the product needs to be sent to the pickup location from a warehouse, or maybe it’s because the merchant needs time to bake the order of three dozen cookies. Whatever the reason, lead time allows the merchant to increase the waiting time before someone can pick up their order.

We’ve noticed a lot of confusion related to a specific lead time issue that comes up in one particular situation.

If you set your lead time in days (or weeks!) and you set it to count only open hours, then you will likely run into a problem where no one can select a date to pick up their order. Or, if they can, that date is some time away.

The issue here is that the plugin day is a period of 24 hours. Since most shops aren’t open for 24 hours in a single day, the idea of the “day” is split across the opening hours in the coming days.

For example, if you have a shop that’s open on Saturdays and Sundays from 12pm until 6pm, that’s 12 hours over the course of a weekend and still doesn’t add up to the 24 hours in a “day”. As such, if you have a lead time of one “day” that counts open hours only, you’ll have to wait for two full weekends to pass before the next available appointment opens up on the following Saturday.

Additionally, in this example, if your deadline time isn’t at least two weeks long, then your customers won’t even have the opportunity to select a pickup day.

As such, we recommend that you set your lead time in hours if you plan to use the option to only count open hours.

Product Pickup Settings

↑ Back to top
You can establish a product or category’s eligibility for local pickup in one of the following ways:
  • Can pick up: Customers can ship or pick up.
  • Cannot pick up: Customers can only ship.
  • Must pick up: Customers can only pick up.
When creating or editing a category, update the Local Pickup menu to decide if local pickup is allowed or required for products in this category. When creating or editing a product, go to the Shipping tab and update the Local Pickup field to determine if pickup is allowed, required, or if the prouct should follow its category-level settings. When a product and its category have different settings defined, Local Pickup Plus will follow the product-level settings.

Geocoding Setup

↑ Back to top
You can setup geocoding to allow for the pickup locations list to be sorted automatically in relation to the customer’s current location (using geoIP), which makes it easier for them to choose the best location. This is not required to use the plugin, but may be valuable for stores with multiple pickup locations. Also, please note that this will affect the order of the pickup locations on your end too. If you’d like to test if this feature is working as expected, you can use a VPN service or ask another user to take a look.

Follow the steps below to setup geocoding:
  1. Go to the Google API Library.
  2. Click Select a Project > New Project.
  3. Enter your Project Name, Organization (if applicable), and Location.
  4. Click Create.
  5. Select your newly created project, then search for and select Geocoding API.
  6. Click Enable.
  7. Go to Credentials and click Create Credentials > API Key.
  8. Copy your newly created API Key and click Close. Do not click Restrict Key – this may cause Google to reject your geocoding requests from Local Pickup Plus. Your API Key will never be exposed to users on your site.
  9. Now, go to the Local Pickup Plus settings, enter the copied key in the Google Maps Geocoding API Key field, and click Save Changes.
Once geocoding is enabled, your locations will be automatically geocoded (sorted based on the customer’s current location). If a location can’t be automatically geocoded, you can manually enter coordinates when editing the location.

Creating and Managing Pickup Locations

↑ Back to top
Follow the steps below to create a pickup location:
  1. Go to WooCommerce > Settings > Shipping > Pickup Locations.
  2. Click Add Pickup Location.
  3. Enter the pickup location name.
  4. Update the location detail tabs:
    • Address: Enter the location’s address and any notes you’d like customers to see about this location.
    • Available Products: If your plugin settings allow per-item location selection, specify which products and/or product categories can be picked up from this location. By default, products can be picked up from any location.
    • Costs & Discounts: Override the fees and discounts associated with local pickup as established in the plugin settings for this location.
    • Pickup Appointments: Override the default business hours, holidays, and pickup times as established in the plugin settings for this location.
    • Email List: Enter a comma-separated list of email recipients who should be notified when this location is selected in an order. The recipients will receive the New Order, Cancelled Order, and Failed Order emails if they are enabled on the WooCommerce > Settings > Email page.
  5. Click Update.

Importing and Exporting Locations

↑ Back to top
You can create and manage pickup locations in bulk using the built-in CSV import/export functionality.

Export Locations

You can run a quick export to download a few locations from your list or run a full export, which also lets you adjust the export settings to manage large exports.

To run a quick export:
  1. Go to WooCommerce > Settings > Shipping > Pickup Locations.
  2. Check the locations you want to export.
  3. From the Bulk Actions menu, select “Export”.
  4. Click Apply.
To run a full export:
  1. Go to WooCommerce > Settings > Shipping > Pickup Locations.
  2. Click Export Pickup Locations.
  3. Update the export settings as needed:
    • Separate Fields By: Choose to delimit the CSV file by commas (default) or tab spaces.
    • Limit Records: Limit the number of export rows. Recommended when working with a large number of locations. For example, “50” would limit the export to the first 50 locations.
    • Offset Records: Set the number of records to be skipped in this export. Recommended when working with a large number of locations. For example, “50” would ignore the first 50 locations in the list when exporting.
  4. Click Export.

Import Locations

For best results, export your locations and make your changes to that file to avoid issues with the CSV format. Then, you can import that file by following the steps below:
  1. Go to WooCommerce > Settings > Shipping > Pickup Locations.
  2. Click Import Pickup Locations.
  3. Click Choose File and select the CSV file from your computer.
  4. Set the Import Options as needed:
    • Update Existing Records: Check this setting to update locations if the ID matches an existing location. Uncheck to ignore any rows with an ID that matches an existing location.
    • Create New Pickup Locations: Check this setting to create new locations if the ID doesn’t match an existing location. Uncheck to ignore any rows with an ID that doesn’t match an existing location.
  5. Choose the file delimiter from the Fields Are Separated By menu.
  6. Click Import.

CSV Format

We recommend that you export locations before you import locations to ensure that your file matches the following import format requirements.
Column Name Required? Column Data Format
id maybe The post ID for the location. Required when updating existing locations. integer
status no “Publish” or “Draft” string
name yes string
country yes Two-letter country code (e.g. US) string (2 characters)
postcode yes numeric
state no Two-letter state code (e.g. VA) string (2 characters)
city yes string
address_1 yes string
address 2 no string
phone no numeric
latitude no If using geocoding, the location’s latitude coordinate. numeric
longitude no If using geocoding, the location’s longitude coordinate. numeric
products no A comma-separated list of product IDs that should be available at this location. Leave blank to permit all products. integer list
product_categories no A comma-separated list of product category IDs that should be available at this location. Leave blank to permit all product categories. integer list
price_adjustment no Price adjustment value for pickup at this location. Enter a positive value for a fee or a negative amount for a discount. Use a % sign to indicate a percentage adjustment, otherwise the entered amount will be a fixed fee/discount. numeric, also accepts % and +/- signs
business_hours no JSON-encoded list of time ranges for opening hours (in seconds); use index 0-7 for days of the week. JSON
public_holidays no A comma-separated list of holidays in mm-dd format. numerical list
pickup_lead_time no Lead time for pickup (e.g., “8 hours” or “1 week”) string
pickup_deadline no Deadline for pickup (e.g., “8 hours” or “1 week”) string
pickup_notifications no A comma-separated list of email addresses that should receive order notification emails for this pickup location. list
description no Location description/notes string
Note: Not sure how to enter your business hours in the import? Try entering them manually in the plugin settings for one location, export your locations, then apply/tweak those hours for other locations.
Click here to see an example of the Local Pickup Plus CSV file.

Placing Pickup Orders

↑ Back to top
Regardless of other settings, the product pickup settings will first determine if a product can be picked up or shipped, must be shipped, or must be picked up. The Choosing Locations and Cart Item Handling plugin settings will also impact the customer experience when placing an order: A table to explain how the Choosing Locations and Cart Item Handling settings impact customer checkout experience.

Choosing Pickup Locations and Handling Methods

↑ Back to top
If the Choosing Locations setting lets customers select different pickup locations per product, customers will see the pickup selector inline with their items while viewing their cart or going through the checkout process:
Note: If the same location is selected for multiple items, these items will be combined in one shipping package, which ensures that any price adjustments associated with the location are only applied once.
If the Choosing Locations setting only allows one pickup location per order, customers can select the pickup location in the overall cart/checkout details:
  • If the Cart Item Handling setting lets customers choose which products to ship or pick up, they can toggle the handling method for each eligible item:
  • If the Cart Item Handling setting requires customers to choose to ship or pickup all eligible products, they can toggle the handling method for all eligible items:

Selecting appointments

↑ Back to top
If pickup appointments are allowed or required, a calendar / date / time picker will appear at checkout so customers can select their pickup date and available pickup times. The calendar will respect your business hours, holidays, pickup lead time, and pickup deadline as defined in the plugin or location settings.
  • Available pickup times can be set in 15, 30, and 60 minute increments. If you limit the number of concurrent appointments, customers will not see an appointment time that has reached its limit.
  • If a pickup can occur at anytime during open hours, this will remove the time picker from the calendar at checkout.
  • If the “Choosing Locations..” setting permits multiple pickup locations, customers will see a different calendar for each location.

Manually adding Local Pickup to an order

↑ Back to top
As a site administrator, you can manually add local pickup to an order after its creation. To add local pickup to an order:
  1. Go to Orders and select Add Order.
  2. Add customer information and products to the order as needed.
  3. Click Add item(s) and select Add shipping.
  4. Click the pencil icon to edit the shipping line item.
  5. From the Shipping Method menu, select Local Pickup. This may be listed under a different name if you have set a custom title in the plugin settings.
  6. Click Save, then Create to create the order. You’ll see the Shipping line item update with pickup information.
  7. Click Edit under the local pickup item.
  8. Update the Pickup Location, Pickup Date, and Items to Pickup fields.
  9. Click Update Pickup Information.
  10. Click Update to save this information to the order.
You can repeat steps 3-10 as needed if you need to add multiple pickup locations to the order.
Note: Pickup details may be hidden from the order items table after saving until the entire page is refreshed. This is normal and due to the way that WooCommerce styles this table.

Viewing Order Appointments

↑ Back to top

Order Filter

On the WooCommerce > Orders screen, you can easily filter for orders with appointments that are scheduled for today, tomorrow, this week, or next week:

Viewing Pickup Time in Order

Within each order that has scheduled appointment, the pickup date and time will be displayed for all pickups that are scheduled for that particular order:

Compatible Plugins

↑ Back to top
While this is not an exhaustive list of compatible plugins, the following plugins have built-in compatibility with Local Pickup Plus.

Customer/Order CSV Export

↑ Back to top
When manually exporting orders with Customer/Order CSV Export, you can set a filter to only include orders with pickups at particular locations: If you export using a CSV format, the file will also include the following data in the shipping_lines column for pickup orders:
  • pickup_location_id
  • pickup_location_name
  • pickup_location_address
  • pickup_location_phone
  • pickup_date
  • pickup_time
  • pickup_item_ids
If you export using an XML format, the file will also include the following data to the ShippingItems XML tag for pickup orders:
  • PickupLocationId
  • PickupLocationName
  • PickupLocationAddress
  • PickupLocationPhone
  • PickupDate
  • PickupItemsIds

Print Invoices/Packing Lists

↑ Back to top
When Print Invoices/Packing Lists is used to generate order invoices, Local Pickup Plus will automatically add pickup details to the relevant invoices:

Frequently Asked Questions

↑ Back to top
Q: Will Local Pickup Plus ever support Shipping Zones?

A: No – shipping zones and pickup locations are fundamentally at odds with each other, so Local Pickup Plus will not support shipping zones.

A shipping zone tells you where the customer is, which helps with calculating costs and timelines when you’re shipping an item to the customer.

With pickup locations, the customer is coming to the item, so we need to know where the customer is going. As such, Local Pickup Plus includes geocoding to help customers choose a location, but will not restrict pickup locations to a shipping zone. Otherwise, you might prevent customers from picking up items in their desired location, such as near a vacation home.
Q: Can I remove my billing fields when pickup is selected?

A: This isn’t something that Local Pickup Plus supports by default since local pickup is connected to the shipping information for the order. Billing information is separate and is required by common payment methods, such as credit cards or PayPal. If you’re using a gateway that allows payment on pickup, it is the gateway’s responsibility to remove any unnecessary fields.
Q: Why aren’t the pickup location details showing in the order confirmation emails?

A:Location details are included in the New Order or Processing Order emails sent by WooCommerce. If you aren’t seeing this, it’s likely due to a conflict from a theme or plugin, or modification to the default email templates.
Q: Can pickup locations be outside the United States?

A: Absolutely! You can designate pickup locations in any country where your products are sold.
Q: Why can’t I determine which products are available at a location when I require customers to choose only one pickup location?

A: When your Choosing Locations setting requires one location per order, you can’t set product availability by location due to the complexity of building, splitting, and merging packages when both the product’s pickup eligibility and its availability at a specific location is involved in determining which locations can be selected for the order.

Managing this complexity requires a more robust package handling system than is currently supported by WooCommerce. We’ve decided not to include this in the plugin at this time, since it would impact its compatibility with other shipping plugins, as Local Pickup Plus would need to take over for WooCommerce in the package handling process.

Contributing more to package handling within WooCommerce is on our radar, so if this is important to you, please let us know!
Q: How can I split stock between different locations?

A:Local Pickup Plus does not contain a stock management system, so it’s not possible to set stock on a location-by-location basis. Instead, you can allow certain products to be picked up at specific locations by using Product Pickup Settings.
Q: How many customers can schedule an appointment at the same time?

A: This is up to you! If you require pickup appointments, you can use the appointment limits setting to control how many pickups are allowed at the same time.

A quick word of caution: be aware that applying limits when your pickup appointments are “all day” will limit the number of pickups total for that date.
Q: Can I offer Appointment durations shorter than the 15 minute duration the plugin offers?

A: You bet! You can use this code snippet to offer 5 and 10 minute intervals to the “Appointment duration” setting.

Please note that after you have added the code snippet to your site that you will have to update the “Appointment duration” setting before the shorter duration will take effect.
Q: My customers can’t seem to select a pickup date/time or my customers can only pick a date in the distant future. What’s going on?

A: You’ll likely want to review your lead-time settings so that you can ensure the pickup appointments being offered on the site match what you’re intending.
Q: Can I limit who can pickup products or orders by their distance from a location?

A: When offering local pickup, it is possible to sort the provided locations by distance from the customer making the purchase.

This does not, however, restrict the customer to choosing the closest location or a location within a certain distance. If this would benefit your store, let us know!
Q: I just upgraded to Local Pickup Plus version 2 – what’s changed?

A: When upgrading to Local Pickup Plus version 2, all pickup locations will update to use the new format. This shouldn’t cause any problems, but we recommend double-checking the locations’ country and state.

Please note that previous order data cannot be converted, as not enough information was stored in the order to use the new location format. While orders will retain legacy data, they can’t be upgraded for full support for pickup locations. As such, filtering by location will only work for new orders.

As category and product pickup availability are now more flexible (including availability per location), you may want to adjust your setup to leverage these new settings.
Q: Why the pickup appointment time dropdown is blank/no dates appear?

A: It’s possible that the time format of the site has been set to custom and it’s blank. In order to change that, you can navigate to Settings > General in your site’s dashboard and scroll down to the ‘Time Format’ section. Then, make sure you either choose a different format or that the Custom format’s field is not empty.


↑ Back to top

Local Pickup Not Showing in Manual Order

↑ Back to top
When manually adding local pickup details to an order in the WooCommerce admin area, you may notice that saved pickup details do not appear even after the order items table refreshes. This is normal and due to the way that WooCommerce styles this table. If you refresh the entire page, you’ll see the local pickup details appear as expected.

Shipping/Handling Methods Missing

↑ Back to top
Local Pickup Plus leverages WooCommerce core shipping zones, present since WooCommerce 2.6, to see if there are other shipping methods available, and forces pickup if there are no shippable methods on the site.

For plugins that are incompatible with WooCommerce 2.6 or do not leverage the core WooCommerce zones (such as XAdapter), this means that Local Pickup Plus is unaware of these other handling methods. As such, it will force pickup during checkout. In order to work with Local Pickup Plus, these plugins need to use a standardized ways of adding shipping methods to WooCommerce. As such, any plugin that doesn’t use core zones is incompatible with Local Pickup Plus.

Other Troubleshooting

↑ Back to top
Having difficulty with the plugin?
  • Please ensure your site meets the plugin requirements.
  • Check the FAQs to see if they address your question.
  • Have you disabled the WooCommerce core local pickup method for your store?
  • Seeing issues with geocoding or location sorting? Please double-check that your API Key is correct, then enable debug mode to log these requests.
  • Problems with the pickup location selector in the cart or during checkout? Please switch to a default theme (such as Twenty Seventeen) to rule out theme JavaScript issues.
  • If you’re experiencing a different issue, please contact the support team for assistance.

Questions & Support

↑ Back to top
Have a question before you buy? Please fill out this pre-sales form. Already purchased and need some assistance? Please check out our troubleshooting tips and frequently asked questions for common issues or contact support via the help desk if you need more help.