GoalPrevail Sales Pop – User Guide
Display recent WooCommerce activity or configurable manual entries as lightweight social-proof popups.
1. What this plugin does
GoalPrevail Sales Pop displays compact recent-order notifications in a selected corner of the storefront.
The plugin can retrieve recent paid WooCommerce orders automatically or build events from manually configured names, locations and products.
- Automatic WooCommerce source — retrieve up to 20 recent paid orders.
- Manual source — create rotating events from editable entry pools.
- Flexible message template — arrange the name, location and product placeholders.
- Four positions — choose any top or bottom corner.
- Timing controls — configure the first delay, interval and display duration.
- Content controls — choose whether to show a first name, relative time and dismiss button.
- Appearance settings — customize background, text, accent color and corner radius.
- Live preview — see changes while editing the settings.
- Reduced-motion support — respects the visitor’s browser preference.
- HPOS compatibility — uses WooCommerce order APIs instead of direct database queries.
WooCommerce is required for installation and supplies all events when the Automatic source is selected.
2. Requirements and installation
2.1 Requirements
- WordPress 6.0 or newer
- PHP 7.4 or newer
- WooCommerce installed and active
- Administrator access
- A modern browser with JavaScript enabled
2.2 Installation
- Make sure WooCommerce is installed and active.
- Upload the
goalprevail-sales-popfolder to/wp-content/plugins/, or use Plugins → Add New → Upload Plugin. - Activate GoalPrevail Sales Pop.
- Open GoalPrevail Plugins → Sales Pop.
- Choose the data source and configure the popup.
- Enable Sales Pop and click Save settings.
- Open the storefront in a private or incognito window to test the result.
2.3 Default configuration
New installations begin with the following configuration:
- Sales Pop disabled
- Automatic — WooCommerce paid orders selected
- Bottom-left position
- First popup after 4 seconds
- New popup every 7–10 seconds
- Each popup visible for 5 seconds
- Continuous cycling enabled
- Template:
{name} in {location} ordered {product} - Customer first name hidden
- Relative time enabled
- Dismiss button enabled
- White background, dark text and red accent
- 12-pixel corner radius
3. Where to configure the plugin
All settings are available under:
GoalPrevail Plugins → Sales Pop
The direct administration URL is:
admin.php?page=goalprevail-sales-pop
The settings screen contains three tabs:
- General — enable the plugin, choose a source, select a position and configure timing.
- Content — edit the message, visibility options and manual entry pools.
- Appearance — customize popup colors and corner radius.
A live preview appears in the settings sidebar and refreshes while fields are edited.
Settings are saved through the standard WordPress Settings API. Click Save settings after making changes.
4. Quick-start configuration
4.1 Automatic WooCommerce setup
- Open the General tab.
- Keep Automatic — WooCommerce paid orders selected.
- Choose the popup position and timing.
- Open the Content tab.
- Edit the message template if required.
- Choose whether customer first names, relative time and the dismiss button should appear.
- Open Appearance and choose the popup colors.
- Return to General and enable Enable Sales Pop.
- Click Save settings.
- Test the storefront in a private browser window.
Automatic mode loads no popup assets when the store has no orders in a paid WooCommerce status.
4.2 Manual setup
- Select Manual entries under Data source.
- Open the Content tab.
- Enter one name, location and product per line in the corresponding pools.
- Customize the message template and relative-time range.
- Enable Sales Pop and save the settings.
5. Choosing a data source
| Source | Description |
|---|---|
| Automatic — WooCommerce paid orders | Uses up to 20 recent orders whose status WooCommerce considers paid. |
| Manual entries | Creates events in the browser from the configured name, location and product pools. |
5.1 Automatic WooCommerce source
The automatic source queries WooCommerce through wc_get_orders(). It does not use direct SQL or assume that orders are stored as WordPress posts.
For each qualifying order, the plugin uses:
- The first purchased line item’s product name
- The billing country
- The actual payment time, or order creation time when a payment time is unavailable
- The billing first name only when the first-name setting is enabled
WooCommerce normally treats Processing and Completed orders as paid. Extensions may adjust the paid-status list through WooCommerce’s own filters.
The plugin skips an order when it has no usable line item, product name or date.
5.2 Manual source
The manual source selects one random value from each configured pool to compose an event.
If a pool is empty, the plugin uses its built-in sample list. Duplicate lines and blank lines are removed when settings are saved.
The manual time range controls the random “time ago” value. It does not affect timestamps pulled from WooCommerce.
6. Message and content settings
6.1 Message template
The default message is:
{name} in {location} ordered {product}
The following placeholders are supported:
| Placeholder | Automatic source | Manual source |
|---|---|---|
{name} |
Billing first name when enabled; otherwise “Someone”. | A value from the Names pool when enabled; otherwise “Someone”. |
{location} |
Billing country or “an undisclosed location” when unavailable. | A value from the Locations pool. |
{product} |
The first purchased line item’s product name. | A value from the Products pool. |
Placeholders can be reordered or repeated. Text outside the placeholders is displayed as entered.
6.2 Show the customer’s billing first name
This setting is disabled by default. When disabled, {name} becomes “Someone”.
When Automatic is selected and the setting is enabled, the billing first name is included in the front-end event data.
6.3 Relative time
Enable Show a “x minutes ago” line to display how long ago an event occurred.
- Automatic events use the real order timestamp.
- Manual events use a random value between the configured minimum and maximum.
- Longer periods are automatically displayed in hours or days.
6.4 Dismiss button
Enable Show a dismiss (×) button to let visitors hide the current popup.
When continuous cycling is enabled, dismissing one popup does not prevent later events from appearing.
7. Manual data pools
Manual mode provides three newline-separated fields:
- Names
- Locations
- Products
Enter one value per line:
Emma
Liam
Olivia
Texas
London, UK
Toronto, CA
the Starter Bundle
a Pro License
the Deluxe Kit
When the popup is shown, one value is selected independently from each pool. The plugin attempts to avoid immediately repeating the same full combination.
- Blank lines are removed.
- Duplicate lines are removed.
- HTML is stripped when settings are saved.
- An empty field falls back to its built-in sample pool.
8. Position and timing
8.1 Position
The popup can appear in any of the following corners:
- Bottom left
- Bottom right
- Top left
- Top right
8.2 Timing controls
| Setting | Allowed range | Default | Description |
|---|---|---|---|
| First popup after | 0–120 seconds | 4 seconds | Delay before the first event appears. |
| Every — min | 1–600 seconds | 7 seconds | Minimum delay before the next event. |
| Every — max | 1–600 seconds | 10 seconds | Maximum delay before the next event. |
| Visible for | 1–60 seconds | 5 seconds | How long each event remains visible. |
| Manual time minimum | 0–1,440 minutes | 2 minutes | Lowest random age used by manual events. |
| Manual time maximum | 0–1,440 minutes | 40 minutes | Highest random age used by manual events. |
If a maximum value is saved below its matching minimum, the plugin raises the maximum to match the minimum.
8.3 Keep cycling
When enabled, a new event is scheduled after each popup appears. When disabled, the plugin displays one event after the initial delay and stops.
The cycle pauses while the browser tab is hidden. When the visitor returns, the next event is scheduled using a fresh random interval.
9. Appearance and live preview
9.1 Appearance controls
| Setting | Default | Description |
|---|---|---|
| Background | #ffffff |
Popup card background color. |
| Text | #1d2327 |
Main message color. |
| Accent | #e21e26 |
Color used by the popup icon. |
| Corner radius | 12 pixels | Card rounding from 0 to 40 pixels. |
9.2 Live preview
The settings sidebar reuses the same card builder as the storefront. It updates when the message, source, data pools, position, visibility controls or appearance values change.
The sample event refreshes approximately every four seconds.
The preview is illustrative. Automatic storefront events are taken from qualifying WooCommerce orders after the settings are saved.
10. WooCommerce order handling
10.1 Paid-order query
The plugin requests a maximum of 20 orders with the following behavior:
- Only statuses returned by
wc_get_is_paid_statuses() - Newest orders first
- WooCommerce order objects returned through
wc_get_orders() - No direct query against
wp_posts, post meta or HPOS tables
10.2 Event cache
Automatic events are cached for five minutes. Separate caches are used depending on whether first names are enabled.
The cache is cleared when WooCommerce reports:
- A new order
- An updated order
- An order-status change
This lets new paid orders become available without waiting for the full cache period.
10.3 No qualifying events
If Automatic is selected and no qualifying order events exist, the plugin does not enqueue its front-end stylesheet or script.
11. Front-end behavior and accessibility
- One fixed container is added to the selected corner.
- Only one event card is displayed at a time.
- Dynamic text is escaped before being inserted into the card.
- The card uses a polite live region so assistive technology can announce updates.
- The dismiss control has an accessible label.
- Animations are reduced when the browser reports
prefers-reduced-motion: reduce. - The popup width adapts to narrow screens.
- The cycle pauses when the document becomes hidden.
The front-end script creates the popup after the document is ready and does not require jQuery.
12. Performance and cache compatibility
- Assets load only when Sales Pop is enabled.
- Automatic mode loads no assets when no qualifying events exist.
- The WooCommerce query is limited to 20 orders.
- Automatic event results are cached for five minutes.
- No repeated AJAX request is made while the visitor remains on the page.
- No front-end request is sent to an external service.
- The popup is assembled locally in the browser.
12.1 Full-page caching
The event data is included in the generated page. A full-page cache can therefore continue serving the same event set until that cached page expires or is purged.
If rapid event turnover is important, configure the page cache to use an appropriate lifetime or purge strategy.
The plugin’s five-minute transient cache and a separate full-page cache are independent. Clearing one does not necessarily clear the other.
13. Privacy and security
13.1 Automatic event fields
Automatic event data can include:
- Billing first name, only when explicitly enabled
- Billing country
- First purchased product name
- Payment or creation timestamp
The plugin does not send the following order fields to the browser:
- Surname
- Email address
- Phone number
- Street address
- Postcode
- Order number or order ID
Store administrators are responsible for selecting settings appropriate for their store, customers and privacy obligations.
13.2 Administrative security
- The settings page requires the
manage_optionscapability. - Settings are saved through the WordPress Settings API with nonce protection.
- Submitted values are sanitized and restricted to recognized choices and ranges.
- Rendered administration output is escaped.
- The plugin uses WooCommerce CRUD and query APIs.
- No custom database tables or executable remote code are used.
13.3 WordPress.org administration request
When the shared GoalPrevail Plugins dashboard is opened, the plugin may query the official WordPress.org plugin API to list other plugins published by GoalPrevail.
- The request occurs only in the WordPress administration area.
- It is not made from customer-facing pages.
- The request includes the public author query and requested catalog fields.
- WordPress includes the WordPress version and site home URL in its standard HTTP user-agent.
- A successful response is cached for up to 24 hours.
- An empty or unsuccessful result may be cached for up to two hours.
- The dashboard may load returned plugin icons from WordPress.org’s plugin asset CDN.
14. Developer information
14.1 Front-end assets
| Handle or object | Purpose |
|---|---|
gpsp-popup |
Handle used for the front-end stylesheet and JavaScript. |
window.gpspData |
Per-request settings and event data supplied to the front-end engine. |
window.gpspPopup |
Exposes the event sampler, card builder and CSS-variable helper used by the settings preview. |
14.2 PHP filters
| Filter | Purpose |
|---|---|
gpsp_should_display |
Return false to suppress the popup on the current request. |
gpsp_runtime_data |
Modify the complete data object before it is passed to the front-end script. |
gpsp_woocommerce_events |
Modify the privacy-conscious event array built from paid WooCommerce orders. |
gpsp_plugins |
Register plugins with the shared GoalPrevail administration dashboard. |
gpsp_wporg_author |
Change the WordPress.org author lookup or return an empty string to disable it. |
14.3 Conditional display example
add_filter( 'gpsp_should_display', function ( $show, $settings ) {
if ( is_cart() || is_checkout() ) {
return false;
}
return $show;
}, 10, 2 );
14.4 Limit automatic events example
add_filter( 'gpsp_woocommerce_events', function ( $events, $settings ) {
return array_slice( $events, 0, 10 );
}, 10, 2 );
14.5 Runtime configuration values
| Key | Description |
|---|---|
position | Selected popup corner. |
template | Message template containing supported placeholders. |
initialDelay | Delay before the first popup, in seconds. |
minInterval | Minimum delay between popup events, in seconds. |
maxInterval | Maximum delay between popup events, in seconds. |
displayTime | Visible duration, in seconds. |
loop | Whether events continue cycling. |
showName | Whether a supplied first name can be displayed. |
showTimeAgo | Whether relative time is displayed. |
showClose | Whether the dismiss control is displayed. |
timeMin | Minimum random age used by manual events. |
timeMax | Maximum random age used by manual events. |
names | Manual name pool. |
locations | Manual location pool. |
products | Manual product pool. |
events | Automatic event array when WooCommerce is selected. |
style | Background, text, accent and radius values. |
i18n | Translated front-end strings. |
14.6 Stored data
| Item | Type | Purpose |
|---|---|---|
gpsp_settings |
WordPress option | Stores the complete plugin configuration. |
gpsp_wc_events_anonymous |
WordPress transient | Caches automatic events without customer first names. |
gpsp_wc_events_named |
WordPress transient | Caches automatic events when first names are enabled. |
gpsp_family_* |
WordPress transient | Caches the GoalPrevail WordPress.org plugin catalog. |
No custom database tables, scheduled cron jobs, cookies or browser-storage values are created.
14.7 Shortcodes
The plugin does not provide a shortcode. The popup is added automatically when the plugin is enabled and events are available.
15. Troubleshooting
- No popup appears: Confirm that Enable Sales Pop is switched on and the settings have been saved.
- Automatic mode shows nothing: Confirm that WooCommerce is active and at least one order has a status WooCommerce considers paid.
- A new order is missing: Confirm that the order has reached a paid status, then clear any full-page or CDN cache.
- The wrong product appears: The plugin uses the first line item from each qualifying order.
- The name says Someone: Enable Show the customer’s billing first name and save the settings.
- The location is broad: Automatic mode intentionally uses the billing country rather than a street address, postcode or precise location.
- Manual values are not used: Confirm that Manual entries is selected and that each value is on a separate line.
- Sample manual values appear: An empty manual field falls back to its built-in sample pool.
- The timing seems different each time: The next event is scheduled randomly between the minimum and maximum interval.
- The popup appears only once: Enable Keep cycling.
- The popup returns after dismissal: Dismissal hides the current card; disable Keep cycling if only one event should appear.
- Changes do not appear: Clear the WordPress cache, server cache, CDN cache and browser cache.
- Colors revert after saving: Enter a complete six-digit hexadecimal color.
- The popup overlaps another widget: Choose another corner or adjust the other widget’s placement.
- The animation is reduced: The visitor’s browser may have reduced-motion preferences enabled.
- The cycle pauses: Popup scheduling intentionally pauses while the browser tab is hidden.
16. Uninstalling the plugin
- Deactivate the plugin to stop storefront popups.
- Delete it from the WordPress Plugins page when it is no longer required.
- The uninstall process removes the
gpsp_settingsoption. - Both WooCommerce event transients are removed.
- The cached GoalPrevail WordPress.org catalog is removed.
On WordPress Multisite, uninstall cleanup is performed for every site on which the plugin may have stored settings or caches.
Deleting the plugin permanently removes its saved configuration. Record any manual entries, message text or appearance values you may want to recreate.
17. Support
For questions, support or feature requests, contact [email protected] or visit goalprevail.com.