Woocommerce: пользователи могут купить продукт только один раз

Что я могу добавить в файл functions.php моей темы, чтобы пользователи могли купить продукт только один раз? Как и в случае, если они когда-либо покупали какой-либо товар в магазине раньше, они лишены возможности покупать его снова.

Я думаю, что код будет выглядеть примерно так (псевдокод) и будет использовать фильтр woocommerce_add_cart_item_data.

add_filter( 'woocommerce_add_cart_item_data', 'woo_check_not_bought_before' );

function woo_check_not_bought_before( $cart_item_data ) {

global $woocommerce;

// Some MYSQL to check if product was bought before

if ($bought_before == 'true') {
$woocommerce->cart->empty_cart();
}

// Echo some text to explain why you can only buy the product once

return $cart_item_data;
}

1

Решение

Вы можете использовать этот код для достижения ваших требований. Создайте папку под названием woocommerce в вашей теме. Затем создайте в нем папку с именем loop. Затем создайте в нем файл add-to-cart.php и напишите следующий код:

  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

global $product;
$current_user = wp_get_current_user();

if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product->id)) {
echo 'Purchased';
}
else
{
echo apply_filters( 'woocommerce_loop_add_to_cart_link',
sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="button          %s product_type_%s">%s</a>',
esc_url( $product->add_to_cart_url() ),
esc_attr( $product->id ),
esc_attr( $product->get_sku() ),
$product->is_purchasable() ? 'add_to_cart_button' : '',
esc_attr( $product->product_type ),
esc_html( $product->add_to_cart_text() )
),
$product );
}

Но пользователь все равно может создать другую учетную запись и снова купить этот продукт.

1

Другие решения

вот простое решение.

add_filter('woocommerce_add_to_cart_validation','rei_woocommerce_add_to_cart_validation',20, 2);
function rei_woocommerce_add_to_cart_validation($valid, $product_id){
$current_user = wp_get_current_user();
if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id)) {
wc_add_notice( __( 'Purchased', 'woocommerce' ), 'error' );
$valid = false;
}
return $valid;
}

Скриншот
http://reigelgallarde.me/product/woocommerce-woorei-shop-manager/

Проблема в том, что любой может создать нового пользователя и купить его снова.

5

Добавляя ответ WisdmLabs, вам также необходимо отредактировать шорткоды и другие экземпляры кнопки «Добавить в корзину».

Для этого создайте еще одну папку:
/ WP-содержание / темы / [тема] / WooCommerce / монопродуктовый / добавить к тележке /

Создайте файл в этой папке: simple.php и добавьте следующий код:

<?php
/**
* Simple product add to cart
*
* @author      WooThemes
* @package     WooCommerce/Templates
* @version     2.1.0
*/

if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}

global $product;

if ( ! $product->is_purchasable() ) {
return;
}

?>

<?php
// Availability
$availability      = $product->get_availability();
$availability_html = empty( $availability['availability'] ) ? '' : '<p class="stock ' . esc_attr( $availability['class'] ) . '">' . esc_html( $availability['availability'] ) . '</p>';

echo apply_filters( 'woocommerce_stock_html', $availability_html, $availability['availability'], $product );
?>

<?php if ( $product->is_in_stock() ) : ?>

<?php do_action( 'woocommerce_before_add_to_cart_form' ); ?>

<form class="cart" method="post" enctype='multipart/form-data'>
<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>

<?php
if ( ! $product->is_sold_individually() ) {
woocommerce_quantity_input( array(
'min_value'   => apply_filters( 'woocommerce_quantity_input_min', 1, $product ),
'max_value'   => apply_filters( 'woocommerce_quantity_input_max', $product->backorders_allowed() ? '' : $product->get_stock_quantity(), $product ),
'input_value' => ( isset( $_POST['quantity'] ) ? wc_stock_amount( $_POST['quantity'] ) : 1 )
) );
}
?>

<input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $product->id ); ?>" />
<?php $current_user = wp_get_current_user();

if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product->id)) { echo '<span class="product-purchased">Purchased</span>';}
else { ?><button type="submit" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button><?php }?>

<?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>
</form>

<?php do_action( 'woocommerce_after_add_to_cart_form' ); ?>

<?php endif; ?>

Затем вы также сможете редактировать текст «Закуплено», используя класс css: product-куплен.

Отдельные файлы должны быть добавлены с другим кодом для external.php, grouped.php, variable.php, если вы хотите, чтобы эта функциональность работала и для этих типов продуктов.

0
По вопросам рекламы [email protected]