Title: KeelLayer Connector
Author: havenswift-hosting
Published: <strong>November 12, 2026</strong>
Last modified: November 12, 2026

---

Search plugins

![](https://ps.w.org/keellayer-connector/assets/banner-772x250.png?rev=3798536)

![](https://ps.w.org/keellayer-connector/assets/icon-256x256.png?rev=3798536)

# KeelLayer Connector

 By [havenswift-hosting](https://profiles.wordpress.org/havenswift-hosting/)

[Download](https://downloads.wordpress.org/plugin/keellayer-connector.1.8.1.zip)

 * [Details](https://wordpress.org/plugins/keellayer-connector/#description)
 * [Reviews](https://wordpress.org/plugins/keellayer-connector/#reviews)
 *  [Installation](https://wordpress.org/plugins/keellayer-connector/#installation)
 * [Development](https://wordpress.org/plugins/keellayer-connector/#developers)

 [Support](https://wordpress.org/support/plugin/keellayer-connector/)

## Description

Most hosting companies sell from a WordPress site and bill from something
 else,
so the pricing page drifts away from what customers are actually charged. This plugin
reads your plans, prices and domain availability straight from your own Keel installation,
so it cannot.

Sixteen shortcodes, every one reading your own installation: pricing tables, a
 
price inline in a sentence, a full plan page, your product groups, an order button
carrying the plan and term the visitor chose, domain prices, a working domain search,
your network status, your announcements, your knowledgebase with its own search,
the promotions really running, a currency switcher, a comparison table, a contact
form that opens a real ticket, and your Trustpilot rating. All but two are blocks
as well.

It holds no key and stores no customer data. Keel’s storefront API is
 unauthenticated
by design: a price list is public, and a key shipped inside a downloadable plugin
is not a secret. The plugin is read only and can change nothing in Keel.

Three things stay off until you turn them on: the knowledgebase and
 announcements
at the Keel end, the Trustpilot rating here.

### External services

Everything below leaves the browser or your server. None of it carries
 anything
personal, and three of the four are off unless you turn them on.

 1. **Your own Keel installation**, at the address you enter in Settings then
     Keel.
    Read only, anonymous, server to server: your plan list, your domain prices, and
    whether one name is free. What is sent is the domain typed into the search box,
    and a request header naming this plugin, its version and this site’s own address,
    so that your Keel can tell which of your sites is asking. Nothing is sent to us
    or to any address but the one you entered.
 2. **A captcha provider, only if your Keel requires a solved challenge on
     domain 
    searches
    , and only on a page carrying a search: Google reCAPTCHA,
     hCaptcha or
    Cloudflare Turnstile, whichever you chose in Keel. Script URLs and policies are
    under “What exactly does a captcha load?” below.
 3. **Trustpilot’s widget**, only with `[keel_reviews mode="widget"]`. The
     browser
    loads https://widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js. Terms
    https://corporate.trustpilot.com/legal/for-reviewers/terms-of-use-for-consumers
    and privacy https://corporate.trustpilot.com/legal/for-reviewers/privacy-policy-
    end-user
 4. **Your public Trustpilot profile**, only with
     [keel_reviews mode=”cached”]. Your
    server reads the rating from the page you name and holds it six hours. Nothing 
    loads in the browser, no cookie is set, and the request names only this plugin 
    and its version, not your site. Same terms as above.
 5. [keel_reviews] is off by default, and with it off neither 3 nor 4 happens.

## Screenshots

[⌊Plans and prices from the real catalogue.⌉⌊Plans and prices from the real catalogue
.⌉[

Plans and prices from the real catalogue.

[⌊Domain prices per extension.⌉⌊Domain prices per extension.⌉[

Domain prices per extension.

[⌊Settings → Keel, showing the connection and health check.⌉⌊Settings → Keel, showing
the connection and health check.⌉[

Settings  Keel, showing the connection and health check.

## Blocks

This plugin provides 9 blocks.

 *   Keel network status Whether anything is broken right now, and what planned 
   work is coming, read from Keel.
 *   Keel knowledgebase Your help guides, read from Keel, with a page for each one
   under this page.
 *   Keel product groups Your catalogue's groups, each with its cheapest recurring
   price, for a menu or a landing page.
 *   Keel offers The discount codes that are really on, read from Keel so a banner
   cannot promise what the basket refuses.
 *   Keel announcements Your news, planned maintenance and incident notices, read
   from Keel.
 *   Keel domain search Lets a visitor check whether a domain name is free. Keel
   asks the registry; this does not speak WHOIS.
 *   Keel domain prices What each domain extension costs to register, transfer and
   renew, read from Keel.
 *   Keel plan One plan in full, including the choices and extras its order form
   offers, read from Keel.
 *   Keel pricing table Your live hosting plans and prices, read from Keel.

## Installation

Keel lives on a hostname of its own, beside this WordPress site:

 * `https://example.com` – your WordPress site
 * `https://clients.example.com` – Keel

 1. Install and activate the plugin.
 2. Go to **Settings  Keel**.
 3. Put in the address Keel is on, the one your customers use to sign in. No path. 
    Leave the Storefront box empty.
 4. The Connection section on that screen tells you straight away whether it worked,
    which storefront Keel answered for, whether a domain search will run, and the group
    slugs to paste into a shortcode.

## FAQ

### What do I put in `product` if my plans have no slugs?

The id, which Settings  Keel lists beside every plan. A plan converted from
 another
billing system often has no slug yet, and the storefront says so by sending `null`–
so the shortcode takes either, exactly as Keel’s own order form does, and a page
and the order form it links to therefore always resolve the same plan.

### Can Keel go in a subdirectory of my WordPress site?

No. Keel identifies a company by hostname, and the table it reads has no path
 in
it at all, so a path cannot say which company a request is about. Give Keel a hostname
of its own.

### What do I put in the Storefront box?

Nothing. The address identifies your storefront, and it is the one identifier
 you
cannot get wrong. The box is a compatibility route for an installation that does
not yet know the address you entered.

If you do fill it in with a name belonging to a different company from the
 address,
Keel refuses the request and the settings screen explains it, rather than showing
one brand’s prices and sending the buyer to another brand’s order form.

### My domain search says it is unavailable

Your Keel is asking for a solved challenge. That challenge is on for domain
 searches
whatever the per-form switch says, because the search is the one thing on a storefront
that can cost you money at a registrar.

This plugin draws the box for reCAPTCHA v2, hCaptcha and Turnstile. It cannot
 draw**
invisible reCAPTCHA v3**, which has no box. Settings  Keel says which one you are
on. Either pick one of the three on Keel’s captcha screen, or clear the captcha 
keys there and let Keel rely on its own cache and daily lookup ceiling.

### A price I just changed is still showing the old figure

Prices are cached for five minutes so a busy pricing page does not ask Keel on
 
every hit. It will catch up on its own, or press **Clear the cache** on the settings
screen.

### Keel is down. What do visitors see?

The last prices this site managed to read, for up to a week, rather than a
 blank
space or an error. The settings screen and a notice in your admin say that is what
is happening, for as long as it is happening.

Domain availability is never served from an old copy. A week-old “available”
 would
sell a name somebody else already registered, so a lookup that fails says it failed.

### Can visitors order without leaving my site?

No, and that is deliberate. Payment, tax and terms belong in one place. Each
 plan
links to your Keel order form.

### What exactly does a captcha load?

Only the provider your Keel is set to, and only on a page with a domain
 search.
Google reCAPTCHA is `https://www.google.com/recaptcha/api.js`, terms https://policies.
google.com/terms, privacy https://policies.google.com/privacy. hCaptcha is `https://
js.hcaptcha.com/1/api.js`, terms https://www.hcaptcha.com/terms, privacy https://
www.hcaptcha.com/privacy. Cloudflare Turnstile is https://challenges.cloudflare.
com/turnstile/v0/api.js, terms https://www.cloudflare.com/website-terms/, privacy
https://www.cloudflare.com/privacypolicy/. With no challenge required by your Keel,
none of them is loaded at all.

### How do I show a pricing table?

[keel_pricing group=”shared-hosting”] draws cards side by side.
 [keel_pricing group
=”shared-hosting” layout=”comparison”] puts the plans across the top and what each
includes down the side. Add featured=”advanced-hosting” to mark one. Both read the
same plans, so two pages cannot disagree.

Rows come from what each plan says it includes, entered in Keel as a label
 and 
a value. Use the same label across a group and the rows line up. Only “yes”, “no”,“
true”, “false”, “included” and “none” become a tick or a cross; anything else prints
as you typed it.

### Can I compare plans from different groups?

Yes: `[keel_compare plans="basic,advanced,business"]` compares exactly those,
 in
the order you name them. `[keel_compare groups="shared,reseller"]` compares the 
cheapest plan in each group.

One table shows one billing period, because a column priced in a different
 period
is a figure the eye compares and the small print does not correct. Name it with `
cycle="1:year"`, or leave it out and the period your named plans share is used. 
If they share none, the shortcode is left unexpanded on the page so the problem 
is visible, and an administrator is told why.

### Can a visitor see prices in their own currency?

[keel_currency_switcher] offers the currencies your installation really
 prices 
in, and the order form opens in the one they chose.

### Can somebody with no account reach support?

[keel_enquiry] opens a real ticket in a real department, with no account
 needed.

### Does an affiliate link still pay out?

Yes. A visitor arriving with `?ref=` or `?aftid=` has it carried through to
 your
Keel order form, including on the landing page itself. It is done in the browser
rather than in PHP, so a cached page cannot credit one visitor’s affiliate for everybody
else’s sales.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“KeelLayer Connector” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ havenswift-hosting ](https://profiles.wordpress.org/havenswift-hosting/)

[Translate “KeelLayer Connector” into your language.](https://translate.wordpress.org/projects/wp-plugins/keellayer-connector)

### Interested in development?

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

## Changelog

#### 1.8.1

 * **Security: the enquiry form now carries a nonce and checks it.**
    [keel_enquiry]
   could be submitted from another site, so a cross-site request was able to open
   a ticket in your support desk. A page carrying the form is now kept out of the
   page cache, so the nonce on it is always one this site will accept.
 * Query string, cookie and `$_SERVER` values are sanitized where they are
    read
   rather than where they are used.
 * Markup built inside the plugin is escaped where it is echoed.
 * The Trustpilot terms and privacy links in this readme pointed at addresses
    that
   redirect three times; they now name Trustpilot’s own current pages.
 * The settings-page confirmation after “check now” and “clear the cache” is
    shown
   only for a signed redirect from this plugin.

#### 1.8.0

 * **A visitor can now reach your support desk without an account.**
    [keel_enquiry]
   opens a real ticket in a department you have marked as public. Keel has had a
   public enquiry form since the website builder was written and it addressed the
   message by SECTION – a row in Keel’s own page tree – which a WordPress site has
   none of and never will, so this was unreachable from a marketing site. An internal
   queue is never offered and is refused even when named directly, and the ticket
   is attached to no customer account however the address matches.
 * **`[keel_currency_switcher]`** offers the currencies your installation
    really
   prices in, and carries the choice into the order form. No rate is applied to 
   anything: each figure is the one Keel holds for that currency, so a switched 
   price is the price the invoice will carry.
 * **`[keel_compare]`** draws a comparison table from the catalogue. The
    comparison
   page is the one page on a hosting site that is always out of date, because it
   is the one kept by hand.
 * **An affiliate link that lands on your marketing site now pays out.** The
    code
   is remembered and added to links pointing at Keel, sixty days, first touch winning,
   matching Keel’s own rule. Affiliatant’s parameter is read as well as Keel’s.
 * Documented `[keel_tld_pricing]` and `[keel_domain_search]` by name. Both
    have
   worked since 1.0.0 and the description talked about what they do without ever
   telling anybody what to type.

#### 1.7.0

 * **A plan row can be switched between monthly, annual and biennial, and
    nothing
   on the page is calculated to do it.
    Every figure the toggle
    writes was formatted
   here from a price Keel sent, so a toggled price is the same number the invoice
   will carry. A script that multiplied a monthly figure by twelve would produce
   a price nobody could reconcile.
 * **The toggle offers only the terms EVERY plan in the row sells.** Offering
    one
   that a single plan does not would leave that card showing its monthly price under
   an “Annually” heading, and a visitor reading four cards cannot tell which one
   failed to change. Fewer than two terms in common and there is no toggle, which
   is a group sold on one term rather than a fault.
 * `cycle=` still pins a row to one term and now suppresses the toggle with
    it,
   because the attribute is an instruction and a control that overrode it would 
   make the page disagree with its own heading.
 * The card opens on the term the toggle opens on. Without a `cycle=` the
    cheapest
   recurring price was shown, which on a group sold quarterly as well as annually
   put a quarterly figure under a pressed “Annually” button.
 * The control ships `hidden` and a theme’s script removes the attribute, so a
    
   reader with no JavaScript is shown one complete price and never a dead control.

Earlier versions are in `changelog.txt`, which ships with the plugin.

## Meta

 *  Version **1.8.1**
 *  Last updated **12 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [Billing](https://wordpress.org/plugins/tags/billing/)[domain search](https://wordpress.org/plugins/tags/domain-search/)
   [domains](https://wordpress.org/plugins/tags/domains/)[Hosting](https://wordpress.org/plugins/tags/hosting/)
   [web hosting](https://wordpress.org/plugins/tags/web-hosting/)
 *  [Advanced View](https://wordpress.org/plugins/keellayer-connector/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/keellayer-connector/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/keellayer-connector/reviews/)

## Contributors

 *   [ havenswift-hosting ](https://profiles.wordpress.org/havenswift-hosting/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/keellayer-connector/)