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.

    [keel_reviews] is off by default, and with it off neither 3 nor 4 happens.

Screenshots

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

Translate “KeelLayer Connector” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by 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.