Обновление (удалены устаревшие ненужные $product->variation_id
…)
Вы можете просто использовать условную функцию PHP in_array()
… Кроме того, ваш код устарел:
- Это устарело
$product->variation_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 вашей активной дочерней темы (или активной темы).Проверено и работает.