{"id":354270,"date":"2026-09-16T19:51:17","date_gmt":"2026-09-16T19:51:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hustlepay-mobile-counter\/"},"modified":"2026-09-18T21:49:15","modified_gmt":"2026-09-18T21:49:15","slug":"hustlepay-mobile-counter","status":"publish","type":"plugin","link":"https:\/\/tw.wordpress.org\/plugins\/hustlepay-mobile-counter\/","author":23492480,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.2","stable_tag":"0.2.2","tested":"7.1.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"HustlePay Mobile Counter","header_author":"HustlePay","header_description":"Sell online and in person with a lightweight product counter and HustlePay checkout, without WooCommerce.","assets_banners_color":"fbfafc","last_updated":"2026-09-18 21:49:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/hustlepay.me","rating":0,"author_block_rating":0,"active_installs":0,"downloads":149,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"hustlepaydev","date":"2026-09-16 19:51:07","revision":3699190},"0.2.0":{"tag":"0.2.0","author":"hustlepaydev","date":"2026-09-18 07:23:21","revision":3701482},"0.2.1":{"tag":"0.2.1","author":"hustlepaydev","date":"2026-09-18 21:41:32","revision":3702787},"0.2.2":{"tag":"0.2.2","author":"hustlepaydev","date":"2026-09-18 21:49:15","revision":3702794}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3701482,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3701482,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3701482,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3701482,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.1","0.2.0","0.2.1","0.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3701482,"resolution":"1","location":"assets","locale":"","width":1209,"height":464},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3701482,"resolution":"2","location":"assets","locale":"","width":1125,"height":938},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3701482,"resolution":"3","location":"assets","locale":"","width":390,"height":844},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3701482,"resolution":"4","location":"assets","locale":"","width":1485,"height":1115}},"screenshots":{"1":"The WordPress mobile counter: select products and build an in-person order.","2":"The shortcode shop: a product catalog and order summary inside your own website.","3":"The authenticated mobile counter on a phone-sized screen.","4":"Product management: edit the name, price, SKU, description and photo in WordPress."}},"plugin_section":[],"plugin_tags":[3148,281135,209782,26270,11751],"plugin_category":[45],"plugin_contributors":[263591],"plugin_business_model":[],"class_list":["post-354270","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-mobile-counter","plugin_tags-payment-links","plugin_tags-point-of-sale","plugin_tags-product-catalog","plugin_category-ecommerce","plugin_contributors-hustlepaydev","plugin_committers-hustlepaydev"],"banners":{"banner":"https:\/\/ps.w.org\/hustlepay-mobile-counter\/assets\/banner-772x250.png?rev=3701482","banner_2x":"https:\/\/ps.w.org\/hustlepay-mobile-counter\/assets\/banner-1544x500.png?rev=3701482","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/hustlepay-mobile-counter\/assets\/icon-128x128.png?rev=3701482","icon_2x":"https:\/\/ps.w.org\/hustlepay-mobile-counter\/assets\/icon-256x256.png?rev=3701482","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hustlepay-mobile-counter\/assets\/screenshot-1.png?rev=3701482","caption":"The WordPress mobile counter: select products and build an in-person order."},{"src":"https:\/\/ps.w.org\/hustlepay-mobile-counter\/assets\/screenshot-2.png?rev=3701482","caption":"The shortcode shop: a product catalog and order summary inside your own website."},{"src":"https:\/\/ps.w.org\/hustlepay-mobile-counter\/assets\/screenshot-3.png?rev=3701482","caption":"The authenticated mobile counter on a phone-sized screen."},{"src":"https:\/\/ps.w.org\/hustlepay-mobile-counter\/assets\/screenshot-4.png?rev=3701482","caption":"Product management: edit the name, price, SKU, description and photo in WordPress."}],"raw_content":"<!--section=description-->\n<p><strong>A simple WordPress shop and mobile point of sale \u2014 without WooCommerce.<\/strong><\/p>\n\n<p>HustlePay Mobile Counter helps small businesses, pop-up shops, market sellers and occasional sellers take orders online or beside a customer. Add products to WordPress, build an order on your phone or computer, and let your customer pay through a hosted checkout link or QR code.<\/p>\n\n<p>Use it as an in-person mobile counter, an online product catalog with checkout, or both. You do not need to install WooCommerce or build a full ecommerce store to start selling a small range of products.<\/p>\n\n<h4>Sell online and in person<\/h4>\n\n<ul>\n<li><strong>Mobile counter:<\/strong> select products, adjust quantities and create a checkout while serving a customer.<\/li>\n<li><strong>Payment links and QR codes:<\/strong> copy or share a hosted checkout link, or show its QR code beside the customer.<\/li>\n<li><strong>Online shop:<\/strong> add <code>[hustlepay_mobile_counter]<\/code> to a WordPress page or an Elementor Shortcode widget.<\/li>\n<li><strong>Clear cart feedback:<\/strong> see an Added confirmation and product quantity after adding an item. A fixed View cart bar shows the item count and total whenever the current page's cart is off-screen, with a direct shortcut to checkout. Carts are not shared between pages.<\/li>\n<li><strong>One-time sales:<\/strong> enter a custom item, price and description, with up to three photos, without creating a permanent catalog entry.<\/li>\n<li><strong>Installable counter app:<\/strong> add the authenticated counter to a supported phone's home screen. It uses the same WordPress products and sales; an internet connection is required.<\/li>\n<\/ul>\n\n<h4>Manage your products and sales in WordPress<\/h4>\n\n<p>Add product names, descriptions, prices, SKUs and photos. Choose which products appear in the public shop. Review local sales records and synchronize checkout statuses from your WordPress dashboard.<\/p>\n\n<p>The counter, product screens, sales and settings use a consistent HustlePay admin design. Public shop appearance controls let you choose a font and style preset, then adjust colors, product columns, image sizing and corner radii to suit your website. Choose your website font, locally bundled Nunito or Readex Pro, a system font, or Georgia. HustlePay, Minimal and Boutique presets provide editable starting points. No Elementor subscription is required to use the plugin.<\/p>\n\n<p>Optional receipt\/invoice contact fields and a configurable shipping-address form are stored with the sale. Shipping-address collection does not calculate delivery charges or arrange shipping. Receipt emails use your WordPress email configuration.<\/p>\n\n<h4>Built for a small catalog, not a full ecommerce suite<\/h4>\n\n<p>The plugin currently supports simple products and one-time items. Stock tracking, product variants, product categories, shipping-rate calculation, tax calculation, subscriptions and offline payments are not included. A receipt is a simple payment record, not a tax-compliance or accounting service.<\/p>\n\n<h4>Checkout and account requirements<\/h4>\n\n<p>An active HustlePay merchant account and the appropriate test or live publishable key are required. Available payment methods depend on the payment providers connected to that account. The plugin does not connect directly to your Mollie or Stripe account.<\/p>\n\n<p>The WordPress plugin is free to install. HustlePay service terms and any fees charged by your connected payment providers apply separately; check those providers for current pricing and availability. This plugin does not promise free payment processing.<\/p>\n\n<p>Hosted checkout opens in a compact payment window, with an option to open a separate tab. Customers can request cancellation before editing an order. Closing the window alone does not cancel a payment; the plugin waits for confirmation of the payment status before treating a cancellation as successful.<\/p>\n\n<p>The catalog and sale snapshots are stored in WordPress. Product prices used for public orders are always read again on the server. The selected HustlePay publishable key stays on the server and is never placed in public JavaScript.<\/p>\n\n<p>Additional features:<\/p>\n\n<ul>\n<li>Sell from WordPress without WooCommerce.<\/li>\n<li>Create a one-time item with a title, price, description, and up to three photos.<\/li>\n<li>Add reusable WordPress products with a price, SKU, featured image, and public\/private visibility.<\/li>\n<li>Let a customer order from a page containing <code>[hustlepay_mobile_counter]<\/code>.<\/li>\n<li>Open, copy, share, or scan a hosted checkout link while standing beside a customer.<\/li>\n<li>Keep local sale references, item snapshots, totals, and statuses.<\/li>\n<li>Synchronize open checkout statuses through WP-Cron every five minutes.<\/li>\n<li>Notify the store email when a checkout becomes paid.<\/li>\n<li>Optionally email a simple payment receipt to a customer.<\/li>\n<li>Give staff access with the included Mobile Counter Cashier role.<\/li>\n<li>Export and erase locally stored customer details through WordPress Privacy tools.<\/li>\n<\/ul>\n\n<p>HustlePay is not a bank, payment service provider, payment processor, money transmitter, merchant of record, or settlement provider. It provides a non-custodial checkout orchestration layer. Actual payment authorization, processing, settlement, refunds, disputes, and chargebacks remain with payment service providers connected and configured by the merchant.<\/p>\n\n<p>An active HustlePay account is required. Merchants are responsible for maintaining their own accounts and agreements with the payment service providers they use.<\/p>\n\n<h4>External services<\/h4>\n\n<p>This plugin connects to the HustlePay checkout orchestration service. It uses the endpoint selected by the WordPress administrator:<\/p>\n\n<ul>\n<li>Live API: <code>https:\/\/api.hustlepay.net<\/code><\/li>\n<li>Test API: <code>https:\/\/api.hustlepay.dev<\/code><\/li>\n<li>Service website: <code>https:\/\/www.hustlepay.me\/<\/code><\/li>\n<li>Terms of Service: <code>https:\/\/www.hustlepay.me\/terms-of-service\/<\/code><\/li>\n<li>Privacy Policy: <code>https:\/\/www.hustlepay.me\/privacy-policy\/<\/code><\/li>\n<\/ul>\n\n<p>The plugin does not contact HustlePay merely by being installed or activated. Requests begin only after an administrator selects test or live mode, saves the matching HustlePay publishable key, and tests the connection or starts using checkout functionality.<\/p>\n\n<p>The following requests can then be made:<\/p>\n\n<ul>\n<li>A connection test sends the selected publishable key as an <code>x-api-key<\/code> header to <code>\/v1\/me<\/code> when an administrator clicks \"Test connection\".<\/li>\n<li>Creating a checkout sends the publishable key, an idempotency key, session mode, currency, item names, descriptions, prices, quantities, and product or uploaded image URLs to <code>\/v1\/sessions<\/code>.<\/li>\n<li>Synchronizing an open sale sends its HustlePay session ID and the publishable key to <code>\/v1\/sessions\/{session_id}<\/code>. This can happen manually or through WP-Cron.<\/li>\n<li>Displaying a checkout QR code sends its HustlePay session ID and the publishable key to <code>\/v1\/sessions\/{session_id}\/qr<\/code>.<\/li>\n<li>Requesting cancellation sends the session ID and publishable key to <code>\/v1\/sessions\/{session_id}\/cancel<\/code>. Cancellation is subject to the provider's current payment status.<\/li>\n<\/ul>\n\n<p>Receipt, invoice and optional shipping-address fields are stored in the local WordPress sale record. This version does not send those fields to the HustlePay API. Uploaded one-time-item photos are stored in the WordPress Media Library, and their public URLs can be sent to HustlePay as part of a checkout item. Opening hosted checkout loads the HustlePay payment page and may load the payment providers selected for the merchant.<\/p>\n\n<p>The plugin does not store or transmit full card numbers or CVVs. Payment-method collection and processing take place in the hosted HustlePay checkout flow and through the merchant's selected payment service providers.<\/p>\n\n<p>Use of the service is subject to the <a href=\"https:\/\/www.hustlepay.me\/terms-of-service\/\">HustlePay Terms of Service<\/a> and <a href=\"https:\/\/www.hustlepay.me\/privacy-policy\/\">HustlePay Privacy Policy<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install its ZIP through Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate HustlePay Mobile Counter.<\/li>\n<li>Open Mobile Counter &gt; Settings, keep Test mode selected, and save your HustlePay test publishable key.<\/li>\n<li>Complete a test checkout and then switch to Live mode with your live publishable key when you are ready.<\/li>\n<li>Add products under Mobile Counter &gt; Products.<\/li>\n<li>Use Mobile Counter &gt; Counter for in-person sales.<\/li>\n<li>Review the draft \"Mobile Counter Shop\" page, select it in the plugin settings, and publish it when the online shop is ready. Alternatively, place <code>[hustlepay_mobile_counter]<\/code> on an existing page.<\/li>\n<li>Adjust Mobile Counter &gt; Shop appearance and, if needed, enable the optional shipping-address checkbox in Settings.<\/li>\n<li>To install the cashier app, open \"Open \/ install counter app\" from the counter. HTTPS and a supported browser are required.<\/li>\n<\/ol>\n\n<p>Activation creates the self-order page as a draft. The plugin never publishes it automatically.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20install%20the%20counter%20on%20my%20phone%3F\"><h3>Can I install the counter on my phone?<\/h3><\/dt>\n<dd><p>Yes. Open \"Open \/ install counter app\" from the WordPress counter and select \"Install app\". In Safari on iPhone\/iPad use Share &gt; Add to Home Screen. HTTPS and a supported browser are required. Sign in with a WordPress administrator or Mobile Counter Cashier account.<\/p>\n\n<p>The app uses the same WordPress products, prices and sales as the admin counter. It requires an internet connection to work. The service worker is scoped to the counter only and does not cache authenticated pages, customer data, nonces or payments. Offline navigation shows a reconnect screen; payments are never queued offline. Logging out requires signing in again before using the counter.<\/p><\/dd>\n<dt id=\"does%20this%20require%20woocommerce%3F\"><h3>Does this require WooCommerce?<\/h3><\/dt>\n<dd><p>No. Products and sales are stored in WordPress post types owned by this plugin.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%20or%20the%20block%20editor%3F\"><h3>Does it work with Elementor or the block editor?<\/h3><\/dt>\n<dd><p>Yes. Use a Shortcode block in the WordPress editor or a Shortcode widget in Elementor. Add <code>[hustlepay_mobile_counter header=\"no\"]<\/code> if your page already has its own shop heading. The surrounding header, footer and page design come from your theme or page builder; the plugin does not replace them.<\/p><\/dd>\n<dt id=\"can%20i%20manage%20stock%2C%20sizes%2C%20colors%20or%20product%20categories%3F\"><h3>Can I manage stock, sizes, colors or product categories?<\/h3><\/dt>\n<dd><p>Not in this release. Products have a single price and optional SKU; inventory, variants and category management are not included.<\/p><\/dd>\n<dt id=\"can%20customers%20enter%20a%20shipping%20address%3F\"><h3>Can customers enter a shipping address?<\/h3><\/dt>\n<dd><p>Yes, if an administrator enables Shipping address in Mobile Counter &gt; Settings. It is optional for the customer and appears in the shop and counter. The address is stored with the sale; no shipping fees or delivery services are added.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20process%20payments%20itself%3F\"><h3>Does the plugin process payments itself?<\/h3><\/dt>\n<dd><p>No. It creates and monitors hosted checkout sessions through HustlePay. The payment providers configured for the merchant process the payment.<\/p><\/dd>\n<dt id=\"can%20a%20cashier%20see%20every%20store%20sale%3F\"><h3>Can a cashier see every store sale?<\/h3><\/dt>\n<dd><p>Administrators can see all Mobile Counter sales. Users with the included Mobile Counter Cashier role can use the counter and see sales they created.<\/p><\/dd>\n<dt id=\"can%20i%20test%20before%20accepting%20live%20payments%3F\"><h3>Can I test before accepting live payments?<\/h3><\/dt>\n<dd><p>Yes. Test mode is selected by default and uses the HustlePay test API and test publishable key. Live mode uses a separate live publishable key.<\/p><\/dd>\n<dt id=\"is%20the%20publishable%20key%20shown%20to%20visitors%3F\"><h3>Is the publishable key shown to visitors?<\/h3><\/dt>\n<dd><p>No. Requests to HustlePay are made from the WordPress server.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20deactivate%20or%20remove%20the%20plugin%3F\"><h3>What happens when I deactivate or remove the plugin?<\/h3><\/dt>\n<dd><p>Deactivation stops scheduled status synchronization. Uninstallation removes plugin settings, saved publishable keys, and the cashier role, but deliberately retains product, sale, media, and page content to avoid unexpected data loss.<\/p><\/dd>\n<dt id=\"where%20is%20customer%20information%20stored%3F\"><h3>Where is customer information stored?<\/h3><\/dt>\n<dd><p>Optional receipt and invoice contact fields are stored with the local sale record. Administrators can use Tools &gt; Export Personal Data and Tools &gt; Erase Personal Data for a customer's email address.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Made cart notifications and the View cart shortcut smaller and right-aligned, matching a single product column on multi-column layouts.<\/li>\n<li>Kept notifications separated from the cart shortcut when compact labels wrap on narrow screens.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Added immediate item-count feedback and confirmation messages to the WordPress counter and cashier PWA, including one-time items.<\/li>\n<li>Added a fixed View cart shortcut with quantity and total when the counter order is off-screen.<\/li>\n<li>Kept product quantities visible after searching and preserved payment locks.<\/li>\n<li>Improved narrow-screen counter cards and admin notice layout.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added an authenticated, installable cashier PWA with manifest, icons, install guidance and a network-only offline fallback.<\/li>\n<li>Added HustlePay branding to the authenticated counter; no forced public storefront credit.<\/li>\n<li>Made one-time-item entry collapsible and improved phone layouts.<\/li>\n<li>Fixed self-order checkout nonce validation for signed-in WordPress users.<\/li>\n<li>Bundled Readex Pro and Nunito locally under the included SIL Open Font Licenses.<\/li>\n<li>Added a compact hosted-checkout window, confirmed cancellation and return to the saved order.<\/li>\n<li>Added configurable optional shipping-address collection and privacy-tool support.<\/li>\n<li>Added public shop appearance settings and refreshed Mobile Counter admin screens.<\/li>\n<li>Improved English documentation, setup guidance and plugin-directory screenshots.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Removed the public storefront credit badge and its styles.<\/li>\n<li>Updated public checkout instructions and button text to neutral wording.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Added WordPress-native products, in-person counter, self-order shortcode, local sales, status synchronization, notifications, privacy-tool integration, and separate test and live modes.<\/li>\n<\/ul>","raw_excerpt":"Sell from a lightweight WordPress shop and mobile counter, online or in person, without installing WooCommerce.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/354270","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=354270"}],"author":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hustlepaydev"}],"wp:attachment":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=354270"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=354270"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=354270"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=354270"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=354270"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=354270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}