Скрыть цены и функционал оформления заказа в WooCommerce
Я понимаю, что этот вопрос может быть слишком общим, но мне нужно небольшое направление. У моего клиента есть магазин на WooCommerce с 30-40 товарами. По определенным причинам они больше не хотят продавать онлайн, но хотят сохранить страницы товаров, информацию и т.д. на своем сайте.
Есть ли способ с помощью хуков или других средств скрыть такие элементы, как цены, кнопку добавления в корзину и т.д. в WooCommerce? Или лучше просто отредактировать PHP файлы шаблонов?

К счастью, WooCommerce предоставляет множество хуков, вот код для удаления цен и кнопок:
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
Если вам нужно удалить больше элементов, вы можете изучить файлы content-product.php
и content-single-product.php
.
Полагаю, вам может понадобиться скрыть/удалить не только цены и кнопки (например, страницы или функции), это руководство даст вам несколько подсказок

Правильно ли я понимаю, что эти хуки нужно вставлять в functions.php? Если да, то в каком именно разделе их нужно разместить? И если они сработают, то функциональность корзины больше не будет видна, за исключением некоторых стилей, верно?

Да, вы можете добавить их в functions.php, и не важно, в каком месте внутри другой функции вы их разместите. Обычно самый безопасный вариант — добавить их в самый конец файла, главное не размещать их после последнего ?>
. Это не удалит страницу корзины, но фактически уберет возможность добавления товаров в корзину. Если вам не нужна страница корзины вообще, то это относительно безопасный вариант.

Расширяя приведенный выше код (спасибо Ewout), следующий код уберет все цены и кнопки "Добавить в корзину" для всех товаров WooCommerce, а также предоставит объяснение, почему это сделано. Мне понадобился этот код для сайта, который предлагает продукты прямых продаж, и чтобы соответствовать их правилам, я не могу показывать цены для широкой публики.
Добавьте фильтр в файл functions.php вашей темы.
add_filter('woocommerce_get_price_html','members_only_price');
function members_only_price($price){
if(is_user_logged_in() ){
return $price;
}
else {
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
return 'Только <a href="' .get_permalink(woocommerce_get_page_id('myaccount')). '">зарегистрированные пользователи</a> могут просматривать цены.';
}
}

Это странно. После применения этого изображения товаров перестали отображаться. На их месте отображается пустое пространство, но при наведении курсора и клике изображение появляется. Есть идеи, почему так происходит?

add_filter( 'woocommerce_is_purchasable', '__return_false' );
add_filter( 'woocommerce_get_price_html', '__return_empty_string' );
Это полностью предотвратит оформление заказа и скроет все цены путем:
- Делает все товары недоступными для покупки (строка 1)
- Очищает HTML с ценой (строка 2)
