Documentation

GoUp Pickup Location Email Router

Route WooCommerce pickup-order emails to the branch responsible for the customer’s selected pickup location.

Plugin slug: goup-pickup-location-email-router · Version: 1.0.5 · Author: GoUpWP · https://goupwp.com/plugins/pickup-location-email-router

What it does

Sends order emails to the right branch when a customer chooses local pickup. Each pickup location — a WooCommerce Local pickup shipping instance, a Checkout Block pickup location, or a value stored in a custom order meta key by another plugin — can be mapped to its own recipients, either added to or replacing the store's admin address. Customer emails are left alone unless you explicitly allow routing them.

Works with the classic checkout, the Checkout Block and HPOS.

Installation

  1. Download the plugin ZIP from your GoUpWP account (Account → Licenses → Download).
  2. In WordPress go to Plugins → Add New → Upload Plugin, choose the ZIP and click Install Now, then Activate.
  3. WooCommerce must be installed and active; the plugin shows a notice and stays idle until it is.
  4. Open WooCommerce → License: Pickup Location Email Router and paste the license key from your account. Activation unlocks one-click updates and support for this site. A localhost, *.test, *.local or staging. site counts as a staging activation and does not use your production seat.

The plugin keeps working if the license expires: only updates and support pause until it is renewed.

Setup

Open WooCommerce → Pickup Email Router.

  1. Mappings → Add mapping: choose the provider and location (detected from your shipping zones and Checkout Block pickup locations), enter the branch recipients, and choose Add or Replace. Leave Use global email types on, or pick the email types for this mapping.
  2. Settings: the global email types to route (New order, Cancelled order, Failed order by default), whether to always keep the original recipient when replacing, whether customer emails may be routed, and an optional custom order meta key for pickup values written by third-party plugins.

Mappings can be exported and imported as JSON.

How it works

  • When a routed email is generated the plugin reads the order's shipping lines, resolves the pickup location (Checkout Block locations get a stable identity captured at checkout so renaming a location later does not break routing) and applies the matching mappings by priority.
  • If a pickup location is detected but nothing maps it, or a mapping has no valid address, the email falls back to its original recipients and a warning is logged — no email is ever lost.

Testing

The Tester tab routes an existing order number through the current mappings and shows the detected locations, matched mappings and final recipients without sending. Diagnostics lists the detected providers and locations.

Developer hooks

  • goup_pler_pickup_providers( array ) — register a provider implementing PickupLocationProviderInterface.
  • goup_pler_detected_locations( PickupLocationCollection, WC_Order, PickupProviderRegistry )
  • goup_pler_location_mappings( array ), goup_pler_should_route_email( bool, string $email_id, WC_Order )
  • goup_pler_original_recipients, goup_pler_branch_recipients, goup_pler_final_recipients, goup_pler_fallback_recipients
  • goup_pler_generic_meta_value( string, string $meta_key, WC_Order ), goup_pler_routing_result( RoutingResult, WC_Order, string )

Troubleshooting

  • Branch not emailed — the log line "Pickup location detected but no enabled mapping matched" means the order's location is not mapped (or the mapping is disabled); use the Tester with the order number.
  • Customer received a branch email — routing of customer emails is off by default; check the setting.

Updates and licensing

  • Updates arrive through the normal Dashboard → Updates and Plugins screens. Every package is downloaded over a signed, time-limited link and verified against its SHA-256 checksum before WordPress installs it.
  • View details on the Plugins screen shows the changelog for the new version.
  • If the license is not active you still see that an update exists; the row explains that renewing restores one-click updates.
  • The license page shows the installed version, the environment this site was classified as (production or staging), your activation counts and the renewal date, and has a Check for updates button.
  • Deactivate on this site frees the seat so the key can be used on another site. Deleting the plugin from the Plugins screen also frees the seat automatically.
  • Nothing is sent to goupwp.com except the license key, an installation ID, the site URL and the WordPress, PHP and plugin versions used for compatibility checks.

Support and maintenance

  • Open a ticket from Account → Support on goupwp.com; include the output of the plugin's Diagnostics tab.
  • Keep WordPress, WooCommerce and the plugin updated and test changes on a staging site first.
  • The plugin declares compatibility with WooCommerce High-Performance Order Storage (HPOS) and the Cart and Checkout Blocks, and is translation-ready (languages/).
  • Uninstalling removes the plugin's data only when the Delete data on uninstall option is enabled, so a reinstall keeps your configuration; license data is always removed.

Release history

1.0.5 27 September 2026 · tested with WordPress 7.1

  • Rejects header-like CRLF recipient input and bounds recipient, mapping, note, identifier, and email-type collections.
  • Multiple matching Replace mappings now union every branch recipient instead of silently keeping only the last mapping.
  • Provider failures and malformed extension filter results now fail safely to the original WooCommerce recipient.
  • Runtime-filtered mappings can no longer leak into storage; same-request external option changes invalidate the mapping cache.
  • Imports now require POST, capability and nonce checks, strict schema/version validation, actual file-size and extension checks, unique IDs, complete valid rows, and a 500-mapping ceiling.
  • Added accurate 403/405 responses, safer enable checks, minimal sanitized logging, and independent installed-version upgrades.
  • Unified cards, tables, tabs, buttons, badges, focus states, and warnings with the GoUpWP blue design system.
  • Expanded unit and real WooCommerce email-pipeline coverage, including simultaneous Replace mappings.

1.0.4 26 September 2026 · tested with WordPress 7.1

  • GoUpWP admin identity: every plugin screen now opens with a GoUpWP header showing the plugin name, version, documentation, support and licence status.
  • GoUpWP styling for settings, rule tables, tabs, cards and buttons, scoped to this plugin's screens so WordPress and other plugins are untouched.
  • GoUpWP mark on the Plugins screen, Documentation and Support links in the plugin row, and GoUpWP icons on the Dashboard → Updates screen.

1.0.3 20 September 2026 · tested with WordPress 7.1

  • Updates: the installer now fetches a freshly signed download link at install time and verifies the SHA-256 checksum, so "Update now" works hours after WordPress last checked for updates.
  • Updates: update checks are cached for six hours and the Plugins screen shows a clear message (with a link to the license page) when an update exists but the license is not active.
  • License screen: named per plugin in the WooCommerce menu, shows the installed version and a "Check for updates" button, and every string is translatable.
  • Plugins screen: Settings and License links on the plugin row.
  • Uninstall: releases the license seat on goupwp.com and removes all license data, regardless of the data-retention setting.
  • Code style: all source files expanded to readable, documented PHP.
  • Email routing attaches when WooCommerce builds its mailer instead of loading every email class on each storefront request.

1.0.2 20 September 2026 · tested with WordPress 7.1

  • License screen now explains activation failures (unrecognised key, wrong plugin, site limit reached, expired) and shows the environment, activation counts and end date.
  • Activate and Deactivate always contact goupwp.com immediately instead of waiting out a network backoff.

1.0.1 20 September 2026 · tested with WordPress 7.1

  • Added the GoUpWP licensing and update client.
  • Normalized plugin headers and code style.