# Add-ons

An extension is a WordPress plugin built for WCPOS: a card terminal, a multilingual catalog, store credit, stock by location. You find them all in one directory in WordPress, at **WP Admin > POS > Settings > Extensions**.

Installing from the directory takes one button, and needs **WCPOS Pro** and a WordPress administrator. Without Pro, [Polylang](/ar/settings/languages/polylang.md), [WPML](/ar/settings/languages/wpml.md) and [WP Multilang](/ar/settings/languages/wp-multilang.md) can be installed by hand.

Jump to: [Install an extension](#installing-an-extension) · [Install without Pro](#install-by-hand) · [If something goes wrong](#troubleshooting)

## What's in the directory[​](#available-extensions "رابط مباشر إلى What's in the directory")

Each card below links to that extension's own page: what it does, what it needs and how to set it up.

By category: [Payments](#payment-gateways) · [Languages](#multilingual) · [Coupons and store credit](#coupons-and-store-credit) · [Inventory](#inventory)

### Payments[​](#payment-gateways "رابط مباشر إلى Payments")

Take in-person payments on a card terminal, or let the customer pay from their phone or by email.

[Stripe TerminalCard payments on Stripe Terminal readers (S700, WisePOS E), with card details keyed in for phone orders and a simulator for testing.](/ar/hardware/card-readers/stripe-terminal.md)

[SumUp TerminalCard payments on SumUp card readers.](/ar/hardware/card-readers/sumup.md)

[Square TerminalIn-person payments on Square Terminal devices.](/ar/hardware/card-readers/square-terminal.md)

[PayPal Reader (Zettle)Card payments on a PayPal Reader (Zettle) terminal.](/ar/hardware/card-readers/paypal-zettle.md)

[Mollie TerminalIn-person payments on Mollie Terminal devices, with refunds from the order screen.](/ar/hardware/card-readers/mollie.md)

[Mercado Pago TerminalIn-person payments on Mercado Pago Point Smart terminals in Argentina, Brazil, Mexico, Uruguay, Colombia, Chile and Peru.](/ar/hardware/card-readers/mercado-pago.md)

[Windcave TerminalCard payments on Windcave terminals, with the HIT username and key Windcave issues you. Live use waits on Windcave's certification.](/ar/hardware/card-readers/windcave.md)

[PayArc TerminalIn-person payments on PayArc PAX terminals through PayArc Connect.](/ar/hardware/card-readers/payarc.md)

[Vipps MobilePayThe customer pays on their phone, by QR code or a push request. Vipps in Norway, MobilePay in Denmark and Finland.](/ar/sell/take-payment/vipps-mobilepay.md)

[Email InvoiceEmail the customer a link to pay for the order online.](/ar/sell/take-payment/email-invoice.md)

For the payment methods WCPOS has without an extension, see [Payment Gateways](/ar/settings/checkout/payment-gateways.md).

### Catalog: more than one language[​](#multilingual "رابط مباشر إلى Catalog: more than one language")

If your store sells in several languages, these show the POS one language of each product, so translated copies don't fill search and the product grid.

[WCPOS PolylangOne language per store with Polylang. With WCPOS Pro, each store can pick its own.](/ar/settings/languages/polylang.md)

[WCPOS WPMLOne language in the POS with WPML.](/ar/settings/languages/wpml.md)

[WCPOS WP MultilangOne language in the POS with WP Multilang.](/ar/settings/languages/wp-multilang.md)

### Coupons and store credit[​](#coupons-and-store-credit "رابط مباشر إلى Coupons and store credit")

[WCPOS StoreApps Smart CouponsWith WCPOS Pro, take StoreApps Smart Coupons store credit on the Legacy tab's payment page, with the balance on the receipt and a note on the order.](/ar/manage-store/coupons/smart-coupons.md)

### Inventory[​](#inventory "رابط مباشر إلى Inventory")

[WCPOS ATUM IntegrationLink each WCPOS Pro store to an ATUM Multi-Inventory location, with its own stock, prices and SKUs.](/ar/manage-store/stores/atum-locations.md)

## Install an extension[​](#installing-an-extension "رابط مباشر إلى Install an extension")

Before you start

Installing from the directory needs **WCPOS Pro** and a WordPress administrator: Shop Managers can't install plugins (see [Access](/ar/manage-store/staff-permissions.md)). On the free version, see [Without Pro](#install-by-hand).

1. In WordPress, go to **WP Admin > POS > Settings** and choose **Extensions**.
2. Find the extension. Type in **Search extensions...** (it matches the name, description and tags), or pick a tab: **All**, **Catalog**, **Coupons**, **Inventory**, **Payments**.
3. Press **Install** on its card. WCPOS downloads it, installs it and activates it in one go, and turns on **Auto-update**. The card now says **Active**.
4. Set it up. If the card's **⋮** (**More actions**) menu has **Settings**, choose it. The extension's own page above says what to fill in.

No Settings in the menu, or another way in

* **Settings** is in the menu only when the directory lists a settings page for that extension. Without it, follow the extension's own page.
* With WCPOS Pro, the same **Settings** link sits under the extension's name on **WP Admin > Plugins**.
* For a payment extension, **Settings** opens its page in WooCommerce's payment settings.

![The Extensions screen in WordPress with WCPOS Pro: the WCPOS settings menu with Extensions selected, a search box and Refresh button, the category tabs All, Catalog, Coupons, Inventory and Payments, and a grid of extension cards.](/img/2.x/extensions/en/desktop-light-regular--j1-1-extensions-screen.png)1234

1. **Extensions** — in the WCPOS settings menu. A number beside it counts the extensions with an update waiting.
2. **Search extensions...** — matches the name, description and tags.
3. **Refresh** — checks the directory for new versions now.
4. **Category tabs** — **All**, or one category.

### What a card shows[​](#browsing-extensions "رابط مباشر إلى What a card shows")

Each extension has a card with its icon, name and description. A puzzle piece stands in when the extension has no icon of its own. An installed extension's card:

![The card for PayPal Reader for WooCommerce, installed but Inactive: version 0.1.0 in Payments, Auto-update on, and an Activate button.](/img/2.x/extensions/en/desktop-light-regular--j1-2-installed-card.png)12345

1. **Status** — **Active**, **Inactive** (as here) or **Update available**.
2. **Version** — the installed version. With an update waiting it reads **v0.5.9 → v0.5.10**. It links to the release on GitHub. The category after it is the tab the extension sits under.
3. **⋮ More actions** — **View on GitHub**, and **Settings** if the extension has a settings page.
4. **Auto-update** — on or off for this extension.
5. **Activate** — the button shows what comes next: **Activate**, **Update**, or both when a stopped extension has an update. **Deactivate** sits beside it while the extension is running.

One that isn't installed:

![The card for Square Terminal for WooCommerce, not installed: no status, version 0.8.7 in Payments, and an Install button.](/img/2.x/extensions/en/desktop-light-regular--j1-3-not-installed-card.png)1

1. **Install** — the card has no status and no **Auto-update**, and its version is the latest one.

### Without Pro[​](#install-by-hand "رابط مباشر إلى Without Pro")

The free version lists every extension, but **Install** is greyed out with **Requires Pro to install**. The three multilingual extensions, Polylang, WPML and WP Multilang, run without Pro, so you can install those by hand:

1. On the extension's card, open **⋮** (**More actions**) and choose **View on GitHub**.
2. Download the `.zip` attached to the latest release.
3. In **WP Admin > Plugins > Add Plugin**, press **Upload Plugin**, choose the zip and activate it.

The directory then shows it as **Active**, and as **Update available** when a new release is out. Without Pro there's no **Update** button: upload the new release's zip the same way, and WordPress offers to replace the installed version.

## Update, turn off or turn on[​](#activating-and-deactivating "رابط مباشر إلى Update, turn off or turn on")

Without Pro, update an extension by hand: see [Without Pro](#install-by-hand).

With WCPOS Pro, the buttons on an installed extension's card do this:

* **Update** — installs the new version. An extension that was running keeps running.
* **Deactivate** — stops the extension without removing it. Its settings and files stay, and **Activate** brings it back. **Activate** turns **Auto-update** on again.

### Updates[​](#updating-extensions "رابط مباشر إلى Updates")

When a new version is out, the version on the card reads **v0.5.9 → v0.5.10**, and a running extension's status changes to **Update available** (one that's turned off stays **Inactive**). With WCPOS Pro it also shows the **Update** button, and WordPress lists the same update on its **Plugins** screen, so you can update from either place. On the free version, update by hand: see [Without Pro](#install-by-hand).

The directory checks for new versions once an hour. Press **Refresh** next to the search box to check now.

### Auto-updates[​](#auto-updates "رابط مباشر إلى Auto-updates")

**Auto-update** is on for every extension you install or activate from the directory. With it on, WordPress installs new versions in the background, the same way it does for any plugin with auto-updates on. Turn it off on the card if you'd rather update by hand, for example to test a new version first.

A new version that needs a newer WCPOS than your site runs isn't offered at all, by the card or by auto-update. Update WCPOS Pro first, and the extension's update appears.

### Remove an extension[​](#removing-an-extension "رابط مباشر إلى Remove an extension")

To remove an extension for good, deactivate and delete it on **WP Admin > Plugins**, like any other plugin. With WCPOS Pro you can deactivate it on its card first.

## If something goes wrong[​](#troubleshooting "رابط مباشر إلى If something goes wrong")

**Install is greyed out and says "Requires Pro to install".** You're on the free version: installing from the directory needs [WCPOS Pro](/ar/getting-started/pro-license.md). The multilingual extensions can be [installed by hand](#install-by-hand).

**"You do not have permission to manage plugins."** Your WordPress user can't install plugins. Ask an administrator.

**"… needs WCPOS 2.1 or later; this site runs WCPOS 2.0. Update WCPOS Pro first."** The version on offer is newer than your WCPOS supports. Update WCPOS Pro, then try again.

**"Could not refresh extensions. Please try again." or "No extensions found." with nothing searched.** Your site couldn't fetch the list of extensions. The list comes from GitHub, and some hosts stop websites from connecting out. Try again later, or ask your host to allow connections to GitHub.

**The install fails with an error on the card.** WordPress couldn't download or unpack the plugin, and the message on the card names the cause. Ask your host to check that WordPress can save files in its plugins folder (`wp-content/plugins`) and can connect to GitHub.

**The card says Inactive after Install.** WordPress installed the extension but couldn't turn it on, and it won't run until it is. Press **Activate**: if that fails, the message on the card names the cause.

**A new version isn't showing.** The directory keeps its list for an hour. Press **Refresh**.

With WCPOS Pro

The free version shows the whole directory, but the **Install**, **Activate**, **Update**, **Deactivate** and **Auto-update** controls come with Pro. See [Free vs Pro](/ar/getting-started/free-vs-pro.md).

## Related Documentation[​](#related-documentation "رابط مباشر إلى Related Documentation")

[Payment GatewaysEvery way to take payment, with or without an extension.](/ar/settings/checkout/payment-gateways.md)

[IntegrationsPlugins you already run for your online store, and how they work with the POS.](/ar/manage-store/compatible-plugins.md)

[Free vs ProWhat WCPOS Pro adds, extensions included.](/ar/getting-started/free-vs-pro.md)

***

## For developers[​](#for-developers "رابط مباشر إلى For developers")

For building an extension or listing your own. Nothing below is needed to run a store.

### Hook naming[​](#hook-naming "رابط مباشر إلى Hook naming")

From WCPOS 2.0 every hook WCPOS fires is named `wcpos_*`. The old `woocommerce_pos_*` names are deprecated: they still work, and are removed in 2.2 at the earliest.

Pro hooks, deprecation notices, and what keeps its name

WCPOS Pro's hooks are named `wcpos_pro_*`. The old names are aliases: they still fire, and log a deprecation notice under `WP_DEBUG` when something is attached. Only hooks change: options, meta keys and capabilities keep their names.

Hooks your code fires, and when to switch

Four hooks are fired by your code and heard by WCPOS: `woocommerce_pos_invalidate` (extensions), `woocommerce_pos_receipt_head` (saved PHP receipt templates), and `woocommerce_pos_head` / `woocommerce_pos_footer` (a theme's `pos.php` override). WCPOS keeps listening on those names until 2.2; switch to `wcpos_invalidate`, `wcpos_receipt_head`, `wcpos_head` and `wcpos_footer`.

Extensions: switch to the `wcpos_` names in your first release after 2.0 and require WCPOS 2.0 or later. Never attach to both names; on 2.0 and 2.1 your callback would run twice. See [ADR 0041](https://github.com/wcpos/woocommerce-pos/blob/main/docs/adr/0041-wcpos-is-the-hook-prefix.md).

Build an extension and list it in the directory

### Creating a POS extension

A WCPOS extension is an ordinary WordPress plugin that uses WCPOS hooks and APIs. For a payment extension, start from the [Gateway Template](/ar/developers/gateway-template.md).

### Adding to the POS screens

A plugin can't add its own panel or button to the POS screens today. The cart, product and customer screens show only what ships with the app. Checkout is the exception: a payment gateway shows its own payment page on the [Legacy tab](/ar/sell/take-payment/legacy-tab.md), or, through two filters, gets its own tile and fields on the **Payments** tab. See [Declaring Fields for the Tender Pane](/ar/developers/gateway-checkout-fields.md).

So that the directory recognises your plugin once it's installed

* **Folder name** — the plugin's folder must be the catalog `slug`, e.g. `my-extension/my-extension.php`. The directory finds installed extensions by that folder, and installs into it.
* **Text Domain or Plugin URI** — one of them must match the `slug` or the GitHub repository's name. Without a match, auto-updates and the WordPress **Plugins** screen don't offer your releases. The check stops a fork that reuses your folder name from receiving them.

### Submitting to the directory

The directory reads `catalog.json` in the [`wcpos/extensions`](https://github.com/wcpos/extensions) repository on GitHub. To list your extension, open a pull request there that adds an entry to `catalog.json`, and an icon under `icons/` if you have one. Once it merges, WCPOS sites see it within about an hour.

Every field in a catalog entry

| Field                                          | What it holds                                                                                                                                         |
| ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `slug`                                         | The plugin's folder name.                                                                                                                             |
| `name`, `description`, `author`                | What the card shows.                                                                                                                                  |
| `category`                                     | The tab it sits under: `payments`, `catalog`, `coupons`, `inventory`, or a new one.                                                                   |
| `tags`                                         | Extra words the search matches.                                                                                                                       |
| `homepage`                                     | The GitHub repository, `https://github.com/owner/repo`. Releases are read from here.                                                                  |
| `icon`                                         | URL of a square icon, usually the file you added under `icons/`. Without one the card shows a puzzle piece.                                           |
| `requires_wp`, `requires_wc`, `requires_wcpos` | The lowest WordPress, WooCommerce and WCPOS versions it runs on. Sites below `requires_wcpos` are never offered the release.                          |
| `requires_pro`                                 | Whether it needs WCPOS Pro to run.                                                                                                                    |
| `settings_url`                                 | Its settings page, relative to `wp-admin/`, e.g. `admin.php?page=wc-settings&tab=checkout&section=my_gateway`. Fills **Settings** in the card's menu. |

Leave `version`, `latest_version`, `download_url` and `released_at` to the catalog: they're filled in from your releases.

### GitHub release conventions

Publish a full GitHub release with the version as its tag and the plugin zip attached. Every hour the catalog reads the latest release of each listed repository and updates its entry.

What a release needs to reach WCPOS sites

* **Tag it** with the version, `v1.2.3`. The leading `v` is dropped for the version number, which must match the plugin header's `Version`.
* **Attach the plugin zip** named after the slug, `my-extension.zip`. Without that name, the first `.zip` on the release is used. WCPOS installs it into the `slug` folder whatever the folder inside the zip is called.
* **Publish it as a full release.** Drafts and pre-releases are skipped, so a pre-release is a safe way to share a test build.
* **Raise `requires_wcpos`** in `catalog.json` when a release needs a newer WCPOS, so older sites aren't sent a version that won't start.

Sites see the new version once their list is refreshed: within the hour, or straight away with **Refresh**. Sites with **Auto-update** on install it in the background.

To test a catalog of your own before submitting, point a site at it with the `wcpos_extensions_catalog_url` filter.
