Как настроить отображение кнопок на странице товара в магазине WooCommerce в зависимости от роли пользователя? Необходимо, чтобы для пользователей с ролью "VIP" были доступны прямые ссылки на файлы вместо кнопки "Добавить в корзину". Как это можно реализовать с использованием хуков и функций WordPress?
Чтобы удалить или скрыть кнопку "Добавить в корзину" на странице товара в магазине 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 ); } }
Из очевидного: а) делать такое на базе Вукоммерс своими силами — затея довольно сомнительная из-за самого Вукоммерса; б) проще/лучше воспользоваться готовыми плагинами; в) если всё же хочется написать эту функциональность самому, то надо более основательно продумывать логику, потому что тут легко перемудрить или, наоборот, не доглядеть что-то с ролями/правами/доступами.