WooCommerce has the option for Local Pickup as an out-of-the-box shipping method. And it does a great job for a single shop. But if you have multiple locations, well, that’s another matter.
WooCommerce Local Pickup Plus
First off, you are going to need to enable this plugin. That can be found under your Settings > Shipping > Local Pickup Plus.
You will also add your Google Maps Geocoding API here. I won’t be using one, but note that it’s added benefit is that it will sort the pickup list based on the customer’s current location, making it easier for them to choose one.

Next we have Checkout Display. Your first option is to limit your customers to one location per order. When choosing this option, your customers can bundle the pickup in as many packages as possible or toggle pickup or shipping for each specific item. The Default Handling option appears first, then ship items or pickup items. Whatever you choose, you will want customers to understand that both options are available.
When choosing the Location Sort Order option, Distance from Location will only work if you have added the Geocoding API.

With the second option you only have the Location Sort Order to set.

Pickup Appointments gives you the option to let your customers schedule a pickup time. Business hours can be set by day or a span of days of the week.
When you allow scheduled appointments, optionally, you choose the appointment duration and times and dates in relation to your store or warehouse hours.
You also can set a buffer for a lead time, a couple of options for lead time calculation and how far you want the latest pickup date to extend to.

If you choose to require scheduled pickups, the option of appointment limits is added.

And the last option under settings is Price and Tax. You can add a flat fee for pickup, or give a discount for pickup.
You can also toggle on the option to have the tax rate based on the pickup location vs. the customer’s address.

Setting Up Your Pickup Locations
Each location gives you several options to fine tune what is available for pickup. This will also be found under shipping in your settings.

Creating Your Pickup Locations
For each location, you will start with adding the basics such as address, and a spot to give further instructions.

Available products can only be used when you have set it to Allow customers to choose a location per product. Otherwise, this setting is not available.
You are able to have all products available or just select products.

Costs and discounts can be toggled on and will show the default amount you had set up before. Of course, you can change this per location.

The same goes for pickup appointments. When each option is toggled, on you can use the default settings or set it specific to each location.

Lastly, you can enter all the emails of anyone at that location who should receive the orders that are labeled specifically for pickup.

Once I have all my locations in, I can manage them here.

Once we have this set up, if we look at our cart page, the option will be there now (note that I set the local pickup as the default shipping).

Once the customer has selected the location, it gives them more specific information. And since I am giving a 10% discount on pickup, you will see that as well.

When I go to checkout, now I am given a time to set up a pickup appointment. I have set this as optional and that is noted.

Once I have selected a date, it will tell me the hours that it’s open on that particular day.

Note that if I had had the Geocoding API set up, I would have been able to pick a location based on my address.
When the customer gets their email receipt, the information for pickup will be there.

And in the order in WooCommerce, you will see the details as well.

So if you are looking to set up your WooCommerce store for pickup and have several locations, check out the WooCommerce Local Pickup Plus extension here.