如果登录用户已经购买了WooCommerce产品,请隐藏该产品



我正在使用LearnDash+WooCommerce创建LMS。到目前为止还不错。现在,我想在登录用户已经购买产品时隐藏产品,以a(防止用户购买两次,b(这样我就可以为他们显示产品网格,而不必已经购买的商品。

另一个例子:如果购买了商品a的用户去商店,商品a甚至不应该为他们显示。

非常感谢!

所以,我最终找到了一个很好的解决方法:

在产品页面上,我创建了一个自定义字段,可以在其中输入课程ID。

然后,使用PHP,我检查Product并检索COURSE ID的自定义字段。

LearnDash有一个学生的快捷代码。。。因此,在检索到课程ID后,我可以为已经注册该课程的用户显示一条消息/按钮。

这是代码:

<?php
global $product;
$postid = $product->get_id();
$courseid = get_post_meta( $product->get_id(), 'ID_del_curso', true );
$html = '"]<center><div class="alreadyPurchased"><i class="fas fa-graduation-cap paddingRightM"></i> Ya te has registrado</div></center>';
$openIT = '[student course_id="';
$closeIT = '[/student]';
echo do_shortcode( $openIT . $courseid . $html . $closeIT ); 
?>

希望它能有所帮助!

有一个更简单的解决方案。使用此LearnDash短代码。。。

[访问者]访客您好。把你的";立即购买";按钮。[/visiter]

/**
* Disables repeat purchase for products / variations
* 
* @param bool $purchasable true if product can be purchased
* @param WC_Product $product the WooCommerce product
* @return bool $purchasable the updated is_purchasable check
*/
function sv_disable_repeat_purchase( $purchasable, $product ) {
// Don't run on parents of variations,
// function will already check variations separately
if ( $product->is_type( 'variable' ) ) {
return $purchasable;
}
// Get the ID for the current product (passed in)
$product_id = $product->get_id(); 
// return false if the customer has bought the product / variation
if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
$purchasable = false;
}
return $purchasable;
}
add_filter( 'woocommerce_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );

/**
* Shows a "purchase disabled" message to the customer
*/
function sv_purchase_disabled_message() {
global $product; // get the current product to see if it has been purchased
if ( $product->is_type( 'variable' ) ) {
foreach ( $product->get_children() as $variation_id ) {
// Render the purchase restricted message if it has been purchased
if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $variation_id ) ) {
sv_render_variation_non_purchasable_message( $product, $variation_id );
}
}
} else {
if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product->get_id() ) ) {
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; 
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>';
}
}
}
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();
");
}
}

Gist片段从这里获得-请检查

相关内容

最新更新