Как удалить или убрать кнопку "Добавить в корзину"?

Как настроить отображение кнопок на странице товара в магазине WooCommerce в зависимости от роли пользователя? Необходимо, чтобы для пользователей с ролью "VIP" были доступны прямые ссылки на файлы вместо кнопки "Добавить в корзину". Как это можно реализовать с использованием хуков и функций WordPress?
  • 30 июня 2024 г. 16:02
Ответы на вопрос 2
Чтобы удалить или скрыть кнопку "Добавить в корзину" на странице товара в магазине WooCommerce, можно использовать следующий код в файле functions.php активной темы или в пользовательском плагине:

```php
add_action('woocommerce_after_shop_loop_item', 'remove_add_to_cart_button', 1);
function remove_add_to_cart_button() {
    remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10);
}
```

Чтобы настроить отображение кнопок на странице товара в зависимости от роли пользователя, можно использовать следующий код в файле functions.php:

```php
add_action('woocommerce_single_product_summary', 'custom_product_buttons', 25 );
function custom_product_buttons() {
    if (current_user_can('vip')) {
        // Выводим прямую ссылку на файл
        echo '<a href="ссылка на файл" class="button">Скачать файл</a>';
    } else {
        // Выводим кнопку "Добавить в корзину"
        woocommerce_template_single_add_to_cart();
    }
}
```

В данном коде мы используем хук `woocommerce_single_product_summary`, чтобы добавить свою кастомную функцию `custom_product_buttons`. В этой функции мы проверяем роль текущего пользователя с помощью функции `current_user_can('vip')`, и в зависимости от роли пользователя выводим либо прямую ссылку на файл, либо стандартную кнопку "Добавить в корзину".
Привет. 

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

Выводим ссылку на загрузку файла в карточке товара:
add_action('woocommerce_product_meta_end', 'download_products');

function download_products() {
	global $product;
	$files = $product->get_files();
	if ( !empty($files) && current_user_can( 'vipuser' ) && has_term( 'vipaccess', 'product_cat' ) ) {
		foreach( $files as $key => $each_download ) {
			echo '<p><a href="' . $each_download['file'] . '" download>Скачать файл <!--'. $each_download['name'].'--></a></p>';
		}
	}
}


Убираем из карточки товара цену, количество и кнопку добавления товара в корзину:
add_action('init', 'remove_add2cart_for_vip_users');

function remove_add2cart_for_vip_users(){
	if ( is_user_logged_in() && current_user_can( 'vipuser' ) ) {
		remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
		remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
		remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
	}
}


Из очевидного: а) делать такое на базе Вукоммерс своими силами — затея довольно сомнительная из-за самого Вукоммерса; б) проще/лучше воспользоваться готовыми плагинами; в) если всё же хочется написать эту функциональность самому, то надо более основательно продумывать логику, потому что тут легко перемудрить или, наоборот, не доглядеть что-то с ролями/правами/доступами.
Похожие вопросы