Иногда бывает нужно ограничить продажу товара для тех пользователей, которые уже купили его однажды. Это например может быть товар с какой-то мега-скидкой или подписка на сайт.
А в моём видеокурсе по WooCommerce мы детально останавливаемся на том, как закодить кнопки добавления в корзину для любых типов товаров, простых, вариативных и т.д.
Итак, наша задача будет состоять из трёх подзадач:
Может показаться, что сейчас мы для этого создадим целых три сниппета кода, но по факту всё решается одним единственным фильтр-хуком woocommerce_is_purchasable
и функцией wc_customer_bought_product()
, готовый код:
/** * @snippet Разрешаем пользователям покупать товар только 1 раз * @author Миша Рудрастых * @url https://misha.agency/woocommerce/skryt-knopku-dobavleniya-v-korzinu-esli-tovar-uzhe-kuplen.html */ add_filter( 'woocommerce_is_purchasable', 'true_hide_add_to_cart_if_purchased', 25, 2 ); function true_hide_add_to_cart_if_purchased( $is_purchasable, $product ) { // если текущий пользователь уже покупал этот товар if ( wc_customer_bought_product( '', get_current_user_id(), $product->get_id() ) ) { $is_purchasable = false; } return $is_purchasable; }
Не знаете, куда вставлять код?
Также я бы хотел обратить ваше внимание на два момента:
if ( 5 === $product->get_id() // если товар с ID=5 || wc_customer_bought_product( '', get_current_user_id(), $product->get_id() ) ) {
Для нескольких товаров:
if ( in_array( $product->get_id(), array( 5, 10 ) ) // если товар с ID=5 или 10 || wc_customer_bought_product( '', get_current_user_id(), $product->get_id() ) ) {
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Здравствуйте, Михаил!
У меня при использовании этого кода пропадают корзины у всех товаров. Хотя я прописал номер. В чем может быть дело?