Setup & Installation
1. How do I set up my NOWPayments API key?
WP Admin → Anonymous Sales → Settings → NOWPayments section. Paste your API key and Webhook secret, then click Save settings. The key is encrypted using AES-256-CBC before being stored.
2. How do I configure the webhook URL?
After saving the settings, a Universal endpoint URL field will appear. Copy that URL and paste it as the Callback URL (IPN) in your nowpayments.io account settings.
3. Does the plugin work on WordPress Multisite?
The plugin has not been tested on Multisite. Installing it on a Multisite network may require manual per-site activation and additional database table configuration.
4. What are the server requirements (PHP, MySQL)?
PHP 7.4+, MySQL 5.7+ or MariaDB 10.3+, WordPress 5.8+. The server must have the WordPress REST API and WP Cron (or an external cron) enabled.
5. Do I need a NOWPayments account before installing the plugin?
Yes. You need an active NOWPayments account to obtain an API key and configure the webhook. Registration is available for free at nowpayments.io.
Shortcodes & Integration
6. How do I embed the buy button on a page?
Insert the shortcode on any page or post:
[mfpro_anonymoussales_buy offer_id="1"]
You can find the offer ID in WP Admin → Anonymous Sales → Offers. Optional attributes: label, title, customCSS.
7. How do I embed the order status panel?
Insert the shortcode on any page:
[mfpro_anonymoussales_status]
The customer enters the order number and secret token to check the status and download the PDF. Optional attributes: title, button_label, download_label, customCSS.
8. How do I enable purchases from an external website (outside WordPress)?
In WP Admin → Offers, copy the External JS embed column for the desired offer. Paste the <script> tag on the external page, then open the dialog:
window.MFPROExternalOrder && window.MFPROExternalOrder.open();
// or bind it to your own button:
window.MFPROExternalOrder && window.MFPROExternalOrder.bind('#buttonId');
9. Can I use the plugin entirely outside of WordPress — e.g. on a plain HTML page?
The purchase widget can be embedded on any HTML page using the external script. However, all order, payment, and PDF generation logic runs on the WordPress side — WordPress is absolutely required as the backend.
10. Can I place multiple different offers on the same page?
Yes. Add multiple shortcodes with different offer_id values on the same page — each works independently as a separate purchase dialog.
11. What does the customCSS="true" attribute mean and how do I use it?
Adding customCSS="true" to the shortcode disables all default plugin styles and renames the CSS classes to anonymousSP-buy-* / anonymousSP-status-* prefixed names. The full list of classes is available in WP Admin → Settings (the Developer: Custom CSS mode section).
Payments & Cryptocurrencies
12. Which cryptocurrencies are supported?
The list of available cryptocurrencies comes directly from your NOWPayments account and is loaded dynamically from their API. Available currencies may vary depending on your region and account settings.
13. Is the exchange rate locked at the time of purchase?
Yes. The plugin uses the is_fixed_rate: true parameter — the exchange rate is locked by NOWPayments at the moment the order is created.
14. What happens if the customer pays the wrong amount (too little / too much)?
If the customer pays too little, the order receives a partially_paid status — access to the PDF is withheld until the full amount is paid or the administrator manually changes the status. Overpayments are handled on the NOWPayments side.
15. How long does the customer have to pay the invoice?
The invoice expiry time is determined by NOWPayments (defaulting to several dozen minutes). After expiry, the customer must place a new order.
16. What does the partially_paid status mean?
The customer sent a payment, but the amount that arrived at the wallet is lower than required. The download link is not activated until the full amount is reached.
17. Can I accept multiple currencies at the same time?
Yes. The customer sees the list of cryptocurrencies available for a given offer (fetched from NOWPayments) and chooses which one to pay with.
Orders & Delivery
18. What does the full purchase flow look like — from clicking “Buy” to receiving the file?
- The customer clicks the Buy button → a dialog opens with the offer description and file list.
- The customer selects a cryptocurrency and clicks Buy — the backend creates an order and returns: the order number, a secret receipt token, and a link to the NOWPayments invoice.
- The customer saves the order number and token (shown only once), then pays the invoice from their crypto wallet.
- The frontend automatically polls the status — once payment is confirmed, a Download PDF button appears.
- A PDF containing access details for the purchased files is generated on demand and downloaded by the customer.
19. How does the customer download the purchased file after payment?
Once the paid status is detected in the purchase dialog (or in the status shortcode form), a Download PDF button appears. Clicking it generates an on-demand PDF file containing access credentials for the purchased resources.
20. How long is the download link active?
The PDF download link does not expire. The customer can download the PDF at any time by providing the order number and secret token in the [mfpro_anonymoussales_status] shortcode. The PDF is generated on demand with each download.
21. What happens if the customer closes the tab before completing the payment?
The plugin displays a warning before the tab is closed when an active payment is in progress. If the customer closes the tab anyway — they can return to the page with the status shortcode and enter the order number and token to continue and download the PDF after paying.
22. How can a customer check their order status if they didn’t note down the order number?
There is no way to recover the order number without having saved it — orders are anonymous and not linked to any account. Customers should be informed to save their order number and token immediately after placing the order. The only alternative is to contact the shop administrator.
23. Are orders linked to WordPress user accounts?
No. Orders are completely anonymous — they require no registration or login. Access to an order is based solely on the order number and the secret token.
Admin Panel
24. Where in WP Admin can I see the list of orders?
WP Admin → Anonymous Sales → Orders.
25. How do I manually change an order status?
WP Admin → Anonymous Sales → Orders → click the edit icon for the order and change its status. Useful for example in cases of partially_paid or when a NOWPayments webhook did not arrive.
26. How do I add a new offer?
WP Admin → Anonymous Sales → Offers → Add offer form. Fill in the name, price (in USD), and optional description. After saving, you can add files (resources) to the offer.
27. How does promo code management work?
Promo codes can be created and viewed in WP Admin → Anonymous Sales → Promo Codes. Note: at this stage codes are recorded in the database, but are not automatically applied when placing an order — the feature is still being implemented.
Security & Privacy
28. Why is the plugin called “Anonymous Sales” — what does that mean in practice?
Customers can buy without creating an account, logging in, or providing personal data. Paying with cryptocurrency additionally ensures transaction privacy.
29. Can I operate anonymously as a seller — will the customer find out who is behind the shop?
The plugin does not reveal seller details to the customer. No information identifying the shop owner is automatically included in the PDF or in the purchase interface — unless the administrator manually enters it, e.g. in the offer description or in a dedicated buyer note field.
30. What customer data is stored in the database?
The following are stored: order number (a random string), encrypted receipt token, offer ID, list of purchased files (snapshot at the time of purchase), payment status, and data from the NOWPayments response (e.g. wallet address). No personal data (name, email) is required or collected.
31. Is the NOWPayments API key stored securely?
Yes. The API key is encrypted using AES-256-CBC before being stored in the database and decrypted only at the time of making a request to NOWPayments.
32. Who can trigger the webhook endpoint?
The webhook endpoint is protected by HMAC signature verification (x-nowpayments-sig) using the Webhook secret configured in the plugin settings. Only NOWPayments, with knowledge of that secret, can successfully call the webhook.
33. Does the plugin encrypt the files (resources) being sold?
No. The plugin does not encrypt the sold resources. Files are stored on the server in their original form and delivered to the customer via a one-time generated link in the PDF. File encryption is intentionally not built in — encryption mechanisms differ between operating systems (Windows, Linux, macOS) and content types (binary files vs. web pages), which would make it an impractical general-purpose solution. Access security relies on the secrecy of the receipt token: without the order number and token, no one can download the file.
34. Is the plugin compliant with GDPR?
The plugin does not collect personal data — orders are anonymous and payments are made with cryptocurrency. There is no mechanism for processing emails or data identifying natural persons. Full GDPR compliance depends on the configuration of your entire WordPress site (e.g. cookies, other plugins).
Customization
34. Can I insert the plugin shortcode directly in an HTML block in the Gutenberg / Classic editor?
Yes. In the Gutenberg editor, add a Shortcode block and paste [mfpro_anonymoussales_buy offer_id="1"]. In the Classic editor, you can paste the shortcode directly in the visual or text mode.
35. Can I insert the shortcode in the theme template files (e.g. page.php or single.php)?
Yes. In the PHP template file, use:
echo do_shortcode('[mfpro_anonymoussales_buy offer_id="1"]');
36. Can I add custom CSS styles to the entire buy widget?
Yes. The plugin’s default styles can be overridden with your own CSS of higher specificity. Alternatively, add customCSS="true" to the shortcode — the plugin will then skip all built-in styles and use only anonymousSP-* classes.
37. How do I override the plugin’s default styles without editing its files?
Add your own CSS rules in Theme → Customize → Additional CSS or in your own stylesheet, using selectors with higher specificity, e.g.:
body .mfpro-anon-sales-panel { background: #fff; }
Do not edit the anonymous-sales-frontend.css file — changes will be overwritten when the plugin is updated.
38. Does enabling customCSS="true" disable all default plugin styles?
Yes. When customCSS="true" is set, the plugin does not load any built-in styles for that shortcode and changes the class prefixes to anonymousSP-buy-* / anonymousSP-status-*. All styling must be provided in your own CSS.
39. Can I change the layout or order of elements in the buy dialog?
This is not possible directly via shortcode attributes. It can be achieved using the mfpro_anonymoussalesplugin_shortcode_buy_html filter, which allows replacing the entire generated HTML with your own structure.
40. Can I translate or change the text (labels, messages) shown to the customer?
Yes. Shortcode attributes allow you to change the basic labels: label (buy button text), title (dialog title), button_label and download_label (for the status shortcode). More advanced text changes are possible via the mfpro_anonymoussalesplugin_shortcode_buy_atts and mfpro_anonymoussalesplugin_shortcode_status_atts filters.
41. Does the plugin expose WordPress hooks (actions/filters) so I can extend or modify its behaviour without editing its files?
Yes. The plugin exposes a rich set of hooks described in the HOOKS.md file. Possible customizations include: modifying shortcode attributes, changing the resource list, overriding the entire shortcode HTML, modifying the payload sent to NOWPayments, changing endpoints, and handling events on order creation and status change.
Troubleshooting
42. The buy button is not showing — what should I check?
Check: whether the shortcode contains a valid offer_id, whether the offer exists in WP Admin → Offers, whether the plugin is active, whether there are any JS errors on the page (browser console → Console tab), and whether the plugin’s scripts and styles are loading (Network tab in devtools).
43. The order status is not updating automatically — what could be the cause?
Statuses are updated by WP Cron approximately every 5 minutes. If Cron is not working (e.g. on low-traffic sites), statuses may be delayed. Check WP Cron — you can use the WP Crontrol plugin or configure an external system cron.
44. The customer paid but the download link didn’t appear — what should I do?
Check the plugin logs (WP Admin → Anonymous Sales → Logs or the var/logs/error/ directory) and verify whether the webhook from NOWPayments arrived. If the webhook did not arrive, you can manually change the order status to paid in WP Admin → Orders.
45. The webhook is not arriving (NOWPayments reports an error) — how do I debug it?
Check: whether the Webhook URL in the NOWPayments settings matches the Universal endpoint URL from the plugin settings, whether the server is publicly accessible (not localhost), whether the Webhook secret is correctly pasted in the plugin settings, and whether the plugin logs contain information about rejected requests.
46. PHP errors are appearing in the logs — where do I find the log file?
The plugin writes its own logs to:
wp-content/plugins/anonymousSalesPluginPack/anonymousSalesPlugin/var/logs/error/
Also check the standard PHP server error log (error_log) and wp-content/debug.log if WP_DEBUG_LOG is enabled.
47. WordPress Cron is not working — how do I force status polling?
Configure an external system cron (e.g. via cPanel or crontab) that calls:
https://your-site.com/wp-cron.php?doing_wp_cron
every 5 minutes. Alternatively, use the WP Crontrol plugin to manually trigger the mfpro_anonymoussalesplugin_cron_sync task.