Title: Mora Delivery for WooCommerce
Author: moralogistics
Published: <strong>October 14, 2026</strong>
Last modified: October 16, 2026

---

Search plugins

![](https://ps.w.org/mora-delivery-for-woocommerce/assets/banner-772x250.png?rev
=3746963)

![](https://ps.w.org/mora-delivery-for-woocommerce/assets/icon-256x256.png?rev=3746963)

# Mora Delivery for WooCommerce

 By [moralogistics](https://profiles.wordpress.org/moralogistics/)

[Download](https://downloads.wordpress.org/plugin/mora-delivery-for-woocommerce.0.7.85.zip)

 * [Details](https://wordpress.org/plugins/mora-delivery-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/mora-delivery-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/mora-delivery-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/mora-delivery-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/mora-delivery-for-woocommerce/)

## Description

Mora Delivery for WooCommerce connects a WooCommerce store to Mora Logistics, a 
delivery and fulfilment service, so a merchant can:

 * Show a real, live delivery quote at checkout, priced by Mora’s own rate API against
   the customer’s address or pinned location.
 * Offer a payment gateway that charges only the order’s delivery fee upfront (by
   card, bank transfer, or USSD through the merchant’s own Paystack account), leaving
   any goods balance to be collected in cash on delivery. By default this works 
   for any order regardless of shipping method. An optional setting restricts it
   to Mora’s own delivery method and Lagos addresses only, for a merchant delivering
   nationwide who still wants this fee-now/collect-on-delivery flow limited to Lagos;
   an interstate order with Mora chosen still delivers, it just pays in full upfront
   through another payment method.
 * Automatically push a placed order to Mora and keep its status in sync afterward,
   so the merchant’s own dashboard and Mora’s delivery team see the same order without
   re-entering it anywhere.
 * Let a customer pin their exact delivery location (Google Places autocomplete)
   instead of typing an address Mora’s riders might not recognise, with a plain 
   address field as a fallback when that’s turned off.

A Mora Logistics merchant account (a real business relationship with Mora, not a
generic sign-up) is required for the shipping-quote and order-push features to do
anything; the payment gateway can be used on its own by any merchant with a Paystack
account. This plugin is currently built and supported for merchants operating in
Nigeria.

#### What this plugin does not do

Pricing detail, cost basis, and margin never leave Mora’s own servers. This plugin
only ever receives a price, whether a destination needs manual confirmation, and
whether cash-on-delivery is allowed there, the same information shown to the customer.

### External Services

This plugin connects to the following services to provide its features. None of 
them run unless the matching feature is actually configured and in use.

**Mora Logistics API (mora-api)**: Mora’s own backend, used to price delivery quotes
and to push and sync placed orders. When a quote is requested, this plugin sends
the destination state, and, where available, the customer’s pinned coordinates or
typed address, to the Mora API address set in the plugin’s settings (Mora’s production
service is `https://api.moralogistics.com`). When an order is placed, order, product,
and customer contact details are sent there so Mora can fulfil the delivery. This
is Mora’s own first-party service, governed by the same merchant agreement a Mora
Logistics merchant signs; see Mora Logistics’ Terms of Service (https://moralogistics.
com/terms) and Privacy Policy (https://moralogistics.com/privacy-policy).

**Paystack**: used only by this plugin’s own payment gateway (optional, merchant-
enabled), through the merchant’s own Paystack account. The order’s delivery-fee 
amount, currency, and a payment reference are sent to Paystack to process the charge(
sent to `https://api.paystack.co` when the customer places an order with this gateway,
and again to verify the payment); no card details pass through this plugin or site,
Paystack’s own hosted page handles that directly. See Paystack’s Terms of Use (https://
paystack.com/terms) and Merchant Privacy Policy (https://paystack.com/privacy/merchant).

**Google Maps / Places API (New)**: used only by the optional checkout address-search
widget (merchant can turn this off). When enabled, the customer’s browser loads 
Google’s Places library directly and sends the text they type, plus the location
they select, to Google, to resolve an address to coordinates. See Google’s Terms
of Service (https://policies.google.com/terms) and Privacy Policy (https://policies.
google.com/privacy). The API key used is Mora’s own, centrally managed and rate-
limited; the merchant does not need their own Google Cloud account.

**Sentry**: error reporting, off by default. Nothing is sent unless the merchant
ticks “Error reports” on the WooCommerce > Mora Delivery settings page. When enabled,
this plugin’s own warning and error log messages are sent to Mora’s Sentry project(`
ingest.de.sentry.io`) as they happen, with the site’s address and the plugin, WordPress
and PHP versions. Customer names, phone numbers, emails and addresses are never 
sent. See Sentry’s Terms of Service (https://sentry.io/terms/) and Privacy Policy(
https://sentry.io/privacy/).

### Source code

This plugin has no build step: every PHP, JavaScript and CSS file in it is the human-
readable source. The short Google Maps loader inside `assets/js/blocks-locator.js`
and `assets/js/checkout-autocomplete.js` is Google’s official Dynamic Library Import
bootstrap snippet, copied verbatim from https://developers.google.com/maps/documentation/
javascript/load-maps-js-api#dynamic-library-import.

## Screenshots

[⌊The delivery fee shown live at checkout, before the customer pays.⌉⌊The delivery
fee shown live at checkout, before the customer pays.⌉[

The delivery fee shown live at checkout, before the customer pays.

[⌊The delivery-fee-now payment gateway at checkout.⌉⌊The delivery-fee-now payment
gateway at checkout.⌉[

The delivery-fee-now payment gateway at checkout.

[⌊The Mora Delivery settings screen in wp-admin.⌉⌊The Mora Delivery settings screen
in wp-admin.⌉[

The Mora Delivery settings screen in wp-admin.

## Installation

 1. Upload the plugin through Plugins > Add New > Upload Plugin, or extract it into`
    wp-content/plugins/`.
 2. Activate it through the Plugins screen.
 3. Go to WooCommerce > Mora Delivery to enter the API key Mora Logistics gave your
    business, then configure a shipping zone to use the Mora method.
 4. Optionally, go to WooCommerce > Settings > Payments > Mora Pay on Delivery to enable
    the delivery-fee-now payment gateway.

## FAQ

### Do I need a Mora Logistics account to use this plugin?

For live shipping quotes and order sync, yes, a real merchant relationship with 
Mora Logistics. The delivery-fee payment gateway can be used on its own without 
one, as long as you have your own Paystack account.

### Does this work outside Nigeria?

Not currently. Mora Logistics operates in Nigeria, and this plugin’s shipping-quote
and address features are built around Nigerian states and addresses.

### What happens to the goods balance if a customer pays the delivery fee online?

It’s collected in cash when the order is delivered. The order shows the outstanding
balance in wp-admin, and there’s a one-click action to mark it collected once the
rider hands it over.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Mora Delivery for WooCommerce” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ moralogistics ](https://profiles.wordpress.org/moralogistics/)

[Translate “Mora Delivery for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/mora-delivery-for-woocommerce)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/mora-delivery-for-woocommerce/),
check out the [SVN repository](https://plugins.svn.wordpress.org/mora-delivery-for-woocommerce/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/mora-delivery-for-woocommerce/)
by [RSS](https://plugins.trac.wordpress.org/log/mora-delivery-for-woocommerce/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.7.85

 * Mora Pay on Delivery and WooCommerce’s Cash on Delivery can no longer be on together:
   switching one on switches the other off. A store with both on shows only Mora
   Pay on Delivery at checkout until one is switched off.
 * Cash orders (Mora Pay on Delivery and Cash on Delivery) are no longer reported
   to Mora as paid from WooCommerce order statuses. Mora marks them paid when the
   cash reaches Mora.

#### 0.7.84

 * The payment gateway is now called “Mora Pay on Delivery” everywhere (it was “
   Mora Goods on Delivery”). Its id and your settings are unchanged.
 * Reads the delivery quote’s new pay_on_delivery_allowed field from Mora, and still
   understands the old name.

#### 0.7.82

 * Removed the internal checkout prototype code (test pages, a compact-layout stylesheet
   and a classic-checkout fee breakdown). The “How you’ll pay” breakdown on the 
   real checkout is unchanged. If your site has the unlinked test pages “checkout-
   experiment-mora” or “checkout-classic-test”, you can delete them.

#### 0.7.81

 * Security: delivery-status webhooks from Mora can now carry a signed timestamp,
   and a signed request older or newer than five minutes is rejected, so a captured
   request cannot be replayed. Webhooks signed the previous way are still accepted
   for now.

#### 0.7.80

 * The Plugins screen now shows “By Mora Logistics” and a plain-language description.

#### 0.7.79

 * Fixed: hub-pickup orders from the block checkout (WooCommerce Local Pickup) were
   never sent to Mora. They are now, like classic-checkout pickup orders.
 * Docs: External Services no longer says payments are verified through Mora’s API(
   they are verified directly with Paystack), and names the configured API address.

#### 0.7.78

 * Fixed: an unpaid on-hold order (for example, bank transfer awaiting payment) 
   is no longer sent to Mora. It is sent once you mark it processing.

#### 0.7.77

 * Fixed: with “Restrict to Lagos” on, choosing “Pay delivery fee now, balance on
   delivery” on a Mora delivery to Lagos could show “not available for this order”
   on the block checkout.

#### 0.7.76

 * Error reporting to Sentry is now opt-in and off by default (WooCommerce > Mora
   Delivery > Error reports).
 * The “stock Cash on Delivery is still enabled” notice now only shows on WooCommerce’s
   Payments settings, and only when the Mora Pay on Delivery gateway is enabled.
 * Fixed a PHP notice on Blocks checkout field registration (maxLength attribute
   name).
 * Readme: corrected the Paystack privacy policy link, documented the source of 
   the Google Maps loader snippet, and clarified what is sent to Paystack and Sentry.

#### 0.7.75

 * Removed the “Tested up to” line from the plugin header (WordPress.org requires
   it be declared only in this readme file, to avoid the two silently drifting apart).

#### 0.7.74

 * Code comments no longer reference this project’s internal development-notes file
   by name. No functional change.

#### 0.7.73

 * The “Restrict to Lagos” setting on the pay on delivery gateway now also requires
   Mora’s own shipping method to be the one chosen (not just a Lagos destination);
   an interstate order with Mora chosen still delivers, it just pays in full upfront
   through another payment method instead of this gateway’s fee-now/collect-on-delivery
   flow.

#### 0.7.72

 * Shortened the 0.7.68 upgrade notice to meet WordPress.org’s 300-character limit
   for it.

#### 0.7.71

 * Added an opt-in “Restrict to Lagos” setting on the Mora Pay on Delivery payment
   gateway, for a store delivering nationwide that still wants this gateway’s own
   cash-on-delivery handoff limited to Lagos.

#### 0.7.69

 * Fixed a fatal error (infinite recursion) that could crash checkout and cart pages
   when the site-wide API key is unset and a shipping zone still has a Mora method
   configured.

#### 0.7.68

 * Plugin slug renamed to mora-delivery-for-woocommerce (from mora-woocommerce),
   to meet WordPress.org’s plugin-directory naming rules.
 * Internationalization fixes: translator comments and ordered placeholders on two
   order-push log messages and the Delivery Failed status label.
 * An exception message is now escaped before being thrown.
 * The build script is no longer bundled into the distributed plugin zip.

#### 0.7.67

 * The delivery-fee payment gateway no longer depends on Mora’s own shipping method
   being chosen; it now works for any order, any shipping method, any destination,
   as a plain opt-in setting.

#### 0.7.0 – 0.7.66

 * Blocks (Cart & Checkout block) support for the shipping quote, the locator widget,
   and the payment gateway, alongside classic checkout.
 * Checkout lead capture, order push and status sync, delivery-status webhooks, 
   Sentry error reporting (optional), and a long series of live-diagnosed fixes 
   to the Blocks checkout address/state fields. Full detail kept in this repository’s
   own development history, not repeated here.

#### 0.6.x and earlier

 * Initial shipping-quote integration, Mora Pay on Delivery payment gateway, and
   order push, built out across the Rate API and Merchant Intake build order.

## Meta

 *  Version **0.7.85**
 *  Last updated **21 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [cash on delivery](https://wordpress.org/plugins/tags/cash-on-delivery/)[delivery](https://wordpress.org/plugins/tags/delivery/)
   [nigeria](https://wordpress.org/plugins/tags/nigeria/)[shipping](https://wordpress.org/plugins/tags/shipping/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/mora-delivery-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/mora-delivery-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/mora-delivery-for-woocommerce/reviews/)

## Contributors

 *   [ moralogistics ](https://profiles.wordpress.org/moralogistics/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/mora-delivery-for-woocommerce/)