Zum Inhalt springen

How it works

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

This page follows a popup from the order it represents to the moment it slides off screen, so you know exactly what each one is built from and what it never contains.

Proof reduces a single recent order to a four-part line:

  • The buyer’s billing first name, or your fallback word when the order has none.
  • The billing city, included only when the order has one.
  • The name of the first purchasable product in the order.
  • A relative time, such as “2 hours ago”.

The result reads like “Alex from Berlin bought Merino Hoodie 2 hours ago”. Nothing is invented, every popup maps to a real order.

The feed is built from WooCommerce orders that meet all of these conditions:

  • Status completed or processing (wc-completed, wc-processing).
  • Created within the last 30 days.
  • Type shop_order, ordered newest first, capped at the 40 most recent.
  • Having at least one product line item, an order with no usable product is skipped.

These limits are fixed in the order-feed service, not settings. An order with no billing city still appears; the city is simply omitted from the line.

The feed each browser receives is deliberately minimal: per item, only name, city, product, time, and ts (the order’s unix timestamp). Surnames, emails, full addresses, phone numbers and order numbers are never placed in it, so they never reach the page. This is enforced on the server when each order is mapped, there is no setting that can widen it.

The order query is expensive to run on every page view, so Proof caches the built feed in the proof_feed_cache transient for five minutes. The relative-time strings are recomputed from each item’s ts on every request, so a cached feed never shows stale “ago” text. The cache is dropped automatically when:

  • a new order is created (woocommerce_new_order),
  • an order’s status changes (woocommerce_order_status_changed), or
  • you save the settings page.

There is no cron job to configure.

When Proof has at least one safe notification and is enabled, it enqueues one small CSS file and one vanilla-JavaScript file (defer, in the footer, no jQuery). In the browser:

  1. After the initial delay, the first popup slides in from your chosen corner.
  2. It stays for the display time, then slides away.
  3. After the interval, the next item in the rotation appears, cycling through the feed in order.
  4. Clicking the dismiss button stops the cycle for the rest of that page view; reloading resumes it.

If the feed is empty, the script does nothing, Proof loads no markup rather than an empty widget.

  • The popup is an aside with role="status" and aria-live="polite", so screen readers announce each notification without focus being stolen.
  • The dismiss button is a real <button> with an accessible label and a visible :focus-visible ring; focus is never trapped.
  • The decorative check-mark seal is aria-hidden.
  • Animation is dropped for visitors with prefers-reduced-motion: reduce, and the popup is dark-mode aware via prefers-color-scheme: dark.

The popup is styled from --proof-* CSS custom properties (background, foreground, accent, border, shadow, radius, gap), each falling back to a theme variable before a literal value. Recolour it from your theme stylesheet, for example:

.proof-popup {
--proof-accent: #6d28d9;
--proof-radius: 10px;
}

When Enable Proof is on, the popup loads on the storefront front end and never inside wp-admin. There is no per-page scope setting, placement on screen is controlled only by the Screen corner choice. To extend the rotation (for example, with content from an add-on), use the proof/notifications filter documented in Configuration.