Задать вопрос
nulledbox
@nulledbox

Как скрыть кнопку Добавить в корзину?

В магазине Woocommerce имеются роли
Админ
Клиент
VIP

Внутри имеются поля ACF в которых указаны ссылки на файлы.
Роль "vip" должна иметь прямой доступ к этим файлам. А именно Если пользователь имеет роль VIP то для него убраны кнопки "добавить в корзину" и в вместо нее должна быть кнопка "Скачать" (ссылка подставляется с поля ACF).

Когда-то видел решение, было сделано через хук в function, но не сохранил его.
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
r3n0
@r3n0
// _ AppSec // Bug Bounty / Legal Hacking
Привет.

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

Выводим ссылку на загрузку файла в карточке товара:
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 );
	}
}


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

Войдите, чтобы написать ответ

Похожие вопросы