Skip to content

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.

Open Shop settings > Storefront.

FieldMeaning
Storefront enabledSwitch on to publish the catalog. The first time, the panel creates the ID and the secret.
Storefront IDPublic. It is part of the catalog URL https://your-panel/api/storefront/catalog?id=....
SecretFor the sign-up form in the WordPress plugin. It is shown once, in a notice after you create it (copy it then).
Allowed browser originsOne 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:

FieldMeaning
port_speed_mbitThe product’s Port speed in Mbit/s. 0 = no limit set (and always 0 for services).
backup_limitBackups per server. 0 for none and for services.
snapshot_limitSnapshots per server. 0 for none and for services.
tagline, badge, cpu_model, ddos_text, backup_storage, backup_retention, slaThe website facts as text, null when empty.
ipv4, ipv6Included 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_typeshared, dedicated or null.
ddostrue when Show DDoS protection is on.
featuresThe Feature bullets, a list of strings (empty list when none).
setup_fee_cents, setup_fee_formattedThe one-time setup fee: 0 and null when there is none, else for example 500 and “5.00 EUR”.
periods[].savings_percentHow 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 } ]

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.

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).

  1. In WordPress, upload the zip under Plugins > Add New > Upload Plugin and activate it.
  2. Open Settings > NexoVirt in WordPress and enter the Panel URL (https), the Storefront ID and, for the sign-up form, the Storefront secret.
  3. Click Test connection. It says “Connected: the catalog was read from your panel.” when it works.
  4. Add a shortcode or the block to a page.
SettingMeaning
Panel URL, Storefront ID, Storefront secretAs above. The secret is stored write-only (“Stored. Leave empty to keep it.”).
OrderingSend 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 cardsTick 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 proxiesOnly 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.
UseWhat 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 plansThe 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 catalogThe OS catalog in the block editor.
Block NexoVirt categoriesThe category cards in the block editor. The plans block has a Category field.

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"].

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.

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).

NexoVirt is developed and designed by Nucez Software, your partner for custom software and web design.