Skip Navigation

[Gelöst] Prevent repeat purchase with Woocommerce

This support ticket is created vor 7 Jahre, 10 Monate. There's a good chance that you are reading advice that it now obsolete.

This is the technical support forum for Toolset - a suite of plugins for developing WordPress sites without writing PHP.

Everyone can read this forum, but only Toolset clients can post in it. Toolset support works 6 days per week, 19 hours per day.

No supporters are available to work today on Toolset forum. Feel free to create tickets and we will handle it as soon as we are online. Thank you for your understanding.

Sun Mon Tue Wed Thu Fri Sat
- 10:00 – 13:00 10:00 – 13:00 10:00 – 13:00 10:00 – 13:00 10:00 – 13:00 -
- 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 -

Supporter timezone: Asia/Kolkata (GMT+05:30)

This topic contains 3 Antworten, has 2 Stimmen.

Last updated by Minesh vor 7 Jahre, 10 Monate.

Assisted by: Minesh.

Author
Artikel
#400772

Hi,

i have made a membership on my side with Woocommerce und Views (Woocommerce Views).
Here i have Free and Paid Membership Levels.

The Problem i have now.

- How to Prevent Repeat Purchase for Free membership?
I have tryed this code from here hidden link
But i have setup my Views like in your Classifieds Site...
https://toolset.com/learn/wordpress-classifieds-site/toolset-classifieds-customization-guide/
So the above code from Skyverge will not work.

Hope you can help me.

Thanks

#400910

Minesh
Supporter

Languages: Englisch (English )

Timezone: Asia/Kolkata (GMT+05:30)

Hello. Thank you for contacting the Toolset support.

Have you chang your product ID with following line of code?

$non_purchasable = 356;   // change your product ID here

Also, have you check "Sold individually" option:
hidden link
Ticking the Sold Individually checkbox limits the product to one per order.

However, this requires custom programming and beyond the scope of our support policy. you may contact our certified partners for your custom programming needs.
https://toolset.com/consultant/

#400965

Hi Minesh,

i have the whole code and added my ID,...but its not working.

function sv_disable_repeat_purchase( $purchasable, $product ) {
	// Enter the ID of the product that shouldn't be purchased again
	$non_purchasable = 216;
	
	// Get the ID for the current product (passed in)
	$product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->id;
	
	// Bail unless the ID is equal to our desired non-purchasable product
	if ( $non_purchasable != $product_id ) {
		return $purchasable;
	}
    
    // return false if the customer has bought the product
    if ( wc_customer_bought_product( get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
        $purchasable = false;
    }
    
    // Double-check for variations: if parent is not purchasable, then variation is not
    if ( $purchasable && $product->is_type( 'variation' ) ) {
        $purchasable = $product->parent->is_purchasable();
    }
    
    return $purchasable;
}
add_filter( 'woocommerce_variation_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
/**
 * Shows a "purchase disabled" message to the customer
 */
function sv_purchase_disabled_message() {
	// Enter the ID of the product that shouldn't be purchased again
	$no_repeats_id = 216;
	$no_repeats_product = wc_get_product( $no_repeats_id );
	
	// Get the current product to check if purchasing should be disabled
	global $product;
	
	if ( $no_repeats_product->is_type( 'variation' ) ) {
		// Bail if we're not looking at the product page for the non-purchasable product
		if ( ! $no_repeats_product->parent->id === $product->id ) {
			return;
		}
		
		// Render the purchase restricted message if we are
		if ( wc_customer_bought_product( get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
			sv_render_variation_non_purchasable_message( $product, $no_repeats_id );
		}
		
	} elseif ( $no_repeats_id === $product->id ) {
		if ( wc_customer_bought_product( get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
			// Create your message for the customer here
			echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message">You\'ve already purchased this product! It can only be purchased once.</div></div>';
		}
	}
}
add_action( 'woocommerce_single_product_summary', 'sv_purchase_disabled_message', 31 );
/**
 * Generates a "purchase disabled" message to the customer for specific variations
 * 
 * @param \WC_Product $product the WooCommerce product
 * @param int $no_repeats_id the id of the non-purchasable product
 */
function sv_render_variation_non_purchasable_message( $product, $no_repeats_id ) {
	
	// Double-check we're looking at a variable product
	if ( $product->is_type( 'variable' ) && $product->has_child() ) {
		$variation_purchasable = true;
		
		foreach ( $product->get_available_variations() as $variation ) {
			// only show this message for non-purchasable variations matching our ID
			if ( $no_repeats_id === $variation['variation_id'] ) {
				$variation_purchasable = false;	
				// edit your customer message here
				echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message js-variation-' . sanitize_html_class( $variation['variation_id'] ) . '">You\'ve already purchased this product! It can only be purchased once.</div></div>';
			}
		}
	}
	
	// show / hide this message for the right variation with some jQuery magic
	if ( ! $variation_purchasable ) {
		wc_enqueue_js("
			jQuery('.variations_form')
				.on( 'woocommerce_variation_select_change', function( event ) {
					jQuery('.wc-nonpurchasable-message').hide();
				})
				.on( 'found_variation', function( event, variation ) {
					jQuery('.wc-nonpurchasable-message').hide();
					if ( ! variation.is_purchasable ) {
						jQuery( '.wc-nonpurchasable-message.js-variation-' + variation.variation_id ).show();
					}
				})
			.find( '.variations select' ).change();
		");
	}
}
#401219

Minesh
Supporter

Languages: Englisch (English )

Timezone: Asia/Kolkata (GMT+05:30)

This seems custom programming and to give support for custom programming is beyond the scope of our support policy.

You may contact our certified partners they will for sure help you with your any custom programming needs.
https://toolset.com/consultant/

This ticket is now closed. If you're a WPML client and need related help, please open a new support ticket.