Storefront and WordPress plugin
The storefront shows your shop products and add-ons on your own website, always with the current prices. Visitors order and pay in the customer portal of your panel (or sign up on your site first). Payment and server setup always run in NexoVirt, and no payment data ever touches your website.
Switch it on
Section titled “Switch it on”Open Shop settings > Storefront.
| Field | Meaning |
|---|---|
| Storefront enabled | Switch on to publish the catalog. The first time, the panel creates the ID and the secret. |
| Storefront ID | Public. It is part of the catalog URL https://your-panel/api/storefront/catalog?id=.... |
| Secret | For the sign-up form in the WordPress plugin. It is shown once, in a notice after you create it (copy it then). |
| Allowed browser origins | One address per line, for example https://www.example.com. Only needed when a browser script reads the catalog. The WordPress plugin reads it from the server. |
Click Save storefront. Regenerate ID and secret (or Create secret) makes a new pair after a confirmation. Websites using the old pair stop working until you update them.
The catalog needs no sign-in. It lists the products you sell with their billing periods, locations and category, the visible categories, the add-ons, the operating systems customers can order, the sign-up fields and your terms link, and nothing internal. It is cached for a minute and limited per address. With the storefront off, the URL answers “not found”.
Each server product in plans has disks: every disk, main disk first, as { "size_gb": 50, "class": "NVMe" }
(class is NVMe, SSD, HDD or null for any storage, see Disks); service products have
an empty list. An extra of the kind Extra disk (NVMe, SSD, HDD) in extras carries disk_type (nvme, ssd
or hdd) and disk_type_label (NVMe, SSD or HDD).
Names in the catalog are the public ones: name of a product or category is its Name on the website (see
Products and Categories), or the name when that is empty. The
internal name is never sent when a website name is set. description is the Description on the website.
Each product in plans also carries:
| Field | Meaning |
|---|---|
port_speed_mbit | The product’s Port speed in Mbit/s. 0 = no limit set (and always 0 for services). |
backup_limit | Backups per server. 0 for none and for services. |
snapshot_limit | Snapshots per server. 0 for none and for services. |
tagline, badge, cpu_model, ddos_text, backup_storage, backup_retention, sla | The website facts as text, null when empty. |
ipv4, ipv6 | Included IPv4 addresses (a number) and Included IPv6 (text), null when empty. ips_text is both as one line, for example “1 IPv4, /64 IPv6” (empty string when neither is set). |
core_type | shared, dedicated or null. |
ddos | true when Show DDoS protection is on. |
features | The Feature bullets, a list of strings (empty list when none). |
setup_fee_cents, setup_fee_formatted | The one-time setup fee: 0 and null when there is none, else for example 500 and “5.00 EUR”. |
periods[].savings_percent | How much cheaper per day a billing period is than the product’s main period, in whole percent (0 = no saving). |
Products are listed in card order: their Sort order, then price. A product with a setup fee has billing
["prepaid"], as such orders are prepaid only.
Each add-on in extras has one_time: true for an add-on charged once, false for one charged with every billing
period.
"plans": [ { "id": 1, "name": "Cloud S", "runtime_days": 30, "price_cents": 500, "port_speed_mbit": 1000, "backup_limit": 3, "snapshot_limit": 2, "periods": [ { "plan_id": 7, "label": "Yearly", "runtime_days": 365, "price_cents": 5000, "savings_percent": 17 } ] } ],"extras": [ { "id": 3, "kind": "ipv4", "name": "Extra IPv4", "price_cents": 200, "one_time": false } ]Operating systems in the catalog
Section titled “Operating systems in the catalog”The os list holds the OS template groups customers can order (QEMU templates), and the container template groups
when you sell container products. Each entry has an opaque key, the group name, its logo (image, a public URL on
your panel, plus image_hash), a windows flag, the group’s minimum resources (min) and the template names as
versions. Groups without a template are left out. Each product in plans lists the os keys orderable on it: a
group only when the product allows at least one of its templates (see Images), and for
virtual machines only groups whose minimum resources the product meets. network is public or internal
(Internal network only).
"os": [ { "key": "q-3f9a0c1b2d4e", "type": "qemu", "name": "Debian", "image": "https://your-panel/api/storefront/os-image/q-3f9a0c1b2d4e?id=sf_...&v=8c1d2e3f4a5b", "image_hash": "8c1d2e3f4a5b...", "windows": false, "min": { "cores": 0, "memory_mb": 0, "disk_gb": 0 }, "versions": [ { "key": "a1b2c3d4e5f6", "name": "Debian 12", "windows": false } ] }],"plans": [ { "id": 1, "name": "Small", "os": ["q-3f9a0c1b2d4e"] } ]The logo URL is cached for a week; a new logo gets a new URL.
The WordPress plugin
Section titled “The WordPress plugin”On the same page, Download WordPress plugin gives you nexovirt-storefront.zip (plugin version 1.7.0, needs WordPress
6.0 and PHP 8.0). The pricing cards list vCPU, RAM, every disk with its type (NVMe, SSD, HDD), the port speed, traffic,
backups, snapshots, “Internal network (no public IP)” for internal products, the billing periods (each with its own
order link and its saving, for example “(save 17 %)”), the locations and the stock. Free products show Free.
Since 1.7.0 they also show the website facts (tagline, highlight badge, included IP
addresses, CPU model and core type, DDoS protection, backup storage and retention, SLA / uptime, feature bullets) and a
one-time setup fee (”+ 5.00 EUR setup”), and the cards follow the panel’s card order (Sort order, then price).
Port speed, backups, snapshots, savings and the website facts need a panel that sends them (the release after 1.3.54).
- In WordPress, upload the zip under Plugins > Add New > Upload Plugin and activate it.
- Open Settings > NexoVirt in WordPress and enter the Panel URL (https), the Storefront ID and, for the sign-up form, the Storefront secret.
- Click Test connection. It says “Connected: the catalog was read from your panel.” when it works.
- Add a shortcode or the block to a page.
Settings in WordPress
Section titled “Settings in WordPress”| Setting | Meaning |
|---|---|
| Panel URL, Storefront ID, Storefront secret | As above. The secret is stored write-only (“Stored. Leave empty to keep it.”). |
| Ordering | Send visitors to the NexoVirt portal, or Sign-up form on this site (embedded sign-up). |
| Cache (minutes) | How long the catalog is kept. If the panel cannot be reached, the last good copy is shown, or “Plans are currently unavailable.” |
| Hide on pricing cards | Tick the details to leave out of the pricing cards and the comparison table by default: Server type, vCPU, RAM, Disks, Port speed, Traffic, Internal network note, Backups, Snapshots, Description, Billing periods, Locations, Payment note, Stock, Tagline, Highlight badge, Included IP addresses, CPU model and core type, DDoS protection, Backup storage and retention, SLA / uptime, Feature bullets and Setup fee. A shortcode’s hide attribute replaces this list. |
| Client IP header and Trusted proxies | Only when your WordPress site sits behind a proxy such as Cloudflare. Enter its address ranges (one per line) and pick the header, so the panel’s per-visitor limits see the visitor’s address and not the proxy’s. |
Shortcodes and block
Section titled “Shortcodes and block”| Use | What it shows |
|---|---|
[nexovirt_plans] | Pricing cards. Options: columns="3" (1 to 4), plans="1,2" (product ids to show), category="cloud-servers" (only the products of that category, by its URL name), button="Order" (button text) and ref="spring" (a tag stored with the checkout) and hide="port,backups" (details to leave out, see below). |
[nexovirt_compare] | The products side by side in a table, with a row for type, CPU, memory, storage, port speed, traffic, network, backups and snapshots (only rows some product has), the price and an order button. Options: plans="1,2", category="cloud", hide="snapshots", button="Order" and ref. |
[nexovirt_addons] | The add-ons (extra IPs, disks, backup slots and so on) with their price, “per billing period” or “one-time”. “No add-ons are available.” when there are none. |
[nexovirt_categories] | One card per visible category with products: picture, name, description, number of products and the lowest price. Options: columns="3" (1 to 4), url="/servers/{slug}/" (where a card links to, {slug} is the category’s URL name; without it the cards have no link) and button="View plans". |
[nexovirt_plans show_os="yes"] | Adds a row “Available systems” with the small logos of the systems orderable on each product (the name shows on hover). Off by default. |
[nexovirt_os] | The OS catalog: a grid with logo, name and versions of every system you offer, and a Windows badge. Options: plan="1" (only the systems orderable on that product), columns="4" (1 to 6) and show_versions="yes". More than four versions fold into a “6 versions” list. |
[nexovirt_signup plan="1"] | The sign-up form for one product (embedded mode). |
| Block NexoVirt plans | The same cards in the block editor (switch Show available systems, field Hide details: a comma list like port,backups, empty = the plugin setting). |
| Block NexoVirt OS catalog | The OS catalog in the block editor. |
| Block NexoVirt categories | The category cards in the block editor. The plans block has a Category field. |
Hiding details
Section titled “Hiding details”hide takes a comma list of card parts: type, cpu, ram, disks, port, traffic, network, backups,
snapshots, description, periods, locations, billing, stock, tagline, badge, ips, cpu_model,
ddos, backup_details, sla, features and setup. Unknown names are ignored. Without hide,
the shortcode uses the Hide on pricing cards setting. Example: [nexovirt_plans hide="snapshots,stock"].
OS logos stay on your site
Section titled “OS logos stay on your site”The plugin downloads the OS logos (and the category pictures) once into wp-content/uploads/nexovirt-storefront/os/ and shows them from there, so a
visitor’s browser never contacts your panel. A logo is fetched again only when it changes on the panel. Only PNG, JPEG,
WebP and SVG files from your panel are accepted, and SVG files are cleaned of scripts and outside links. Without a logo
the plugin shows a neutral glyph. Deleting the plugin removes the logos.
How ordering works
Section titled “How ordering works”The Order button on a card opens order/{product} on your panel. A signed-in customer lands on the order page. Anyone
else goes to the sign-up page (or the login page) and comes back to the order after confirming the email address. A
?ref= value on the link is stored with the checkout.
With Sign-up form on this site, the plugin posts the form to your panel with the storefront secret, together with the visitor’s address. The panel then follows the normal customer sign-up rules (email confirmation by link, profile fields, terms and, if you use it, Cloudflare Turnstile). Add your WordPress hostname to the Turnstile widget’s allowed hostnames. A wrong secret is refused and counted by the API jail. Sign-ups are limited per visitor address and, in total, per storefront (300 per hour).
Next steps
Section titled “Next steps”- Users & portal for the sign-up settings.
- Legal texts and order consent for the terms link the catalog hands out.
NexoVirt is developed and designed by Nucez Software, your partner for custom software and web design.