Php 允许用户在Woocommerce中只购买一次特定产品
以下代码用于Woocommerce,允许在购买后再次购买Php 允许用户在Woocommerce中只购买一次特定产品,php,arrays,wordpress,woocommerce,product,Php,Arrays,Wordpress,Woocommerce,Product,以下代码用于Woocommerce,允许在购买后再次购买 function sv_disable_repeat_purchase( $purchasable, $product ) { // Enter the ID of the product that shouldn't be purchased again $non_purchasable = 40021; // Get the ID for the current product (passed in)
function sv_disable_repeat_purchase( $purchasable, $product ) {
// Enter the ID of the product that shouldn't be purchased again
$non_purchasable = 40021;
// 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( wp_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 );
请给我一个帮助,将$non_purchable=40021更改为产品数组这是您的代码和数组。请检查它是否符合您的要求:
function sv_disable_repeat_purchase( $purchasable, $product ) {
// Enter the ID of the product that shouldn't be purchased again
$non_purchasable_arr = array(
40021,
40022
);
// 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
foreach ( $non_purchasable_arr as $non_purchasable ) {
if ( $non_purchasable !== $product_id ) {
return $purchasable;
}
}
// return false if the customer has bought the product
if ( wc_customer_bought_product( wp_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 );
更新(删除了过时的、不需要的$product->variation\u id
…)
您只需在_array()中使用PHP条件函数。此外,您的代码已经过时:
- 这是过时的
$product->variation\u id
- 将
$product->id
替换为$product->get_id()
下面是一个简化的重新访问代码版本:
add_filter( 'woocommerce_variation_is_purchasable', 'products_purchasable_once', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'products_purchasable_once', 10, 2 );
function products_purchasable_once( $purchasable, $product ) {
// Here set the product IDs in the array that can be purchased only once
$targeted_products = array(40021, 40038, 40171);
// Only for logged in users and not for variable products
if( ! is_user_logged_in() || $product->is_type('variable') )
return $purchasable; // Exit
$user = wp_get_current_user(); // The WP_User Object
if ( in_array( $product->get_id(), $targeted_products ) &&
wc_customer_bought_product( $user->user_email, $user->ID, $product->get_id() ) ) {
$purchasable = false;
}
return $purchasable;
}
代码位于活动子主题(或活动主题)的function.php文件中。测试和工作