{"id":327837,"date":"2026-07-02T19:27:30","date_gmt":"2026-07-02T19:27:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/risky-buyer\/"},"modified":"2026-07-02T19:26:52","modified_gmt":"2026-07-02T19:26:52","slug":"riskybuyer","status":"publish","type":"plugin","link":"https:\/\/cs.wordpress.org\/plugins\/riskybuyer\/","author":18750600,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"1.0.3","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"RiskyBuyer \u2013 Customer Flags for WooCommerce","header_author":"dangoriaynov","header_description":"Flag problematic WooCommerce customers by phone or name (with a reason and note) and automatically mark their orders in the admin. Optional sync with a shared central list (riskybuyer.com).","assets_banners_color":"262e3d","last_updated":"2026-07-02 19:26:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/dangoriaynov\/risky-buyer","header_author_uri":"https:\/\/github.com\/dangoriaynov","rating":0,"author_block_rating":0,"active_installs":0,"downloads":29,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"winter2007d","date":"2026-07-02 19:26:52"}},"upgrade_notice":{"0.4.0":"<p>Adds optional sync with a shared central blacklist (opt-in, off by default).<\/p>","0.3.0":"<p>Translatable strings (with Bulgarian translation), partial check search, and a unique plugin prefix.<\/p>","0.2.0":"<p>Adds a customer check tab and bulk add; moves the page under WooCommerce.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3594418,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3594418,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3594418,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3594430,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3594430,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3594418,"resolution":"1","location":"assets","locale":"","width":2508,"height":1414},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3594418,"resolution":"2","location":"assets","locale":"","width":2508,"height":1414},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3594418,"resolution":"3","location":"assets","locale":"","width":2508,"height":1414},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3594418,"resolution":"4","location":"assets","locale":"","width":2508,"height":1422},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3594418,"resolution":"5","location":"assets","locale":"","width":2508,"height":800}},"screenshots":{"1":"List tab \u2014 flagged buyers with instant phone\/name search (AND\/OR), reason filter and click-to-sort columns.","2":"Add tab \u2014 add one buyer or in bulk, or pick an existing customer from your orders.","3":"Settings \u2014 opt-in synchronization with the central shared list.","4":"Order edit screen \u2014 a prominent warning banner and a side panel when the buyer is flagged.","5":"WooCommerce orders list \u2014 a warning badge on a flagged buyer's order (works across pagination; HPOS and legacy)."}},"plugin_section":[],"plugin_tags":[1784,7619,12891,16281,286],"plugin_category":[45,54],"plugin_contributors":[206282],"plugin_business_model":[],"class_list":["post-327837","plugin","type-plugin","status-publish","hentry","plugin_tags-blacklist","plugin_tags-customers","plugin_tags-fraud","plugin_tags-orders","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-security-and-spam-protection","plugin_contributors-winter2007d","plugin_committers-winter2007d"],"banners":{"banner":"https:\/\/ps.w.org\/riskybuyer\/assets\/banner-772x250.png?rev=3594430","banner_2x":"https:\/\/ps.w.org\/riskybuyer\/assets\/banner-1544x500.png?rev=3594430","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/riskybuyer\/assets\/icon.svg?rev=3594418","icon":"https:\/\/ps.w.org\/riskybuyer\/assets\/icon.svg?rev=3594418","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/riskybuyer\/assets\/screenshot-1.png?rev=3594418","caption":"List tab \u2014 flagged buyers with instant phone\/name search (AND\/OR), reason filter and click-to-sort columns."},{"src":"https:\/\/ps.w.org\/riskybuyer\/assets\/screenshot-2.png?rev=3594418","caption":"Add tab \u2014 add one buyer or in bulk, or pick an existing customer from your orders."},{"src":"https:\/\/ps.w.org\/riskybuyer\/assets\/screenshot-3.png?rev=3594418","caption":"Settings \u2014 opt-in synchronization with the central shared list."},{"src":"https:\/\/ps.w.org\/riskybuyer\/assets\/screenshot-4.png?rev=3594418","caption":"Order edit screen \u2014 a prominent warning banner and a side panel when the buyer is flagged."},{"src":"https:\/\/ps.w.org\/riskybuyer\/assets\/screenshot-5.png?rev=3594418","caption":"WooCommerce orders list \u2014 a warning badge on a flagged buyer's order (works across pagination; HPOS and legacy)."}],"raw_content":"<!--section=description-->\n<p>RiskyBuyer lets your team keep a list of problematic customers (uncollected COD\nshipments, fake orders, abusive behaviour, etc.) and flags their orders right in\nthe WooCommerce orders list.<\/p>\n\n<p>Each entry is a phone and\/or a name, with a reason and an optional note. When a\ncustomer's order matches an entry (by normalized phone OR name), the order row\nis highlighted with a warning badge \u2014 and you get a clear warning panel on the\norder edit screen, with quick links to that buyer's other orders.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Searchable, sortable list<\/strong> \u2014 one table of flagged buyers. Filter by phone\nand\/or name (with an AND\/OR toggle) and by reason, and sort by any column \u2014\nall instantly in the browser.<\/li>\n<li><strong>Orders list flagging<\/strong> \u2014 a warning badge and colored bar on orders of\nblacklisted customers. Computed server-side, so it works across pagination.\nSupports both HPOS (the new orders screen) and the legacy screen.<\/li>\n<li><strong>Order edit panel<\/strong> \u2014 a warning when the buyer is blacklisted (with links to\ntheir other orders on your site), or a one-click \"mark client\" form otherwise.<\/li>\n<li><strong>Add one or in bulk<\/strong> \u2014 add a single buyer or paste a list (one per line). You\ncan also search your existing customers (by name or phone, taken from your\norders) and pick one to fill the form.<\/li>\n<li><strong>Phone normalization<\/strong> \u2014 numbers are stored in international \"+CC\" form, so the\nsame person matches across formatting differences.<\/li>\n<li><strong>Roles<\/strong> \u2014 anyone who can edit orders (<code>edit_shop_orders<\/code>) can add; only\nadministrators (<code>manage_options<\/code>) can edit or delete.<\/li>\n<li><strong>Optional shared list<\/strong> \u2014 opt-in synchronization with a central service (see\nthe \"External services\" section), off by default.<\/li>\n<\/ul>\n\n<h4>Architecture<\/h4>\n\n<p>The plugin talks to its data through a storage-provider interface. Today it uses\na local database table; the design is ready for a future shared\/central service\nso multiple sites can contribute to and read the same list.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can optionally synchronize with a central, shared blacklist service\nat <strong>riskybuyer.com<\/strong> so that your checks are extended with phone numbers\nreported by other sites. <strong>This is opt-in and disabled by default<\/strong> \u2014 no data is\nsent or received until you enable it under WooCommerce \u2192 Risky buyers \u2192\nSettings.<\/p>\n\n<p>When sync is enabled:<\/p>\n\n<ul>\n<li>The plugin periodically requests the shared list (GET) to extend your local\nchecks. Reading the list is open.<\/li>\n<li>If you have a write API key, the plugin sends your own entries to the service\nto be shared: phone, name, reason, note, and your site's domain.<\/li>\n<\/ul>\n\n<p>The service is provided by the plugin author. Terms of Use:\nhttps:\/\/riskybuyer.com\/terms \u2014 Privacy Policy: https:\/\/riskybuyer.com\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>riskybuyer<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it\nfrom the Plugins screen.<\/li>\n<li>Activate the plugin (this creates the database table).<\/li>\n<li>Manage the list under <strong>WooCommerce \u2192 Risky buyers<\/strong>.<\/li>\n<\/ol>\n\n<p>Requires WooCommerce.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20are%20duplicate%20%2F%20matching%20customers%20detected%3F\"><h3>How are duplicate \/ matching customers detected?<\/h3><\/dt>\n<dd><p>Phones are normalized to their last 9 digits and names are lowercased with\npunctuation removed, so the same person matches across formatting differences.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Does it work with High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. The plugin declares HPOS compatibility and reads orders from the current\nstatus view server-side.<\/p><\/dd>\n<dt id=\"who%20can%20add%20or%20remove%20entries%3F\"><h3>Who can add or remove entries?<\/h3><\/dt>\n<dd><p>Anyone who can edit orders (<code>edit_shop_orders<\/code>) can add. Only administrators\n(<code>manage_options<\/code>) can edit or delete.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added a \"Settings\" link to the plugin's row on the Plugins screen.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Renamed to \"RiskyBuyer \u2013 Customer Flags for WooCommerce\".<\/li>\n<li>Orders-list styles and script are now loaded with the standard WordPress enqueue functions instead of inline tags.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Order screen: the \"Risky buyer\" box now shows a single \"Mark as problematic\" button and reveals the reason\/note form only when you click it \u2014 less clutter on every order.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>\n\n<h4>0.6.11<\/h4>\n\n<ul>\n<li>Add tab: fixed the icon vertical alignment on the \"Add one client\" \/ \"Bulk add\" buttons (dashicons now sit level with the text).<\/li>\n<\/ul>\n\n<h4>0.6.10<\/h4>\n\n<ul>\n<li>Settings: the \"data sent to the server\" note and the sync status (last update \/ downloaded \/ new) now appear as hover tooltips behind small info \/ help icons next to the enable-sync checkbox, instead of permanent paragraphs.<\/li>\n<li>Settings: key check now tells an unreachable server apart from an actually invalid key (no more false \"invalid key\" when the server is just down).<\/li>\n<\/ul>\n\n<h4>0.6.9<\/h4>\n\n<ul>\n<li>Customer search: phone numbers shown normalized (+CC), duplicate spellings\/formats of the same buyer collapsed into one result, and the matching order numbers listed in parentheses.<\/li>\n<\/ul>\n\n<h4>0.6.8<\/h4>\n\n<ul>\n<li>Add tab: nicer \"Add one client\" \/ \"Bulk add\" buttons (card style, accent icons, hover lift, solid active state).<\/li>\n<\/ul>\n\n<h4>0.6.7<\/h4>\n\n<ul>\n<li>Fixed: the customer search dropdown now appears (its results box was nested in a <\/li>\n<\/ul>\n\n<p>&lt;<\/p>\n\n<p>p&gt;, which browsers auto-close before block elements, breaking positioning). Added a loading spinner and an error state.\n* Add tab: the single and bulk forms are now behind \"Add one client\" \/ \"Bulk add\" buttons; clicking reveals the fields, which stay open (empty) after each add so you can keep adding until you reload.\n* Add tab: reason defaults to the top option and remembers your last-used reason for the next entry.<\/p>\n\n<h4>0.6.6<\/h4>\n\n<ul>\n<li>Add tab: the customer search now sits above the form (outside it), so pressing Enter searches instead of submitting an empty entry; Enter also triggers the search immediately.<\/li>\n<\/ul>\n\n<h4>0.6.5<\/h4>\n\n<ul>\n<li>Add tab: search existing shop customers (by name or phone, pulled from your orders) and pick one to fill in the name and phone instantly.<\/li>\n<\/ul>\n\n<h4>0.6.4<\/h4>\n\n<ul>\n<li>Settings: the API key locks (grey, read-only) once validated for this site, with a red x to clear it; it is checked once (on entry\/load), not continuously.<\/li>\n<li>Settings: Sync now \/ Push are color-coded icon buttons next to the server URL; Push appears only with a valid write key; both save settings first.<\/li>\n<li>Sync status now shows how many entries are new in the last sync, not just the total downloaded.<\/li>\n<li>List: click any column header to sort (default: date, newest first).<\/li>\n<\/ul>\n\n<h4>0.6.3<\/h4>\n\n<ul>\n<li>Phone numbers are normalized on save to international +CC form (00 -&gt; +, national leading 0 -&gt; country code; default +359, filterable).<\/li>\n<li>Order banner now links to the buyer's other orders on this site (excluding the one open).<\/li>\n<li>List: centered cell values; Edit\/Delete shown as icons; reason filter and reason dropdowns color-coded to match the list.<\/li>\n<li>Settings: clearer wording for the sync status; the \"data sent\" note moved under the sync panel; constrained width.<\/li>\n<\/ul>\n\n<h4>0.6.2<\/h4>\n\n<ul>\n<li>Admin: removed the redundant Check tab \u2014 the List tab now filters instantly in the browser (phone\/name with AND\/OR + reason, no reload).<\/li>\n<li>Admin: cleaner Add\/Edit forms and centered, bold table headers.<\/li>\n<\/ul>\n\n<h4>0.6.1<\/h4>\n\n<ul>\n<li>Passes Plugin Check with zero errors and warnings (security\/SQL\/i18n).<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Renamed to RiskyBuyer (slug, text domain, identifiers) to match the project and site; data is migrated automatically on update.<\/li>\n<li>Tested up to WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Settings tab is now AJAX: enabling sync reveals the URL\/key fields and saves automatically (no reload, no Save button). The API key is validated against the server; the \"Push my list\" button appears only for a valid write key.<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>AND\/OR toggle added to the Check tab search too (not only the List tab).<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Prominent banner on the order screen when the customer is on the problem list.<\/li>\n<li>List tab: separate phone\/name search (LIKE) with an AND\/OR toggle (AND by default).<\/li>\n<li>Daily sync moved to ~03:00 site time.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Optional synchronization with the central shared blacklist (riskybuyer.com), opt-in and off by default.<\/li>\n<li>Settings tab: enable sync, server URL, API key, Sync now, Push my list.<\/li>\n<li>Checks are extended with cached server phone numbers; local entries always stay local.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Internationalized: English source strings with full translation support; ships a Bulgarian (bg_BG) translation.<\/li>\n<li>Unique plugin prefix across classes, options, table, AJAX actions and hooks.<\/li>\n<li>Check tab now does partial (LIKE) matching on phone or name, newest first.<\/li>\n<li>Admin page moved under the WooCommerce menu (just before Settings).<\/li>\n<li>Declared HPOS compatibility; added uninstall cleanup and GPL license.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Admin page reorganised into tabs: Check \/ List \/ Add.<\/li>\n<li>Check tab: exact match plus possible (partial) matches.<\/li>\n<li>Bulk add (one client per line; batch reason\/note; existing entries skipped).<\/li>\n<li>Moved the admin page under the WooCommerce menu.<\/li>\n<li>Declared HPOS compatibility; load text domain.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: storage-provider architecture, local table, matching by\nphone or name, orders-list flagging, order metabox, management page.<\/li>\n<\/ul>","raw_excerpt":"Flag problematic WooCommerce customers by phone or name and automatically mark their orders in the admin.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/327837","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=327837"}],"author":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/winter2007d"}],"wp:attachment":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=327837"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=327837"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=327837"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=327837"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=327837"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=327837"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}