{"id":276244,"date":"2026-01-21T17:00:01","date_gmt":"2026-01-21T17:00:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/already-purchased-for-woo\/"},"modified":"2026-07-04T19:19:28","modified_gmt":"2026-07-04T19:19:28","slug":"purchasecheck-badge-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/am.wordpress.org\/plugins\/purchasecheck-badge-for-woocommerce\/","author":23440212,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.0.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"PurchaseCheck Badge for WooCommerce","header_author":"Softminal","header_description":"Display a \"Purchased\" badge on WooCommerce products that customers have already bought to prevent duplicate orders.","assets_banners_color":"6aa2de","last_updated":"2026-07-04 19:19:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/softminal.com\/products\/purchasecheck-badge","header_author_uri":"https:\/\/github.com\/softminal","rating":0,"author_block_rating":0,"active_installs":0,"downloads":277,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"softminal","date":"2026-01-21 16:59:24"},"1.2.0":{"tag":"1.2.0","author":"softminal","date":"2026-07-04 19:19:28"}},"upgrade_notice":{"1.2.0":"<p>Major update: Prevent Repurchase mode, block theme support, a &quot;My purchases&quot; account tab, purchase details with order links, checkout duplicate-purchase warning, exclusions, and HPOS compatibility. New features are off by default. Recommended for all stores.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3444287,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3444287,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3444287,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3444287,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"pcbw\/purchased-products":{"name":"pcbw\/purchased-products","title":"My Purchased Products"}},"tagged_versions":["1.0.0","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3595127,"resolution":"1","location":"assets","locale":"","width":2400,"height":1324},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3595127,"resolution":"2","location":"assets","locale":"","width":2400,"height":1324},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3595127,"resolution":"3","location":"assets","locale":"","width":2400,"height":1378},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3595127,"resolution":"4","location":"assets","locale":"","width":2400,"height":1472},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3595127,"resolution":"5","location":"assets","locale":"","width":2400,"height":1324},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3595127,"resolution":"6","location":"assets","locale":"","width":2400,"height":1378}},"screenshots":{"1":"\u201cPurchased\u201d badge on shop and category pages, overlaid on product images.","2":"Badge with purchase details (count, last purchase date, and order link) on the single product page.","3":"Prevent Repurchase in action \u2014 Add to Cart replaced with a customizable \u201cYou already own this\u201d notice.","4":"Checkout warning when the cart contains items the customer already bought.","5":"\u201cMy purchases\u201d tab in My Account listing everything the customer owns.","6":"Settings panel under WooCommerce &gt; Settings &gt; Purchased Badge."}},"plugin_section":[],"plugin_tags":[269986,174551,269988,269987,286],"plugin_category":[45,58],"plugin_contributors":[254419,254418],"plugin_business_model":[],"class_list":["post-276244","plugin","type-plugin","status-publish","hentry","plugin_tags-already-purchased","plugin_tags-hide-add-to-cart","plugin_tags-prevent-duplicate-orders","plugin_tags-purchased-badge","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-user-management","plugin_contributors-diptosoftminal","plugin_contributors-softminal","plugin_committers-softminal"],"banners":{"banner":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/banner-772x250.png?rev=3444287","banner_2x":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/banner-1544x500.png?rev=3444287","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/icon-128x128.png?rev=3444287","icon_2x":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/icon-256x256.png?rev=3444287","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/screenshot-1.png?rev=3595127","caption":"\u201cPurchased\u201d badge on shop and category pages, overlaid on product images."},{"src":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/screenshot-2.png?rev=3595127","caption":"Badge with purchase details (count, last purchase date, and order link) on the single product page."},{"src":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/screenshot-3.png?rev=3595127","caption":"Prevent Repurchase in action \u2014 Add to Cart replaced with a customizable \u201cYou already own this\u201d notice."},{"src":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/screenshot-4.png?rev=3595127","caption":"Checkout warning when the cart contains items the customer already bought."},{"src":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/screenshot-5.png?rev=3595127","caption":"\u201cMy purchases\u201d tab in My Account listing everything the customer owns."},{"src":"https:\/\/ps.w.org\/purchasecheck-badge-for-woocommerce\/assets\/screenshot-6.png?rev=3595127","caption":"Settings panel under WooCommerce &gt; Settings &gt; Purchased Badge."}],"raw_content":"<!--section=description-->\n<p>PurchaseCheck Badge for WooCommerce shows a customizable \"Already Purchased\" badge on products your logged-in customers have bought before \u2014 on the shop, category, and single product pages, including block themes. Go further: block repurchase entirely (hide Add to Cart for owned products), warn customers at checkout about duplicate items, and give them a \"My purchases\" list in My Account. Perfect for digital products, courses, licenses, and any store where buying twice is a mistake.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Smart Purchase Detection<\/strong>: Automatically detects if a customer has purchased a product based on configurable order statuses<\/li>\n<li><strong>Flexible Display Options<\/strong>: Show badges on shop pages, category pages, and single product pages<\/li>\n<li><strong>Customizable Badge Text<\/strong>: Change the badge text to match your brand<\/li>\n<li><strong>Order Status Control<\/strong>: Choose which order statuses count as \"purchased\" (completed, processing, etc.)<\/li>\n<li><strong>Performance Optimized<\/strong>: Uses efficient caching to minimize database queries<\/li>\n<li><strong>Variation Support<\/strong>: Handles product variations correctly, marking parent products as purchased when any variation is bought<\/li>\n<li><strong>WooCommerce Integration<\/strong>: Seamlessly integrates with WooCommerce settings panel<\/li>\n<li><strong>Prevent Repurchase<\/strong>: Optionally block customers from buying products they already own \u2014 perfect for digital products, courses, and licenses<\/li>\n<li><strong>Block Theme Ready<\/strong>: Badges render in Product Collection and All Products blocks on modern block themes<\/li>\n<li><strong>Checkout Warning<\/strong>: Optionally warn customers at checkout when their cart contains items they already own<\/li>\n<li><strong>Exclusions<\/strong>: Exclude specific products or whole categories from badges and repurchase blocking<\/li>\n<li><strong>My Purchases List<\/strong>: A My Account tab, shortcode, and Gutenberg block showing customers everything they own<\/li>\n<\/ul>\n\n<h4>Prevent Duplicate Orders<\/h4>\n\n<p>Enable Prevent Repurchase and owned products become non-purchasable for that customer: the Add to Cart button is replaced with a customizable notice. Scope it to all products or only virtual\/downloadable ones. An optional checkout warning catches duplicates that slip into the cart.<\/p>\n\n<h4>Show Customers What They Already Bought<\/h4>\n\n<p>Every purchased product gets a badge with an optional hover summary (purchase count, last purchase date, order link). A \"My purchases\" tab in My Account \u2014 plus a shortcode and Gutenberg block \u2014 lists everything they own.<\/p>\n\n<h4>How It Works<\/h4>\n\n<p>The plugin checks a logged-in customer's order history and displays a badge on products they've previously purchased. The badge appears:<\/p>\n\n<ul>\n<li>On shop\/archive pages as an overlay on product images<\/li>\n<li>On category pages as an overlay on product images<\/li>\n<li>On single product pages inline with the product title<\/li>\n<li>In Product Collection grids on block themes<\/li>\n<\/ul>\n\n<h4>Settings<\/h4>\n\n<p>Configure the plugin through <strong>WooCommerce \u2192 Settings \u2192 Purchased Badge<\/strong>:<\/p>\n\n<ul>\n<li>Enable\/disable the badge and customize its text<\/li>\n<li>Select which order statuses count as purchased<\/li>\n<li>Control where badges appear (shop, category, product pages, block themes)<\/li>\n<li>Prevent Repurchase: block re-buying, all products or virtual\/downloadable only, with a custom notice<\/li>\n<li>Checkout warning for already-purchased cart items<\/li>\n<li>Exclusions by product ID or category<\/li>\n<li>\"My purchases\" account tab, purchase details, and hover tooltips<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<p>After activation, configure the plugin:<\/p>\n\n<ol>\n<li>Go to <strong>WooCommerce \u2192 Settings \u2192 Purchased Badge<\/strong><\/li>\n<li>Configure the following options:<\/li>\n<\/ol>\n\n<p><strong>Purchased Badge Settings:<\/strong><\/p>\n\n<ul>\n<li><strong>Enable Badge<\/strong>: Toggle the badge feature on\/off<\/li>\n<li><strong>Badge Text<\/strong>: Customize the text displayed on the badge (default: \"Purchased\")<\/li>\n<li><strong>Order Statuses<\/strong>: Select which order statuses count as purchased (default: Completed, Processing)<\/li>\n<\/ul>\n\n<p><strong>Display Settings:<\/strong><\/p>\n\n<ul>\n<li><strong>Show on Shop Page<\/strong>: Display badges on shop\/archive pages<\/li>\n<li><strong>Show on Category Pages<\/strong>: Display badges on product category pages<\/li>\n<li><strong>Show on Product Page<\/strong>: Display badges on single product pages<\/li>\n<\/ul>\n\n<ol>\n<li>Click <strong>Save changes<\/strong><\/li>\n<\/ol>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 6.2 or higher<\/li>\n<li>WooCommerce 7.0 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<\/ul>\n\n<h3>Credits<\/h3>\n\n<p>Developed by <a href=\"https:\/\/github.com\/softminal\">Softminal<\/a><\/p>\n\n<h4>Links<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/softminal\/purchasecheck-badge-for-woocommerce\">GitHub Repository<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/softminal\/purchasecheck-badge-for-woocommerce\/issues\">Report Issues<\/a><\/li>\n<\/ul>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under the GPL-2.0+ license.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New<\/strong><\/li>\n<li>Search for \"PurchaseCheck Badge for WooCommerce\"<\/li>\n<li>Click <strong>Install Now<\/strong> and then <strong>Activate<\/strong><\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin zip file<\/li>\n<li>Log in to your WordPress admin panel<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New<\/strong><\/li>\n<li>Click <strong>Upload Plugin<\/strong><\/li>\n<li>Choose the zip file and click <strong>Install Now<\/strong><\/li>\n<li>Click <strong>Activate Plugin<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20stop%20customers%20from%20buying%20the%20same%20product%20twice%3F\"><h3>Can I stop customers from buying the same product twice?<\/h3><\/dt>\n<dd><p>Yes. Enable Prevent Repurchase under WooCommerce \u2192 Settings \u2192 Purchased Badge \u2192 Prevent Repurchase. Owned products become non-purchasable for that customer and the Add to Cart button is replaced with a customizable notice. You can apply it to all products or only virtual\/downloadable ones.<\/p><\/dd>\n<dt id=\"how%20do%20i%20hide%20the%20add%20to%20cart%20button%20for%20already%20purchased%20products%3F\"><h3>How do I hide the Add to Cart button for already purchased products?<\/h3><\/dt>\n<dd><p>Turn on Prevent Repurchase. For any product the customer already owns, the Add to Cart button is removed and replaced with a notice you can customize. Combine it with the badge so customers see why the button is gone.<\/p><\/dd>\n<dt id=\"can%20customers%20see%20a%20list%20of%20products%20they%20already%20bought%3F\"><h3>Can customers see a list of products they already bought?<\/h3><\/dt>\n<dd><p>Yes. A \"My purchases\" tab is added to the WooCommerce My Account page (on by default). You can also place the list anywhere with the [pcbw_purchased_products] shortcode or the \"My Purchased Products\" Gutenberg block.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20block%20themes%3F\"><h3>Does it work with block themes?<\/h3><\/dt>\n<dd><p>Yes. Badges render inside Product Collection grids and on block-based single product templates, as well as classic themes.<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20certain%20products%20or%20categories%3F\"><h3>Can I exclude certain products or categories?<\/h3><\/dt>\n<dd><p>Yes. Under the General settings you can exclude individual products by ID or entire categories from both the badge and repurchase blocking.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20work%20with%20product%20variations%3F\"><h3>Does this plugin work with product variations?<\/h3><\/dt>\n<dd><p>Yes! If a customer purchases any variation of a variable product, both the variation and the parent product will be marked as purchased.<\/p><\/dd>\n<dt id=\"which%20order%20statuses%20should%20i%20select%3F\"><h3>Which order statuses should I select?<\/h3><\/dt>\n<dd><p>Typically, you'll want to select \"Completed\" and \"Processing\" statuses. However, you can customize this based on your business needs. For example, if you want to show badges only for fully completed orders, select only \"Completed\".<\/p><\/dd>\n<dt id=\"will%20the%20badge%20show%20for%20guest%20users%3F\"><h3>Will the badge show for guest users?<\/h3><\/dt>\n<dd><p>No, the badge only displays for logged-in users. This is because the plugin needs to check the user's order history, which requires authentication.<\/p><\/dd>\n<dt id=\"does%20this%20affect%20site%20performance%3F\"><h3>Does this affect site performance?<\/h3><\/dt>\n<dd><p>The plugin is optimized for performance using caching. Purchase data is cached per user and automatically cleared when new orders are placed. The plugin uses efficient WooCommerce APIs to minimize database queries.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20an%20order%20status%20changes%3F\"><h3>What happens when an order status changes?<\/h3><\/dt>\n<dd><p>The plugin automatically clears the cache when order statuses change, ensuring badges are always up-to-date.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Prevent Repurchase mode \u2014 optionally block customers from buying products they already own, replacing Add to Cart with a customizable notice; scope it to all products or virtual\/downloadable only (ideal for digital products, courses, and licenses)<\/li>\n<li>New: Block theme support \u2014 badges render in Product Collection grids and on block-based single product templates<\/li>\n<li>New: \"My purchases\" tab in My Account listing everything a customer owns, plus a <code>[pcbw_purchased_products]<\/code> shortcode and a Gutenberg block<\/li>\n<li>New: Purchase details on single product pages \u2014 purchase count and last purchase date with a \"View order\" link<\/li>\n<li>New: Shop and category badges show the purchase summary as a hover tooltip<\/li>\n<li>New: Optional checkout warning when the cart contains already-purchased items<\/li>\n<li>New: Exclusions \u2014 exclude products by category or product ID from badges and repurchase blocking<\/li>\n<li>New: Declared compatibility with WooCommerce High-Performance Order Storage (HPOS)<\/li>\n<li>New: Developer filters <code>pcbw_badge_html<\/code>, <code>pcbw_badge_text<\/code>, <code>pcbw_is_purchased<\/code>, <code>pcbw_repurchase_blocked<\/code>, <code>pcbw_product_excluded<\/code><\/li>\n<li>Improved: persistent caching of purchase lookups, refreshed on new orders, status changes, refunds, and settings changes<\/li>\n<li>Improved: purchased variations badge both the variation and its parent product without extra queries<\/li>\n<li>Improved: accessibility \u2014 badge tooltips exposed to screen readers, decorative icons hidden<\/li>\n<li>Tested up to WordPress 7.0 and WooCommerce 10.9<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Badge display on shop, category, and product pages<\/li>\n<li>Configurable badge text and order statuses<\/li>\n<li>Display location controls<\/li>\n<li>Performance optimization with caching<\/li>\n<li>Support for product variations<\/li>\n<\/ul>","raw_excerpt":"Show an &quot;Already Purchased&quot; badge on products customers bought before, prevent duplicate orders, and optionally block repurchase entirely.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/276244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=276244"}],"author":[{"embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/softminal"}],"wp:attachment":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=276244"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=276244"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=276244"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=276244"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=276244"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=276244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}